Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проверка создания mdichild формы? [D7, WinXP]


Страницы:   1 2

samumka ©   (2004-10-18 10:46:00) 

Всем добрый день.
Подскажите каким образом запретить создание несколькох одинаковый mdi-дочек. А еще как проверить создана ли вызываемая дочка и если создана, то показать на экране из свернутого состояния.
Спасибо.


Pentium133   (2004-10-25 15:05:00) [1]

Yes!!


samumka   (2004-10-25 15:02:00) [2]

Всем спасибо! Извините, что не следил за темой, неожидал такой оживленной полемики :)) Вопрос разрешился в пользу Pentium133.


Silla   (2004-10-18 23:39:00) [3]

А такой вариант не устроит?
if not Assigned(FrmMyChild) then
   Application.CreateForm(TFrmMyChild, FrmMyChild);
 FrmMyChild.Show;


Pentium133   (2004-10-18 16:40:00) [4]

Считаю, без участия автора темы, дальнейшие обсуждение её бесмысленным.


AlexG   (2004-10-18 15:45:00) [5]

//Pentium133 ©   (18.10.04 15:37) [16]
Ну смотри. Еще такой вариант может быть: какие-то конкретные окна должны быть в одном экземпляре, а другие во множественном...
Так что, думаю, мы друг друга поняли :)


Pentium133   (2004-10-18 15:37:00) [6]


> Он оптимален в случае унифицирования класса, при
> большом количестве наследований и пр. такой бодяги.
> Когда используется один класс, что чаще, быстрее будет
> просто использовать флаг активности окна.

Может быть. У меня около десятка разных MDI-форм.
А когда используется только одна MDI-форма, причем на экране она должна быть только в одном экземпляре проще и логичнее перейти на SDI-интерфейс.


AlexG   (2004-10-18 15:28:00) [7]

//Erik1 ©   (18.10.04 14:48) [13]
Мы здесь вобще-то обсуждаем как определить запущенно уже окно или нет. О других exception'ах разговаривают где-то в другой ветке...

//Pentium133 ©
Он оптимален в случае унифицирования класса, при большом количестве наследований и пр. такой бодяги. Когда используется один класс, что чаще, быстрее будет просто использовать флаг активности окна.


Pentium133   (2004-10-18 14:51:00) [8]


> CheckWin оптимален, если проверть уже суцествующие
окна.

Т.е при проверке несуществующего окна функция работать не будет?
Как раз-то CheckWin нужен что бы проверить существует ли окно.


Erik1   (2004-10-18 14:48:00) [9]

to AlexG
Это как небудут?! А если в констркторе ошибка, может быть сотня другая причин по которой возникнет exception.

to Pentium133
CheckWin оптимален, если проверть уже суцествующие окна.


Pentium133   (2004-10-18 14:46:00) [10]


> Нет, он долгий.

8-0
Да даже при открытии сотни окон (конечно, такого никогда не будет) я не думаю что надо будет идти курить.
А мне нравится такое решение. Как говорится не через J'пу


AlexG   (2004-10-18 14:40:00) [11]

//Pentium133 ©   (18.10.04 14:25) [10]
Нет, он долгий. Представь что у тебя открыта сотня окон. Конечно, такое никогда не будет, но в теории... В варианте с переменной проверяется просто условие
if <> then ... else...
Выигрыш очевиден.


Pentium133   (2004-10-18 14:25:00) [12]

Я так думаю, если мой вариант не обсуждается - то он идеален?
;)


AlexG   (2004-10-18 14:24:00) [13]

//Erik1
Если они возникают. А если нет?
В моем подходе их не будет возникать ;)


Erik1   (2004-10-18 14:16:00) [14]

To samumka
Обяснил бы, что тебе надо. А то тут народ копя скоро ломать будет.
To AlexG
"И ни каких TRY ... EXCEPTION" а ты знаеш, что означает слово проверить? Если неиспользуется механизм исключений, то обязательно надо подовлять возникающие исключения.


AlexG   (2004-10-18 14:06:00) [15]

A у меня там TRY? Читай внимательней :) И НИ КАКИХ TRY...


1008   (2004-10-18 13:48:00) [16]

AlexG ©  (18.10.04 13:41) [5]

У меня, в отличие от вас, нет блока try. Я делаю проверку на этапе FormShow


AlexG   (2004-10-18 13:41:00) [17]

//1008 ©   (18.10.04 12:33) [4]
Во-первых, уже я сказал :)
Во-вторых, неточность у тебя: нужно проверять до того, как создать объект... ;)


1008   (2004-10-18 12:33:00) [18]

Ещё один (не оптимальный) вариант:
в форме main завести переменную, которая будет говорить запущена ли дочерняя форма или нет. Если запущена, то вновь созданную закрыть.


Pentium133   (2004-10-18 11:57:00) [19]

Использую такую функцию, в параметр кидай Имя формы:
Вызов  


if CheckWin('fTovar') then Exit;
fTovar:= TfTovar.Create(Self);
fTovar.Show


Код:
function TfMain.CheckWin(AName: string): boolean;
 var
   i: integer;
begin
 for i:= 0 to MDIChildCount - 1 do
   if MDIChildren[i].Name = AName then
     begin
       Result:= true;
       MDIChildren[i].BringToFront;
       Exit
     end;
 Result:= false
end;


AlexG   (2004-10-18 11:35:00) [20]

Для проверки существования созданного дочернего окна следует добавить еще одну переменную, в которой ты будешь отмечать состояние конкретного окна: вкл. или выкл.
Можно использовать более сложные механизмы, но результат будет один и тот же. И ни каких TRY ... EXCEPTION ...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо