Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-1109533310
Piter
2005-02-27 22:41
2005.03.20
Gmail и аттачи


14-1109269968
Palladin
2005-02-24 21:32
2005.03.20
Построение БД


14-1109459358
Копир
2005-02-27 02:09
2005.03.20
Деликатный вопрос. Девушкам не читать!


14-1109618597
Pietro
2005-02-28 22:23
2005.03.20
как послать Mail?


6-1105938265
Kacnep
2005-01-17 08:04
2005.03.20
Разбираюсь с ФТП. Пробовал компоненты ФастНета и Инди.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский