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

Вниз

Запрет на появление дубликата дочернего окна в MDI приложение   Найти похожие ветки 

 
smok_red   (2005-03-07 08:55) [0]

пробовал так:
if not Assigned(Form4) then
 begin
 .....
 end;
непомагает, да сразу за созданием формы дублекат не создается, а вот после создания другой, первую снова можно собрать.

Можно конечно так :
for i:= 0 to MdiChildCount - 1 do
   if MDIChildren[i].tag=1 then exit;

Но должен же быть оптимальный!


 
KSergey ©   (2005-03-07 09:09) [1]

Мне нравится ф-ция такого плана:

{******************************************************************************
* Создание дочернего 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;


 
smok_red   (2005-03-07 09:32) [2]

Здорова!
Спосибо!

Получается класная функция:

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:52) [3]

Моя мне больше нравилась, она не занязана на конкретный проект, никаких Form1 там нет...

Но это так, мысли в слух.


 
Defunct ©   (2005-03-07 09:56) [4]

> никаких Form1 там нет...

:)


 
KSergey ©   (2005-03-07 10:01) [5]

> [4] Defunct ©   (07.03.05 09:56)
> > никаких Form1 там нет...
> :)

Не понял... смайлик по поводу чего?

PS
К стати, в клиенте (DMClient) эта всетка (у меня) скачалась криво. В ней d [1] и [2] отображается мой ответ. Хотя на самом деле (если зайти через WEB) в [2] - ответ smok_red


 
Defunct ©   (2005-03-07 10:14) [6]

KSergey ©   (07.03.05 10:01) [5]
> Не понял... смайлик по поводу чего?

поводу кода Form1.ToolBar1;


 
smok_red   (2005-03-07 10:28) [7]

А зачем смеятся (((((!

когда-то сами такими были! (((
если можете подскажите как исправить чтобы работало!


 
Defunct ©   (2005-03-07 10:35) [8]

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) [9]

Добавить ещё один параметр в функцию и передавать через него Form1.ToolBar1



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

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

Наверх




Память: 0.49 MB
Время: 0.032 c
1-1109294722
jamHole
2005-02-25 04:25
2005.03.20
Обработка текста.


14-1109576048
DVM
2005-02-28 10:34
2005.03.20
Помогите потестировать скрипт PHP (разбор HTTP_USER_AGENT)


14-1109022973
Igor_thief
2005-02-22 00:56
2005.03.20
Снова про тот же вирус


1-1110102467
leonidus
2005-03-06 12:47
2005.03.20
Знатокам компонента VCLZIP


14-1109327484
Anatoly Podgoretsky
2005-02-25 13:31
2005.03.20
Какой злой сегодня Error 500