Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
ВнизЗапрет на появление дубликата дочернего окна в 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c