Форум: "Основная";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];
ВнизПроблемы при открытии ФОРМЫ Найти похожие ветки
← →
Slim (2007-11-07 01:45) [0]Доброго времени суток уважаемые!
Помогите:
Есть MDI приложение, в нем есть Childe форма (Form3). Мне нужно из Form3 открыть такую же форму но уже модально:
Пишу так:Form3Sl:=TForm3.Create(self);
Form3Sl.FormStyle:=fsNormal;
Form3Sl.BorderStyle:=bsDialog;
Form3Sl.Width:=800;Form3Sl.Height:=600;
Form3Sl.WindowState:=wsNormal;
Form3Sl.Position:=poScreenCenter;
Form3Sl.BorderIcons:=[];
Form3Sl.Visible:=False;
Form3Sl.ShowModal;
Все работает, но ПРИ ОТКРЫТИИ ФОРМЫ ВСЕ "МОРГАЕТ" (видно что в некоторые доли секунды форма появилась в одном углу, потом изменила размер....)
Как решить проблему???
Спасибо всем заранее!
С уважением SLIM
← →
{RASkov} (2007-11-07 02:14) [1]> [0] Slim (07.11.07 01:45)
> Все работает, но ПРИ ОТКРЫТИИ ФОРМЫ ВСЕ "МОРГАЕТ" (видно
> что в некоторые доли секунды форма появилась в одном углу,
> потом изменила размер....)
Дело в том, что форма создается дочерней, а дочернюю форму спрятать нельзя вот и моргает... при переводе ее из дочки в обычную...
Попробуй изменить структуру программы....
Да.... и вот в этом вообще смысла никакого нет (прячем перед показом)Form3Sl.Visible:=False;
Form3Sl.ShowModal;
:)
Тогда бы уж лучше так:Form3Sl:=TForm3.Create(self);
Form3Sl.FormStyle:=fsNormal;
Form3Sl.Hide;
Form3Sl.BorderStyle:=bsDialog;
Form3Sl.Width:=800;Form3Sl.Height:=600;
Form3Sl.WindowState:=wsNormal;
Form3Sl.Position:=poScreenCenter;
Form3Sl.BorderIcons:=[];
Form3Sl.ShowModal;
Намного лучше не станет, но смысла у Visible:=false(Hide) появится больше ;)
← →
Loginov Dmitry © (2007-11-07 08:01) [2]Если хочешь избежать моргания, то измени в инпекторе объектов ее тип на "нормальный", а после создания, если это необходимо, делай ее дочерней.
← →
Slim (2007-11-07 08:20) [3]
> Намного лучше не станет, но смысла у Visible:=false(Hide)
> появится больше ;)
: ) Спасибо! Хоть смусл у программы улучшиться!
> Если хочешь избежать моргания, то измени в инпекторе объектов
> ее тип на "нормальный", а после создания, если это необходимо,
> делай ее дочерней.
Исходно так и есть : ( уже все перепробовал, что мог! Результат то же! : (
← →
Юрий Зотов © (2007-11-07 10:53) [4]> Slim (07.11.07 08:20) [3]
Этого не может быть. Код этого варианта - в студию, плз.
Моргание у Вас происходит из-за того, что дочерняя форма невидимой быть не может. Поэтому, как только Вы создали Form3Sl, она тут же становится видимой (причем ее размеры и позиция определяются не Вами, а системой). Далее Вы меняете ей стиль на fsNormal и производите другие манипуляции - все это приводит к пересозданию окна (притом неоднократному), к изменению позиции и размеров формы - короче говоря, к многократной перерисовке окна, да еще и в разных местах экрана. Вот и получается моргание.
Все эти подготовительные манипуляции надо проводить на невидимой форме и только после их завершения вызывать ShowModal. А поскольку дочерняя форма невидимой быть не может, надо поступить так, как сказано в [2]. И если все правильно сделать, то не работать оно просто не может.
← →
Slim (2007-11-07 11:00) [5]
> Юрий Зотов © (07.11.07 10:53) [4]
Понял! Сейчас буду пробовать! Спасибо большое Юрий Зотов, Loginov Dmitry, {RASkov} ....
← →
Slim (2007-11-07 11:39) [6]
> Если хочешь избежать моргания, то измени в инпекторе объектов
> ее тип на "нормальный", а после создания, если это необходимо,
> делай ее дочерней.
Все работает СПАСИБО! Единственное, надо было еще в исходных значениях формы отключить ее видимость, что бы она создавалась НЕВИДИМО!
← →
Юрий Зотов © (2007-11-07 11:49) [7]> Slim (07.11.07 11:39) [6]
Просто не надо было эти исходные значения трогать. По умолчанию у форм Visible=False.
← →
Slim (2007-11-07 12:25) [8]
> Просто не надо было эти исходные значения трогать. По умолчанию
> у форм Visible=False.
Буду ЗНАТЬ, спасибо!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.089 c