Форум: "Начинающим";
Текущий архив: 2015.09.13;
Скачать: [xml.tar.bz2];
ВнизПроверка создания формы Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.001 c