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