Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.02;
Скачать: CL | DM;

Вниз

Как отловить сообщение?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
1-4406
Darkwolf
2002-11-22 15:55
2002.12.02
События


1-4281
Студент81
2002-11-21 09:57
2002.12.02
Помогите


6-4537
Keplin Sergey
2002-10-04 12:05
2002.12.02
Виртуальный файл для браузера...


1-4417
ssmaxx
2002-11-23 01:21
2002.12.02
Вставка изображения в ЛЮБОЕ место файла MS Word


3-4181
bigbill
2002-11-13 04:41
2002.12.02
номер записи ПОСЛЕ фильтрации