Взаимодействие компонентов разных форм

  • Автор темы iogun
  • Дата начала
Статус
Закрыто для дальнейших ответов.
I

iogun

Имеется форма с текстовым элементом допустим cxEdit1 в который необходимо ввести адрес места жительства. Адрес вводится в отдельной форме (содержащей текст. поля - район, город ...), эта создается динамически и уничтожается после закрытия, но пере уничтожением она должна передать строку сформированного адреса в элемент упр. той формы с которой она была вызвана. Я решил добавить в форму выбора адреса св-ва которые будут содержать хэндл вызвавшего окна и эл. управления куда нужно записать строку, и переопределить конструктор формы для инициализации этих св-в, перед уничтожением форма д. отправлять сообщение эл. управления для изменения его свойства (скажем Value или текст). Подскажите как мне зная хэндл окна и эл. управления отправить это сообщение.
 
B

Barmutik

Мммм.. всё можно сделать проще ...

Просто перед учнитожением формы обратитесь к её контролам и получите из них требуемую Вам информацию... не стоит городить огород с хендлами в этой простой ситуации...
 
I

iogun

но форма выбора адреса может вызываться из различных форма к.е. могут быть разных классов или вообще быть в др. dll. Например алресная форма м. вызваться из формы класса TForm5 или TForm7 и экземпляров таких форм может быть открыто несколько, т.е адр форма должна знать из какой формы она была вызвана и в какую ей записать значения. Как мне получить доступ к элементам управления формы (точнее к их свойствам) зная их хэндлы из другой формы
 
B

Barmutik

А зачем ей знать .. пускай у неё будет метод который её вызывает и по окончании этого метода вовзращается нужнео Вам знаечние .. а уже вызывающая сторона в кждом конкретном случае будет знать что ей делать с этим значением ..
 
Z

zubr

Можно эту форму вызывать модально, переопределив метод ShowModal:
function ShowModal(var1:...; var2:...;...) : Integer;
Через глобальные переменные формы, которые инициализируются в обработчике кнопки Ok, внутри метода ShowModal передавать данные в переменные var1:...; var2:...;...
 
I

iogun

Я сделал немного по другому.
Создал новый конструктор, с доп. параметром - ссылка на элемент с др. формы в который нужно вернуть значение
CreateWithParam(aOwner:TComponent; elem: TObject)
далее перед закрытием вызванной формы проверятся не закрыли ли вызвавшую форму, и если нет то

...
if (elem is ТКлассЭлемента) then
TКлассЭлемента(elem).СвойствоЭлемента:=Значение;
...

может быть не самый лучший вариант, но зато будет работать и для MDI и для Single форм.
 
H

h-falcon

Код:
type
TFormOfAddress = class(TForm)
private
...
public
Addr:  String;
...
end;

...

function ShowAddressForm(AOwner: TComponent; var AAddr: String): TModalResult;

var
FormOfAddress: TFormOfAddress;

implementation

function ShowAddressForm(AOwner: TComponent; var AAddr: String): TModalResult;
begin
Result:=mrCancel;
FormOfAddress:=TFormOfAddress.Create(AOwner);
with FormOfAddress do begin
Addr:=AAddr;
Result:=ShowModal;
AAddr:=Addr'
end;
FreeAndNil(FormOfAddress);
end;

...

Для вызова используется
Код:
 if ShowAddressForm(Self, St)=mrOK then
//St - содержит введённый адрес
else
//надо как-то отреагировать на то, что User отказался вводить или какой-то 
//Exception ещё не обработан...
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!