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

Вниз

Изменение FormStyle в кострукторе формы   Найти похожие ветки 

 
Пит   (2010-11-16 20:19) [0]

Забавно, если в конструкторе формы сделать изменение FormStyle, например, с fsNormal на fsMDIChild (в случае, если приложение имеет MDI Main форму), то неявно будет сделано Show и соответственно вызовется OnShow событие.

При присвоении Position аналогичная штука, еще раз произойдет OnShow событие. При этом OnHide вызван не будет.

Delphi 2006 :-)


 
_Юрий   (2010-11-16 22:55) [1]

В справке (пока она была) вроде было написано: не меняйте FormStyle в runtime.


 
Юрий Зотов ©   (2010-11-16 23:33) [2]


> _Юрий   (16.11.10 22:55) [1]

Если делать с умом, то ничего страшного. Бывает полезно, например, в программах MDI, когда дочерняя форма при своем создании и загрузке делает что-то долгое.


 
Пит   (2010-11-17 11:09) [3]

у меня такая задача. Нужно уметь отображать в виде MDI для просмотра, оценки. И уметь подниматься как модальное, если подниматель ожидает возврата результата немедленного.


 
12 ©   (2010-11-17 11:25) [4]

так делаю

procedure CreateForm2(MainForm: TForm; CF: TCForm; ForSelect: boolean = false);
var
 F: TfrmChild;
 i: Integer;
begin
 F := CF.Create(MainForm);
 if ForSelect then
 begin
   F.IsForSelect := ForSelect;
   F.ShowModal;
 end;
end;

type
 TCForm = class of TfrmChild;

type
 TfrmChild = class(TForm)
   property IsForSelect: Boolean read GetForSelect write SetForSelect;

function TfrmChild.GetForSelect: Boolean;
begin
 Result := ForSelect;
end;

procedure TfrmChild.SetForSelect(const Value: Boolean);
begin
 ForSelect := Value;
 if Value then
 begin
   btnSelect.Show;//Visible := True;
   FormStyle := fsStayOnTop;
 end else
 begin
   btnSelect.Hide;//Visible := False;
   FormStyle := fsMDIChild;
 end;
end;

и все формы от TfrmChild
type
 TfrmSubject = class(TfrmChild)
или
type
 TfrmTest = class(TfrmChild)

потом любую форму из любой создать для выбора
CreateForm2(MainForm, TfrmTest, "  From TfrmTest for select", true);


 
12 ©   (2010-11-17 11:28) [5]


> CreateForm2(MainForm, TfrmTest, "  From TfrmTest for select",
>  true);

естественно, тут только смысл


 
_Юрий   (2010-11-17 18:57) [6]


> Юрий Зотов ©   (16.11.10 23:33) [2]
>
>
> > _Юрий   (16.11.10 22:55) [1]
>
> Если делать с умом, то ничего страшного. Бывает полезно,
>  например, в программах MDI, когда дочерняя форма при своем
> создании и загрузке делает что-то долгое.


Это дурной дизайн. Форма должна только показывать (вспомним MVC), долгие тяжелые процедуры должен выполнять другой код, и создавать форму уже только для показа результатов.


 
tesseract ©   (2010-11-18 10:53) [7]


> долгие тяжелые процедуры должен выполнять другой код, и
> создавать форму уже только для показа результатов.


Новичкам работать с пулом потоков проблематично бывает.


 
sniknik ©   (2010-11-18 15:48) [8]

не нужно пул... делаю просто (имхо самое простое) в оншоу посылаю сам себе (той же форме), сообщение и делаю все в нем.
в оншоу ввод дизейблится, раздизейбливается в том событии. понятно, что форма в процессе работы не двигается/неактивна, но хотя бы показывается, и "висят часики", и видно что кнопки/едиты задизейлены, что гораздо лучше чем отсутствие формы вообще или "полуфабрикат" с частичной отрисовкой.
и только если обработка действительно длительная (5 ... х сек), вот тогда потоки, чтобы у юзера была возможность по перемещать форму, убедится что не программа не висит.


 
_Юрий   (2010-11-18 20:08) [9]


> sniknik ©   (18.11.10 15:48) [8]



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


А это ведь и есть полуфабрикат - частичная отрисовка. Если там например грид, то он пуст.
Я лично увидев такую ситуацию, подумал бы что все зависло. На мой взгляд, лучше вывешивать сплеш "подождите, идет загрузка...", а форму показывать уже по окончании процесса, сразу готовую. Если конечно не поддерживается частичный вывод данных по типу как в браузере.
Причем этот тяжелый код можно даже разместить в теле формы, если не хочется заморачиваться с разнесением на MVC - в конструкторе перед inherited.


 
Игорь Шевченко ©   (2010-11-18 20:28) [10]

sniknik ©   (18.11.10 15:48) [8]
_Юрий   (18.11.10 20:08) [9]

Сплеш на самой форме. Вместо грида, например. Рулез. Делал, понравилось.


 
sniknik ©   (2010-11-19 11:53) [11]

> А это ведь и есть полуфабрикат - частичная отрисовка.
нет, т.к. все компоненты завершены, а при частичной (если процессмесейдж вставлять не к месту) бывает либо "белая форма", либо на ней кусками части компонент, например рамочки от части эдитов.... кто видел то поймет о чем я.
то про что ты, это не частичная отрисовка, а частичное заполнение данными (вернее отсутствие таковой вообще, т.к. данных, если они получаются в процессе расчета еще нет)

> Если там например грид, то он пуст.
с гридом у меня такого не бывает, т.к. есть в ADO есть асинхронные методы получения контента, а собственно запросы никогда не работают долго.

> Сплеш на самой форме.
не было нужды. в одном предлагали как удовлетворительное решение, переделывал программку, как раз с запросом(таблицей), на начальное получение данных в 5 мин...
сделал асинхронно (первая порция отображется моментально, у формы сразу законченный вид, и делать что-то тоже можно сразу), + оптимизировал запрос, получилось до ~30-40 сек вместо 5 мин, + вставил прогресс бар на получение данных, т.е. видно когда можно и с таблицей работать, пока нельзя часть кнопок блокировано. (убедить сделать по другому кроме как закачкой всего не удалось, а то бы и этого не понадобилось бы).
понравилось еще больше.


 
Юрий Зотов ©   (2010-11-19 15:28) [12]


> _Юрий   (17.11.10 18:57) [6]
> Это дурной дизайн. Форма должна только показывать (вспомним
> MVC), долгие тяжелые процедуры должен выполнять другой код,
>  и создавать форму уже только для показа результатов.

Всякое категоричное утверждение заведомо ошибочно в силу своей категоричности.
:o)


 
_Юрий   (2010-11-19 16:11) [13]


> Юрий Зотов ©   (19.11.10 15:28) [12]
>
>


>
> Всякое категоричное утверждение заведомо ошибочно в силу
> своей категоричности.


Ну да, и это в том числе)



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

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

Наверх




Память: 0.5 MB
Время: 0.009 c
2-1291846934
vlad
2010-12-09 01:22
2011.02.27
инсталлятор


15-1289987238
Scott Storch
2010-11-17 12:47
2011.02.27
Жесткий баг XE


2-1291389620
Василий Иванович
2010-12-03 18:20
2011.02.27
Поиск ключа в реестре.


2-1291370369
Catsys
2010-12-03 12:59
2011.02.27
Отсутствует вкладка interWeb


2-1291296114
privet123
2010-12-02 16:21
2011.02.27
Способ прочитать с диска - правильно так?