Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1098767015
rosl
2004-10-26 09:03
2004.11.07
меню


6-1093954630
Дядя
2004-08-31 16:17
2004.11.07
Цепочка прокси-серверов


1-1098360544
Koala
2004-10-21 16:09
2004.11.07
Вызов формы из dll


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


9-1086894205
Огромное Кулясище
2004-06-10 23:03
2004.11.07
Каков OpenGL для 2D?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский