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

Тема в разделе "Delphi - Компоненты", создана пользователем iogun, 1 мар 2007.

Статус темы:
Закрыта.
  1. iogun

    iogun Гость

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

    Barmutik Гость

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

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

    iogun Гость

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

    Barmutik Гость

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

    zubr Гость

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

    iogun Гость

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

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

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

    h-falcon Гость

    Код (Text):
    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;

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

Поделиться этой страницей