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

Вниз

Проверка создания mdichild формы?   Найти похожие ветки 

 
samumka ©   (2004-10-18 10:46) [0]

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


 
Erik1 ©   (2004-10-18 11:25) [1]

Проверка создания MDI ничем неотличаеться от проверки создания обычной формы. Конструктор либо отрабатывает либо нет, ты ловиш exception с помощю try except. Второе Show, Restore.


 
AlexG ©   (2004-10-18 11:35) [2]

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


 
Pentium133 ©   (2004-10-18 11:57) [3]

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


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;


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

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


 
AlexG ©   (2004-10-18 13:41) [5]

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


 
1008 ©   (2004-10-18 13:48) [6]

AlexG ©  (18.10.04 13:41) [5]

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


 
AlexG ©   (2004-10-18 14:06) [7]

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


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

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


 
AlexG ©   (2004-10-18 14:24) [9]

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


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

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


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

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


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


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

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


 
Erik1 ©   (2004-10-18 14:48) [13]

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

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


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


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

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


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

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

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


 
Pentium133 ©   (2004-10-18 15:37) [16]


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

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


 
AlexG ©   (2004-10-18 15:45) [17]

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


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

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


 
Silla ©   (2004-10-18 23:39) [19]

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


 
samumka ©   (2004-10-25 15:02) [20]

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


 
Pentium133 ©   (2004-10-25 15:05) [21]

Yes!!



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

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

Наверх




Память: 0.51 MB
Время: 0.024 c
14-1098080502
Prohodil Mimo
2004-10-18 10:21
2004.11.07
Цифровой фотоаппарат Canon Powershot A75. Что вы о нём думаете?


4-1096056488
RyDmi
2004-09-25 00:08
2004.11.07
Получение текста из TMemo


14-1098408899
Думкин
2004-10-22 05:34
2004.11.07
С днем рождения! 22 октября


14-1098212687
KilkennyCat
2004-10-19 23:04
2004.11.07
Старье, но прикольно


14-1098426785
gn
2004-10-22 10:33
2004.11.07
Модификация автомата Калашникова: