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

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

Закрытие формы [D7]


Страницы:   1 2

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?


Страницы:   1 2

Наверх

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