Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.09.13;
Скачать: CL | DM;

Вниз

Проверка создания формы   Найти похожие ветки 

 
lewka_s   (2014-04-24 09:15) [0]

Привет мастера. подскажите вот в каком вопросе:
Есть родительская форма и много дочерних форм, которые создаются по мере их использования (создаю так fmAdd_ls:=TfmAdd_ls.Create(Application);).
Есть форма поиска, она тоже дочерняя, которая передает результаты поиска на форму, с которой она вызвалась. Соответственно при передаче результатов поиска нужно знать с какой формы ее открыли.
Подскажите как это сделать?


 
Ega23 ©   (2014-04-24 10:55) [1]

Вариант 1.

TChildForm = class (TForm)
public
 procedure Execute(aOwnerForm: TOwnerForm);
end;

procedure TChildForm.Execute(aOwnerForm: TOwnerForm);
begin
 /////

 aOwnerForm.NotifyResults(...)  ;
end;

TOwnerForm = class (TForm)
public
 procedure Foo;
 procedure NotifyResults(....);
end;

procedure TOwnerForm.Foo;
begin
 with TChildForm.Create(Application) do
   try
      Execute(Self);
   finally
      Free;
   end;  
end;



Вариант 2.

type
 
 TOnSearchResultEvent = procedure (SearchResult: TSomeSearchResult) of object;

TChildForm = class (TForm)
private
 FOnSearchResult: TOnSearchResultEvent;
public
 property OnSearchResult: TOnSearchResultEvent read FOnSearchResult write FOnSearchResult;
 procedure Execute;
end;

procedure TChildForm.Execute;
var
 SearchResult: TSomeSearchResult;
begin
 .....

 if Assigned(FOnSearchResult) then
     FOnSearchResult(SearchResult);
end;

TOwnerForm = class (TForm)
private
 procedure OnSearchResults(SearchResult: TSomeSearchResult);
public
 procedure CreateChildForm;
end;

procedure TOwnerForm.CreateChildForm;
var
 fm: TChildForm;
begin
 fm := TChildForm.Create(...);
 fm.OnSearchResult := OnSearchResults;
 fm.Execute;

 .....
end;


Вариант 3
Через интерфейс, но писать тупо уже лень


 
lewka_s   (2014-04-24 12:04) [2]

Я то проверяю вот так

procedure TfmSp_ls.btn1Click(Sender: TObject);
begin
if Assigned(fmedit_orders) then
begin
 ---
end;
if Assigned(fmOrders) then
begin
---
end;
end;

работает вроде норм, но если в течении работы пользовались обеими формами (fmOrders и fmedit_orders), т.е открыли например fmOrders поделали в ней что-то и закрыли. и потом начали работать на fmedit_orders, то все равно попадает в условие Assigned(fmOrders)


 
junglecat   (2014-04-24 12:32) [3]

> т.е открыли например fmOrders поделали в ней что-то и закрыли

при запуске формы поиска передавай ей активную в данный момент форму.
Либо цепляй обработчик события активной формы, если делаешь по варианту 2


 
lewka_s   (2014-04-24 20:30) [4]

нашел способ попроще: в событии On Close  у форм fmOrders и fmedit_orders поставил freeandNil(имя формы). вроде работает ОК.
всем спасибо


 
Ega23 ©   (2014-04-24 20:45) [5]


> нашел способ попроще


Это костыль.


 
lewka_s   (2014-04-24 21:02) [6]


> Это костыль.

Почему?


 
turbouser ©   (2014-04-24 21:35) [7]

В одном из проектов сделал через сообщения - т.е. форма, из которой открывается общая для всех форм форма (тавтология, да :)) отправляет этой самой общей форме сообщение тот же SendMessage (собственное сообщение, передаю handle и набор специфических флагов), мол, вызвали тебя из меня. При активации отправляется то же самое сообщение.



Страницы: 1 вся ветка

Текущий архив: 2015.09.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.003 c
2-1398316535
lewka_s
2014-04-24 09:15
2015.09.13
Проверка создания формы


15-1422426177
mein
2015-01-28 09:22
2015.09.13
Немного истории - Казань брал!..


3-1305523618
Михаил
2011-05-16 09:26
2015.09.13
Группировка записей таблицы в одно поле


15-1422634959
Pavia
2015-01-30 19:22
2015.09.13
Одна пака три диска


2-1398412248
L_Karbo
2014-04-25 11:50
2015.09.13
Какой цвет у разделительных линий TStringList?