![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Закрытие формы [D7]
Atanas © (2007-03-02 08:17:00)У меня возникла следующая ситуация: Из главной формы A открываю форму B. В событии OnShow формы B в зависимости от условий пытаюсь закрыть форму B. Но форма не закрывается.
Закрываю методами:
B.Close;
B.ModalResult:=mrOk, mrCancel и т.д.
Также пытаюсь закрыть форму B из обработчиков OnCreate, OnActivate не срабатывает. Может кто подсказать, ПОЧЕМУ?
Если рассказать вопрос в двух словах, "Как в обработчике открытия формы заставить ее не открываться"
SlymRO (2007-03-02 09:44:00) [21]Atanas (02.03.07 9:42) [17]
form2 из авто создания убери
Atanas (2007-03-02 09:42:00) [22]SlymRO
Последний код не работает, форма 2 все-таки остается открытой
Atanas (2007-03-02 09:37:00) [23]SlymRO
Спасибо большое, помог :-)
...
Но про глизму, имхо лишнее
ЮЮ (2007-03-02 09:35:00) [24]Чтобы не моргало, не нужно Show.
procedure TForm1.Button1Click(Sender: TObject);
begin
form2 := TForm2.Create(Application);
// в TForm2.OnCreate выполнить необходимые действия и вастать флаг "показать/не показать"
// в данном случае это Public св-во ToShow
if Form2.ToShow then
Form2.Show
else begin
Form2.Free;
Application.MessageBox('Не могу показать', 'Вместо Form2', 0);
end;
end;
type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
FToShow: boolean;
public
{ Public declarations }
property ToShow: boolean read FToShow;
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
FToShow := (Random(2) = 0);
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
Release;
end;
SlymRO (2007-03-02 09:11:00) [25]Удалено модератором
Atanas (2007-03-02 09:05:00) [26]А... понятно, потом создам :-)
Еще сработал вот такой вариант, но тоже моргает
procedure TForm2.FormPaint(Sender: TObject);
begin
SendMessage(Form2.Handle ,WM_CLOSE,0,0);
end;
Elen (2007-03-02 09:04:00) [27]
> SlymRO © (02.03.07 09:01) [9]
Эх медленно печатаю ;)
SlymRO (2007-03-02 09:04:00) [28]Тебе форму только показать (модально) или чтоб висела и болталась?
если модально:
procedure TForm1.Button1Click(Sender: TObject);
var form2:Tform2;
begin
form2:=Tform2.Create(nil);
try
form2.showmodal;
finally
form2.free;
end;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
Modalresult:=mrOK;
end;
Elen (2007-03-02 09:03:00) [29]
> При первом нажатии все проходит нормально, при втором и
> последующем Access Violation
Правильно тебе же " нужно ее закрыть и освободить все ресурсы.", что release и делает. Потом ты ее вызвать не сможеш.
SlymRO (2007-03-02 09:01:00) [30]Atanas (02.03.07 8:56) [8]
Access Violation
Ясень пень... ведь : Atanas (02.03.07 8:52) [7]освободить все ресурсы
после Release; form2.show; не какит т.к. form2 уже нет! ее убило Release;...
Atanas (2007-03-02 08:56:00) [31]To: SlymRO
Сделал как вы сказали:
По кнопке
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.show;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
Release;
end;
При первом нажатии все проходит нормально, при втором и последующем Access Violation
Atanas (2007-03-02 08:52:00) [32]To: Elen
Скрыть то я ее скрою, но мне нужно ее закрыть и освободить все ресурсы.
Atanas (2007-03-02 08:49:00) [33]To: SlymRO
Дело в том, что у меня открываются таблицы и т.д. в самой форме, в зависимости от удачности произведенных операций я и хочу сообщить юзверю и закрыть форму. Переносить весь этот код в главную форму не очень приемлимо.
Elen (2007-03-02 08:42:00) [34]
> Atanas (02.03.07 08:17)
Вместо B.CloseпопробуйB.Hide
SlymRO (2007-03-02 08:31:00) [35]Чета миня зациклило... извиняюсь
SlymRO (2007-03-02 08:31:00) [36]
procedure TForm1.FormCreate(Sender: TObject);
begin
Release;
end;
Но всеравно "Мигнет"... Не проще сначала проверить условия а уж потом открывать B?
SlymRO (2007-03-02 08:31:00) [37]
procedure TForm1.FormCreate(Sender: TObject);
begin
Release;
end;
Но всеравно "Мигнет"... Не проще сначала проверить условия а уж потом открывать B?
SlymRO (2007-03-02 08:30:00) [38]
procedure TForm1.FormCreate(Sender: TObject);
begin
Release;
end;
Но всеравно "Мигнет"... Не проще сначала проверить условия а уж потом открывать B?