![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрет на появление дубликата дочернего окна в MDI приложение [D5, D6, D7, Win95/98, Win2k, WinXP]
smok_red © (2005-03-07 08:55:00)пробовал так:
if not Assigned(Form4) then
begin
.....
end;
непомагает, да сразу за созданием формы дублекат не создается, а вот после создания другой, первую снова можно собрать.
Можно конечно так :
for i:= 0 to MdiChildCount - 1 do
if MDIChildren[i].tag=1 then exit;
Но должен же быть оптимальный!
Defunct (2005-03-07 10:35:00) [1]smok_red (07.03.05 10:28) [7]
> А зачем смеятся
А никто и не смеется, просто улыбка.
> как исправить чтобы работало!
А разве не работает?
просто поместите функцию в описание TForm1.
TForm1 = class(TForm)
...
...
private
function ShowMDIChild (const AFormClass: TFormClass): TForm;
а в самой функции выбросите обращение к глобальной переменной "Form1."
Плохиш (2005-03-07 10:35:00) [2]Добавить ещё один параметр в функцию и передавать через него Form1.ToolBar1
smok_red (2005-03-07 10:28:00) [3]А зачем смеятся (((((!
когда-то сами такими были! (((
если можете подскажите как исправить чтобы работало!
Defunct (2005-03-07 10:14:00) [4]KSergey © (07.03.05 10:01) [5]
> Не понял... смайлик по поводу чего?
поводу кода Form1.ToolBar1;
KSergey (2005-03-07 10:01:00) [5]> [4] Defunct © (07.03.05 09:56)
> > никаких Form1 там нет...
> :)
Не понял... смайлик по поводу чего?
PS
К стати, в клиенте (DMClient) эта всетка (у меня) скачалась криво. В ней d [1] и [2] отображается мой ответ. Хотя на самом деле (если зайти через WEB) в [2] - ответ smok_red
Defunct (2005-03-07 09:56:00) [6]> никаких Form1 там нет...
:)
KSergey (2005-03-07 09:52:00) [7]Моя мне больше нравилась, она не занязана на конкретный проект, никаких Form1 там нет...
Но это так, мысли в слух.
smok_red (2005-03-07 09:32:00) [8]Здорова!
Спосибо!
Получается класная функция:
function ShowMDIChild (const AFormClass: TFormClass): TForm;
var
i: Integer;
begin
Result := nil;
for i := 0 to Application.MainForm.MDIChildCount-1 do
if Application.MainForm.MDIChildren[i].ClassType = AFormClass then
begin
Result := Application.MainForm.MDIChildren[i];
Result.Show; //SetWindowPos(MDIChildren[i].Handle, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE+SWP_NOMOVE);
break;
end;
if NOT Assigned(Result) then
begin
Result := AFormClass.Create(Application);
ToolBtn:=TToolButton.Create(Result);
ToolBtn.Parent:=Form1.ToolBar1;
ToolBtn.Caption:=Result.Caption;
ToolBtn.Hint:='Вывести на передний план '+Result.Caption;
ToolBtn.Tag := Integer(Result);
end;
end;
Это на случай если вдруг кому надо!
KSergey (2005-03-07 09:09:00) [9]Мне нравится ф-ция такого плана:
{******************************************************************************
* Создание дочернего MDI-окна
* Проверяет, создано ли уже окно указанного класса, если нет - создает, если
* да - активизирует ранее созданное.
* Вход:
* AFormClass - класс создаваемого MDI окна
* Возвращает ссылку на созданное/активизированное окно.
******************************************************************************}
function ShowMDIChild (const AFormClass: TFormClass): TForm;
var
i: Integer;
begin
Result := nil;
for i := 0 to Application.MainForm.MDIChildCount-1 do
if Application.MainForm.MDIChildren[i].ClassType = AFormClass then
begin
Result := Application.MainForm.MDIChildren[i];
Result.Show; //SetWindowPos(MDIChildren[i].Handle, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE+SWP_NOMOVE);
break;
end;
if NOT Assigned(Result) then Result := AFormClass.Create(Application);
end;