Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.02.27;
Скачать: [xml.tar.bz2];

Вниз

Изменение 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.003 c
8-1210633567
Simnet_
2008-05-13 03:06
2011.02.27
FMOD изнутри: как представлен звук в памяти?


2-1291548064
Виктор
2010-12-05 14:21
2011.02.27
об Application.MessageBox


15-1289831257
R_e_T_r_O
2010-11-15 17:27
2011.02.27
Записать из делфи в эксель


15-1289990564
alexdn_
2010-11-17 13:42
2011.02.27
Майкрософт, конференция, платформа 2011


2-1291110259
vegarulez
2010-11-30 12:44
2011.02.27
обновление exe файла





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