Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.013 c
1-4452
lovres
2002-11-20 12:05
2002.12.02
Почему не меняется курсор?


1-4503
Dmitry_mit
2002-11-20 20:01
2002.12.02
Кривая функция и var


1-4472
Gogi
2002-11-20 13:47
2002.12.02
Окна нестандартных форм


1-4458
AndrewVolkov
2002-11-19 23:15
2002.12.02
Глюк TEdita или как с этим бороться?


1-4382
ShooRoop
2002-11-22 15:31
2002.12.02
ОП





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский