Форум: "Основная";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];
ВнизКак отловить сообщение? Найти похожие ветки
← →
liho26 (2002-11-20 08:51) [0]Привет всем!
Я создаю дополнительную форму по клику меню таким образом
if not Assigned(Form2) then
begin
Form2:=TForm2.Create(Application);
Form2.Show;
end;
На этой фромочке находится TMemo. Перед самым закрытием надо из него забрать текст.
Как это зделать?
← →
apay (2002-11-20 09:22) [1]
procedure Form2.OnClose(Sender: TObject; var Action: TCloseAction );
begin
SomeVar := Memo1.Lines.Text;
// а если еще охота уничтожить форму
Action := caFree;
Form2 := nil;
end;
← →
liho26 (2002-11-20 11:42) [2]Это все понятно. Мне надо автоматизировать все это хозяйство. Необходимо, чтобы после закрытия второй формы текст автоматический отображался в Memo первой формы. Чую, что надо какое-то сообщение отлавливать, но какое и где ( и как) ума не приложу. Помогайте, плиз!
← →
Song (2002-11-20 11:45) [3]Дык вставь Form1.Memo1.Lines.Assign(Memo2.Lines) в OnClose второй формы.
← →
Smithson (2002-11-20 11:45) [4]Вместо SomeVar подставь Form1.Memo1.Text
Хотя можешь и сообщения ловить, но только это надо делать через Application - одна форма не увидит команду на закрытие другой
← →
liho26 (2002-11-20 12:40) [5]Оба варианта не подходят. Ибо из первая форма использует в uses вторую. Вторая не может использовать первую, дабы избежать перекрестных ссылок. Что, в свою очередь, не есть хорошо. Следовательно первая видит вторую, а вторая не видит первую. Данные надо передать из второй формы в первую.
Smithson я уже понял, что сообщения первая форма не видит сообщения второй.
А как сообщения ловить через Application я не могу понять
Вообще, для меня отлов и посылка сообщений - белое пятно
← →
KoluChi (2002-11-20 14:03) [6]Вариант apay © (20.11.02 09:22)
SomeVar - глобальная переменная (Interface)
← →
KoluChi (2002-11-20 14:11) [7]TForm2 = class
...
ReturnStrings: TStrings;
..
end;
implementation
//------------------------------------
if not Assigned(Form2) then
begin
Form2:=TForm2.Create(Application);
Form2.ReturnStrings := Memo1.Lines;
Form2.Show;
end
//------------------------------------
procedure Form2.OnClose(Sender: TObject; var Action: TCloseAction );
begin
if Assigned(ReturnMemo) then
ReturnStrings.Text := Memo1.Lines.Text;
// а если еще охота уничтожить форму
Action := caFree;
Form2 := nil;
end;
← →
Smithson (2002-11-20 14:41) [8]Перекрестные ссылки - это ересь, возникшая от модульной структуры языка паскаль.
Описываешь модули в Implementation обоих модулей - и все работает.
Насчет application - если delphi старше 5, то есть объект ApplicationEvent - он как раз ловит сообщения application.
← →
liho26 (2002-11-21 08:05) [9]To KoluChi
Этот код делает совершенно противоположное от того, что требуется.
if not Assigned(Form2) then
begin
Form2:=TForm2.Create(Application);
Form2.ReturnStrings := Memo1.Lines;
Form2.Show;
end
Надо наоборот из второй (созданной формы) забрать данные перед ее уничтожением!
Вообще, после вчерашнего сражения с Делфи я уже далеко за полночь нашел таки решение данной проблемы.
Если есть потомок, значит есть главная форма. Ок, будем ловить сообщения от потомка в главной форме. Для этого перед закрытием дочерней формы посылаем в главную пользовательское сообщение.
PostMessage(Application.MainForm.Handle,SX_MESSAGE,0,0);
Где SX_MESSAGE это пользовательское сообщение, которое я определил как
const const SX_MESSAGE = WM_USER+100;
теперь в главной форме достаточно отловить это сообщение и выполнить необходимый код. Вот, собственно и все.
Спасибо всем за помощь. Тема закрыта
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c