![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не закрывается форма
ANB © (2008-10-06 13:44:00)В OnShow главной формы модально показываю диалог ввода параметров подключения к БД. Потом коннекчусь, диалог закрывается, показывается главная форма.
Все вроде бы нормально, вот только если коннект идет долго, и при этом пощелкать по другим окна (почитать форум, например :)), то после поднятия главной формы, диалог все равно остается. Причем как то странно остается - его ничем не закрыть.
Если запускать приложение из под делфи, то такого эффекта нету. Что ни делай.
Как бы побороть эту проблему ?
MsGuns (2008-10-08 11:05:00) [1]>ANB (06.10.08 14:03) [4]
>Лениво было создавать модальную форму динамически.
Такое впечатление, что ты создаешь формы лопатой и вилами :)
ANB (2008-10-08 09:49:00) [2]
> {RASkov} © (07.10.08 21:13) [25]
OnActivate и не пользуюсь.
А если понадобиться переключать режим отображения главной формы - тогда и буду в DPR лезть.
:)
ЗЫ. В самой программе всего 50 строк написанных мной. Типичная кнопкокидательная програмка. Ну зачем в ней использовать все тонкости ?
Германн (2008-10-08 00:41:00) [3]
> {RASkov} © (07.10.08 23:53) [27]
Даже в примерах поставляемых вместе с Дельфи есть именно такой вариант и именно для подобной задачи:
%DELPHI%\Demos\Db\MastApp\mastapp.dpr
{RASkov} (2008-10-07 23:53:00) [4]И даже на это:
> Application.Run - не люблю без лишней надобности лезть в DPR.
у меня есть ответ. Вот: Именно нечто подобное как в [19], самое то для решения задачи затронутой в вопросе....
А без лишней надобности и программу-то писать не нужно....
:о)
{RASkov} (2008-10-07 21:14:00) [5]И конечно же нужно понимать, что в [25] это не единственные случаи...)
{RASkov} (2008-10-07 21:13:00) [6]> [23] ANB (07.10.08 14:01)
> OnShow главной формы как второй раз то может вызваться ?
> Ни разу не нарывался.
procedure TForm1.FormShow(Sender: TObject);
begin
ShowMessage('Show');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if FormStyle=fsStayOnTop then FormStyle:=fsNormal
else FormStyle:=fsStayOnTop;
end;
> OnActivate - очень даже может быть. Но смоделировать ситуацию
> мне не удалось.
procedure TForm1.FormActivate(Sender: TObject);
begin
ShowMessage('Activate');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//Специально так сделал, но суть не изменилась.....
with TForm.Create(nil) do try
Show;
finally
Free;
end;
end;
Элементарно..... и твоя ламерская отмазка :) Сорри, ...ну так вот)
{RASkov} (2008-10-07 21:03:00) [7]> [9] ANB (06.10.08 14:56)
>
> > {RASkov} © (06.10.08 14:33) [8]
> > Как все запущено :(:)
>
> Почему ?
Ответ:
> OnShow главной формы как второй раз то может вызваться ?
> Ни разу не нарывался.
> OnActivate - очень даже может быть. Но смоделировать ситуацию
> мне не удалось.
>
> Application.Run - не люблю без лишней надобности лезть в DPR.
:)
ANB (2008-10-07 14:01:00) [8]
> поскольку оба обработчика могут вызываться несколько раз
OnShow главной формы как второй раз то может вызваться ? Ни разу не нарывался.
OnActivate - очень даже может быть. Но смоделировать ситуацию мне не удалось.
Application.Run - не люблю без лишней надобности лезть в DPR.
ANB (2008-10-07 13:58:00) [9]
> НЕ динамически - одной строкой кода.... А мыж ленивые аж
> до не хочу)
Минимум 6.
var Form1 :
create;
try
finally
Free;
end;
:)
Если бы не глюк с незакрыванием формы, автосозданная вообще бы никак не мешала. Что в ней плохого то ?
Palladin (2008-10-07 07:37:00) [10]
> Ну и остается вариант мириться с возможным повторным вызовом
> обработчика.
а никто и не спорит. мирюсь и завожу флаг.
Anatoly Podgoretsky (2008-10-06 19:18:00) [11]
> OnActivate - куда лучше подходит для этого
Оба плохи, поскольку оба обработчика могут вызываться несколько раз, тогда надо или вводить флаг или перенести подготовку в другое место, или он Create или после OnActivate, когда все начальные обработчики уже отработали. Ну и остается вариант мириться с возможным повторным вызовом обработчика.
clickmaker (2008-10-06 17:41:00) [12]if TLoginForm.Execute then
Application.Run;
{RASkov} (2008-10-06 17:38:00) [13]> [9] ANB (06.10.08 14:56)
> Почему ?
Потому что если все делать сразу по умному, то и переделывать не придется....
Собсно "Всё запущенно" не только из-за переделывания "понравившихся утилит", а, например, "динамически создаваемая форма" отличается от НЕ динамически - одной строкой кода.... А мыж ленивые аж до не хочу)
:о)
ANB (2008-10-06 16:20:00) [14]
> тогда OnCreate?
На OnCreate иногда грабли возникают. Особенно, если пользовать FormStorage от RX.
Да нету особых проблем. А с модальными формами в делфи вообще беда. Причем не только в моих программах. Клинит их время от времени, если приложение работает в фоновом режиме.
Palladin (2008-10-06 16:06:00) [15]
> мне не надо
извиняюсь, непропустил )
тогда OnCreate?
ANB (2008-10-06 16:04:00) [16]
> угадай, что раньше вызывается OnShow или OnActivate ?
И так видно - OnShow - до рисования формы, OnActivate - после рисования формы.
Palladin (2008-10-06 15:47:00) [17]угадай, что раньше вызывается OnShow или OnActivate ?
а лучше не гадать, а посмотреть в справке порядок возбуждения событий у формы
ANB (2008-10-06 15:42:00) [18]
> Palladin © (06.10.08 15:16) [12]
> OnActivate - куда лучше подходит для этого
Не, мне не надо, чтобы главная форма при этом сзади торчала.
Palladin (2008-10-06 15:16:00) [19]OnActivate - куда лучше подходит для этого
ANB (2008-10-06 15:13:00) [20]
> Ну и плохо.
Чем ?