![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка создания mdichild формы? [D7, WinXP]
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 ...