Форум: "Прочее";
Текущий архив: 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