Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1422426177
mein
2015-01-28 09:22
2015.09.13
Немного истории - Казань брал!..


15-1422480604
Юрий
2015-01-29 00:30
2015.09.13
С днем рождения ! 29 января 2015 четверг


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


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


4-1273667044
vv_fran
2010-05-12 16:24
2015.09.13
Как вытащить иконки из exe?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский