Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.03;
Скачать: CL | DM;

Вниз

вызов форм   Найти похожие ветки 

 
anatolyk ©   (2003-06-22 19:51) [0]

Всем привет. Помогите разобраться в следующем вопросе.
Есть необходимость написать что-то вроде этого

Procedure TForm1.OpenSomeForm(SomeForm:TForm);
var
i: integer;
FormFound: Boolean;
begin
FormFound := False;
for i:=0 to Screen.FormCount - 1 do begin
try
if Screen.Forms[i].Caption = SomeForm.Caption then begin
FormFound := True;
Form1.SendToBack; //Form1 - menu
break;
end
except
end;
end;
if FormFound then SomeForm.SetFocus
else Application.CreateForm(TForm2, SomeForm);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// Класс в CreateForm: TForm2, TForm3, ... в зависимости
// от имени SomeForm, и всегда будет соответствовать "T"+ имя SomeForm
//
end;

Можно, конечно, написать все это для каждого пункта меню, но хотелось бы ограничится подобной процедурой, чтобы вызов был
типа
OpenSomeForm(Form1); и т.д.


 
Ученик ©   (2003-06-22 19:58) [1]

Почему не SomeForm.BringToFront ?


 
anatolyk ©   (2003-06-22 20:09) [2]

Если форма создана, то да. А если еще нет. Разве BringToFront создаст ее?. Хотя, замечание полезное. Спасибо.


 
Ученик ©   (2003-06-22 20:20) [3]

>anatolyk © (22.06.03 20:09)
Каким образом устанавливается соответствие пункт меню - класс формы ?


 
anatolyk ©   (2003-06-22 20:26) [4]

Да никаким. Просто есть, скажем, меню из 3 пунктов. Есть 3 формы: Form2 (TForm2), Form3 (TForm3), Form4 (TForm4).

вот и приходится для кажного пункта меню на OnClick писать тот же кусок кода, но менять в нем 2 на 3, 3 на 4. Гемор, да и красивее было бы одной строчкой.


 
Ученик ©   (2003-06-22 20:43) [5]

Чуть сокращенный вариант :-)

if Form1 = nil then
Applcation.CreateForm(TForm1, Form1)
else
Form1.BringToFront

В TForm1.OnDestroy
Form1 := nil


 
VMcL ©   (2003-06-22 22:25) [6]

>Ученик © (22.06.03 20:43)
>В TForm1.OnDestroy
> Form1 := nil

Это не всегда правильно.


 
Ученик ©   (2003-06-22 22:33) [7]

>VMcL © (22.06.03 22:25)
В данном случае, надеюсь, правильно ?



Страницы: 1 вся ветка

Текущий архив: 2003.07.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
9-7278
KoHe4Ho }|{e 6ot
2003-01-18 23:17
2003.07.03
Как перерисовывать image или canvas без мигания ?


3-7307
Explorer
2003-06-05 11:40
2003.07.03
Данные из Excel в MS SQL


14-7660
marconi8
2003-06-11 22:51
2003.07.03
удалить файл, если pc внезапно вырубился


3-7324
keymaster
2003-06-05 15:33
2003.07.03
Как работать с удалённой БД?


3-7339
Solod
2003-06-10 09:19
2003.07.03
Перевод с BDE в ADO