Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не закрывается форма


Страницы:   1 2

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]


> Ну и плохо.

Чем ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо