Форум: "Начинающим";
Текущий архив: 2008.11.16;
Скачать: [xml.tar.bz2];
ВнизНе закрывается форма Найти похожие ветки
← →
ANB (2008-10-06 13:44) [0]В OnShow главной формы модально показываю диалог ввода параметров подключения к БД. Потом коннекчусь, диалог закрывается, показывается главная форма.
Все вроде бы нормально, вот только если коннект идет долго, и при этом пощелкать по другим окна (почитать форум, например :)), то после поднятия главной формы, диалог все равно остается. Причем как то странно остается - его ничем не закрыть.
Если запускать приложение из под делфи, то такого эффекта нету. Что ни делай.
Как бы побороть эту проблему ?
← →
Поросенок Винни-Пух © (2008-10-06 13:56) [1]в онкреате главной послать сообщение ей же самой.
в обработчике открыть диалог.
если кансел, то закрыть главную. если нет, то инициализировать все что с бд связано
← →
ASoft (2008-10-06 13:56) [2]
> ANB (06.10.08 13:44)
Если модальный диалог свой, то, имхо, лучше:
Создать форму
try
показать форму
...
finally
закрыть/убить форму
end;
← →
Сергей М. © (2008-10-06 14:00) [3]Как бы там ни было, обработчик OnShow, мягко говоря, - не лучшее место для реализации подобного рода логики.
← →
ANB (2008-10-06 14:03) [4]
> ASoft (06.10.08 13:56) [2]
Приложение - простенькое, там всего 2 формы.
Лениво было создавать модальную форму динамически. Сейчас попробую - по идее Фри должно помочь.
← →
ANB (2008-10-06 14:09) [5]
> обработчик OnShow
Да нормальное место. Всегда так делал.
А с модальными формами в делфи регулярно бывают проблемы. Даже ShowMessage иногда клинит.
← →
{RASkov} © (2008-10-06 14:22) [6]> [4] ANB (06.10.08 14:03)
> Лениво было создавать модальную форму динамически.
Скажи что это так ты шутишь) Или ты программы одной только мышкой пишешь?
:)
← →
ANB (2008-10-06 14:25) [7]
> Скажи что это так ты шутишь) Или ты программы одной только
> мышкой пишешь?
> :)
Смотря какие.
Если мне за час надо накидать утилитку, которая нужна только мне, то зачем заморачиваться с динамическим созданием форм ?
Хуже, если кому нибудь утилита понравится и она идет в серию. Приходится причесывать :)
Фрии помог.
← →
{RASkov} © (2008-10-06 14:33) [8]Как все запущено :(:)
← →
ANB (2008-10-06 14:56) [9]
> {RASkov} © (06.10.08 14:33) [8]
> Как все запущено :(:)
Почему ?
← →
Сергей М. © (2008-10-06 14:58) [10]
> Всегда так делал
Ну и плохо.
← →
ANB (2008-10-06 15:13) [11]
> Ну и плохо.
Чем ?
← →
Palladin © (2008-10-06 15:16) [12]OnActivate - куда лучше подходит для этого
← →
ANB (2008-10-06 15:42) [13]
> Palladin © (06.10.08 15:16) [12]
> OnActivate - куда лучше подходит для этого
Не, мне не надо, чтобы главная форма при этом сзади торчала.
← →
Palladin © (2008-10-06 15:47) [14]угадай, что раньше вызывается OnShow или OnActivate ?
а лучше не гадать, а посмотреть в справке порядок возбуждения событий у формы
← →
ANB (2008-10-06 16:04) [15]
> угадай, что раньше вызывается OnShow или OnActivate ?
И так видно - OnShow - до рисования формы, OnActivate - после рисования формы.
← →
Palladin © (2008-10-06 16:06) [16]
> мне не надо
извиняюсь, не пропустил )
тогда OnCreate?
← →
ANB (2008-10-06 16:20) [17]
> тогда OnCreate?
На OnCreate иногда грабли возникают. Особенно, если пользовать FormStorage от RX.
Да нету особых проблем. А с модальными формами в делфи вообще беда. Причем не только в моих программах. Клинит их время от времени, если приложение работает в фоновом режиме.
← →
{RASkov} © (2008-10-06 17:38) [18]> [9] ANB (06.10.08 14:56)
> Почему ?
Потому что если все делать сразу по умному, то и переделывать не придется....
Собсно "Всё запущенно" не только из-за переделывания "понравившихся утилит", а, например, "динамически создаваемая форма" отличается от НЕ динамически - одной строкой кода.... А мыж ленивые аж до не хочу)
:о)
← →
clickmaker © (2008-10-06 17:41) [19]if TLoginForm.Execute then
Application.Run;
← →
Anatoly Podgoretsky © (2008-10-06 19:18) [20]
> OnActivate - куда лучше подходит для этого
Оба плохи, поскольку оба обработчика могут вызываться несколько раз, тогда надо или вводить флаг или перенести подготовку в другое место, или он Create или после OnActivate, когда все начальные обработчики уже отработали. Ну и остается вариант мириться с возможным повторным вызовом обработчика.
← →
Palladin © (2008-10-07 07:37) [21]
> Ну и остается вариант мириться с возможным повторным вызовом
> обработчика.
а никто и не спорит. мирюсь и завожу флаг.
← →
ANB (2008-10-07 13:58) [22]
> НЕ динамически - одной строкой кода.... А мыж ленивые аж
> до не хочу)
Минимум 6.
var Form1 :
create;
try
finally
Free;
end;
:)
Если бы не глюк с незакрыванием формы, автосозданная вообще бы никак не мешала. Что в ней плохого то ?
← →
ANB (2008-10-07 14:01) [23]
> поскольку оба обработчика могут вызываться несколько раз
OnShow главной формы как второй раз то может вызваться ? Ни разу не нарывался.
OnActivate - очень даже может быть. Но смоделировать ситуацию мне не удалось.
Application.Run - не люблю без лишней надобности лезть в DPR.
← →
{RASkov} © (2008-10-07 21:03) [24]> [9] ANB (06.10.08 14:56)
>
> > {RASkov} © (06.10.08 14:33) [8]
> > Как все запущено :(:)
>
> Почему ?
Ответ:
> OnShow главной формы как второй раз то может вызваться ?
> Ни разу не нарывался.
> OnActivate - очень даже может быть. Но смоделировать ситуацию
> мне не удалось.
>
> Application.Run - не люблю без лишней надобности лезть в DPR.
:)
← →
{RASkov} © (2008-10-07 21:13) [25]> [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:14) [26]И конечно же нужно понимать, что в [25] это не единственные случаи...)
← →
{RASkov} © (2008-10-07 23:53) [27]И даже на это:
> Application.Run - не люблю без лишней надобности лезть в DPR.
у меня есть ответ. Вот: Именно нечто подобное как в [19], самое то для решения задачи затронутой в вопросе....
А без лишней надобности и программу-то писать не нужно....
:о)
← →
Германн © (2008-10-08 00:41) [28]
> {RASkov} © (07.10.08 23:53) [27]
Даже в примерах поставляемых вместе с Дельфи есть именно такой вариант и именно для подобной задачи:
%DELPHI%\Demos\Db\MastApp\mastapp.dpr
← →
ANB (2008-10-08 09:49) [29]
> {RASkov} © (07.10.08 21:13) [25]
OnActivate и не пользуюсь.
А если понадобиться переключать режим отображения главной формы - тогда и буду в DPR лезть.
:)
ЗЫ. В самой программе всего 50 строк написанных мной. Типичная кнопкокидательная програмка. Ну зачем в ней использовать все тонкости ?
← →
MsGuns © (2008-10-08 11:05) [30]>ANB (06.10.08 14:03) [4]
>Лениво было создавать модальную форму динамически.
Такое впечатление, что ты создаешь формы лопатой и вилами :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.11.16;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.006 c