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

Вниз

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

 
Zilog ©   (2004-12-17 15:41) [40]

>>Digitman ©   (17.12.04 15:25) [39]
>>И у кого после этого "маразм", спрашивается ?

У тебя например.
Отсутствие достаточных знаний - не признак маразма.
А вот необьяснимое желание научить всех жить, указать каждому пальцем направление - как минимум повод задуматься.

Я конечно понимаю, что ты себя очень любишь, но не надо при каждом случае это показывать.


 
Alexander Panov ©   (2004-12-17 15:50) [41]

Zilog ©   (17.12.04 15:41) [40]
Почитай вопрос в топике:

Как из своего класса обрабатывать сообщения некого  окна?
есть у меня класс, возникла нужда обработать некоторые сообщения адресованные форме


Если бы ты сформулировал вопрос как следует, то тебе ответили в первом же постинге.

Ты определись, у тебя формы или окна, тогда и задавай вопрос, а не вводи всех остальных в заблуждение.

Окна - это окно Windows, а форма - это объект класса TForm.


 
Zilog ©   (2004-12-17 15:53) [42]

>>Alexander Panov ©   (17.12.04 15:50) [41]

не возражаю, не всегда получается внятно сказать что хочется... будем стараться.


 
Digitman ©   (2004-12-17 15:55) [43]


> Zilog ©   (17.12.04 15:41) [40]


> понимаю, что ты себя очень любишь


не более чем ты себя.

а если ты до сих пор не понял, то изволь понять : я преследую цель показать тебе направление к поиску инф-ции... той которая тебе нужна в решении задачи .. а намек - не самое худшее средство в этом ..

и если тебе дан намек, что

- каждый процесс может иметь более чем один трэд
- каждый трэд волен иметь свою индивидуальную очередь сообщений, в т.ч. сообщений окнам. им созданным
- обарботчик события Application.OnMessage имеет отношение только к сообщениям, адресованным окнам. созданным осн.трэдом процесса

значит, вопрос твой (в твоих же интересах) д.б. быть скорректирован для уточнения деталей, напрямую связанных с этими фактами

если тебе эти детали незнакомы, значит вопрос д.б. "откачен" до

- что такое процесс и трэд ?
- какова взаимосвязь процессов, трэдов, окон, очередей сообщений ?

продолжить ?


 
Alexander Panov ©   (2004-12-17 16:06) [44]

Zilog ©   (17.12.04 15:53) [42]

А ты сейчас попробуй переформулировать вопрос.
Т.е. чтобы было понятно, что ты хочешь сделать.

Просто есть подозрение, что тебе нужно немного не то, что ты сформулировал в топике...


 
Zilog ©   (2004-12-17 16:15) [45]

>>Digitman ©   (17.12.04 15:55) [43]

ну если и далее это будет выражено в миролюбивом и не напрягающем тоне, то с большим удовольствием...

>>если тебе эти детали незнакомы,
знакомы, какие-то хорошо, какие-то в общих чертах.

>>Application.OnMessage имеет отношение только к сообщениям, адресованным окнам. созданным осн.трэдом процесса

как раз то что мне нужно... (в компоненте же я могу его использовать?)

>>Alexander Panov ©   (17.12.04 16:06) [44]
хочу написать невизуальный компонент, который бы превращал форму? окно? в подобие панели MOffice. В ходе разработки мне понадобилось обработать некоторые сообещния, которые адресуются окну.


 
Digitman ©   (2004-12-17 16:31) [46]


> как раз то что мне нужно... (в компоненте же я могу его
> использовать?)


не вижу явно обозначенной необходимости...

осн.трэд процесса, использующего VCL (и, как правило, объект TApplication), по дифолту стартует цикл ожидания/выборки/обработки/дисп-ции вин-сообщениий еще в самом dpr - в строчке Application.Run .. если ты не удалил и никак не "изуродовал" эту строчку, никаких забот по этому поводу у тебя быть не должно - любая  ок. ф-ция окна, созданного при вызове (в осн.трэде) любого из методов любых твоих классов, буддет автоматически вызвана.

если же окно было создано тобой в лоп.трэде, то ты сам ответственен за организацию такого цикла.


 
Alexander Panov ©   (2004-12-17 16:38) [47]

Zilog ©   (17.12.04 16:15) [45]

Рискну предложить разобрать для примера такой код:

unit Unit1;

interface

uses
 Windows, Messages, Controls, Forms, StdCtrls, Classes;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

 TMsWndProc=class
 private
   FControl: TWinControl;
   FOldWinProc: TWndMethod;
 public
   constructor Create(Control: TWinControl);
   destructor Destroy; override;
   procedure WinProc(var Message: TMessage);
 end;

var
 Form1: TForm1;
 ms: TMsWndProc;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 SendMessage(Form1.Handle,WM_USER,0,0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Ms := TMsWndProc.Create(Form1);
end;

constructor TMsWndProc.Create(Control: TWinControl);
begin
 inherited Create;
 FControl := Control;
 FOldWinProc := FControl.WindowProc;
 FCOntrol.WindowProc := WinProc;
end;

destructor TMsWndProc.Destroy;
begin
 FControl.WindowProc := FOldWinProc;
 inherited;
end;

procedure TMsWndProc.WinProc(var Message: TMessage);
begin
 if Message.Msg = WM_USER
   then MessageBox(0, "!","Warning",MB_OK)
   else FOldWinProc(Message);
end;

end.


 
Zilog ©   (2004-12-17 17:11) [48]

ну, тут создается экземпляр класса TWinControl,
а уменя TComponent, у которого своей процедуры окна нету, био нет самого окна


 
Alexander Panov ©   (2004-12-17 17:13) [49]

Zilog ©   (17.12.04 17:11) [48]
TComponent, у которого своей процедуры окна нету, био нет самого окна


Так очередь сообщений может быть либо у окна, либо у потока.


 
Суслик ©   (2004-12-17 17:20) [50]

А у окна разве бывает очередь сообщений?
Я думал, что у потока она есть.


 
Zilog ©   (2004-12-17 17:34) [51]

>> Alexander Panov ©   (17.12.04 17:13) [49]
>>Так очередь сообщений может быть либо у окна, либо у потока.

а нафига мне очередь? мне сами сообщения нужны были.


 
Digitman ©   (2004-12-17 17:36) [52]


> уменя TComponent, у которого своей процедуры окна нету,
> био нет самого окна


методам класса TComponrnt никто и ничто не запрещает создавать окна и реализовывать соответствующие оконные ф-ции

что наглядно и продемонстрировано в ближайших же наследниках этого класса.


 
Zilog ©   (2004-12-17 17:40) [53]

>>Digitman ©   (17.12.04 17:36) [52]

да, но у меня нужды создавать свои окна нет.
компонет просто превращает форму, на которую его плюхнули в подобие панели MSOffice


 
Verg ©   (2004-12-17 17:47) [54]


> Zilog ©   (17.12.04 17:11) [48]
> ну, тут создается экземпляр класса TWinControl,


Где? Место, строчку покажи где.


 
Суслик ©   (2004-12-17 17:48) [55]

Господа, не игнорируйте, пжлст, мой вопрос [50] про очередь сообщений окна.


 
Zilog ©   (2004-12-17 17:59) [56]

>>Verg ©   (17.12.04 17:47) [54]

я имел ввиду предок у него TWinControl,

>>Суслик ©   (17.12.04 17:20) [50]
эээ... подозреваю что оконная процедура совсем не очередь, она всего лишь обрабатывает :)


 
Суслик ©   (2004-12-17 18:04) [57]


> эээ... подозреваю что оконная процедура совсем не очередь,
> она всего лишь обрабатывает :)

я тоже всегда так думал, но кто-то тут сказал обратное.
Может я что-то пропустил? Потому и спрашиваю.


 
Digitman ©   (2004-12-17 18:10) [58]


> Суслик ©   (17.12.04 17:48) [55]


в [50] ты прав на все 100


 
Суслик ©   (2004-12-17 18:12) [59]


>  [58] Digitman ©   (17.12.04 18:10)

Вот спасибо, а то я подумал, что МСДН паленая у меня :)))


 
Verg ©   (2004-12-17 18:18) [60]


> Zilog ©   (17.12.04 17:59) [56]
> >>Verg ©   (17.12.04 17:47) [54]
>
> я имел ввиду предок у него TWinControl,


У кого?


 
Digitman ©   (2004-12-17 18:20) [61]


> Zilog ©   (17.12.04 17:59) [56]


еще раз : каждый трэд волен иметь свою индивидуальную очередь сообщений, в которую система будет ставить сообщения, адресованные как непосредственно этому трэду, так и окнам, возможно им созданным.

ЧТО здесь непонятно ?


 
Игорь Шевченко ©   (2004-12-17 18:27) [62]

Тейксера с Пачеко такой компонент уже разработали. Если не хочется наступать на грабли и винить в граблях отвечающих, то рекомендую найти их книжку - Delphi 5, руководство разработчика. Хотя бы на сайте www.podgoretsky.com


 
Zilog ©   (2004-12-17 18:51) [63]

>>Digitman ©   (17.12.04 18:20) [61]

волен иметь - это значит не факт что имеет?
к тому же, повоторяю, мне не нужны собственные сообщения.

>>Игорь Шевченко ©   (17.12.04 18:27) [62]
он у меня распечатан, и я периодически в него заглядываю. И хочу сделать сам, а не просто передрать. Иначе хрен чему научишься..


 
Суслик ©   (2004-12-17 18:58) [64]


>  И хочу сделать сам, а не просто передрать. Иначе хрен чему
> научишься..


Ах я бедный, у Фихтенгольца передирал. Нет бы сам теоремы доказывать научился. Блин, несчастный я...

:)))

Ты сообще, автор, чего хочешь. Все ты читал, все знаешь, все приемы тебе известны а что хочешь не ясно.

:(


 
Alexander Panov ©   (2004-12-17 19:01) [65]

>Суслик ©

Спасибо за поправку насчет "очереди сообщений у окна".
Конечно же, у процесса либо потока.


 
Zilog ©   (2004-12-17 19:16) [66]

Суслик ©   (17.12.04 18:58) [64]
да ничего уже не хочу, я уже давно [38] нашел то что искал.

>>Все ты читал, все знаешь, все приемы тебе известны а что хочешь не ясно.

и без этого, пожалуйста, слова эти не мои, и припысывать мне их не надо.


 
Leonid Troyanovsky ©   (2004-12-17 22:46) [67]

> Суслик ©   (17.12.04 17:48) [55]
> Господа, не игнорируйте, пжлст, мой вопрос [50] про очередь
> сообщений окна.


Очередей сообщений у потока не одна, а целых несколько:
синхронных (sended-message queue),
асинхронных(posted-message queue),
ответных (reply-message queue),
виртуальной очереди ввода (virtualized input queue).

Подробности у Рихтера. Ну, и в msdn можно найти.

--
С уважением, LVT.


 
GuAV ©   (2004-12-17 23:34) [68]

Alexander Panov ©   (17.12.04 19:01) [65]
Конечно же, у процесса либо потока.


А есть ли она у процесса ? В прочем, не важно ;-)


 
Piter ©   (2004-12-18 00:25) [69]

Суслик ©   (17.12.04 17:20) [50]
А у окна разве бывает очередь сообщений?


нет, DispatchMessage вызывает оконную функцию сразу

Digitman ©   (17.12.04 18:10) [58]
в [50] ты прав на все 100


а Суслик молодец, он уже в [50] прав на все 100 :)
А в [100] он будет прав на все 200 :)

Суслик ©   (17.12.04 18:12) [59]
Вот спасибо, а то я подумал, что МСДН паленая у меня :)))


ага, у тебя перевод от Гоблина?

Leonid Troyanovsky ©   (17.12.04 22:46) [67]

говорили про очередь окна, а не потока :)

GuAV ©   (17.12.04 23:34) [68]
А есть ли она у процесса ?


нету. Имхо.


 
Игорь Шевченко ©   (2004-12-18 01:17) [70]

Zilog ©   (17.12.04 18:51) [63]


> он у меня распечатан, и я периодически в него заглядываю.
> И хочу сделать сам, а не просто передрать. Иначе хрен чему
> научишься


Я наверное чего-то не понимаю. У тебя есть готовый текст, с комментариями и толкованием, а ты зачем-то на форуме народ изводишь, да еще и наезжаешь. А книжку почитать не пробовал, раз она распечатана ? Так попробуй, это не больно, а иногда даже приятно.


 
Alexander Panov ©   (2004-12-18 01:37) [71]

>GuAV ©   (17.12.04 23:34) [68]

Уг, согласен на все 100-) вот так иногда поторопишься и сядешь в лужу;)


 
KSergey ©   (2004-12-18 11:01) [72]

И все же мне было бы очень прелюбопытно устышать ответ автора на давно заданный вопрос:

> [60] Verg ©   (17.12.04 18:18)
> > Zilog ©   (17.12.04 17:59) [56]
> > я имел ввиду предок у него TWinControl,
>
> У кого?

А так - по-моему [47] Alexander Panov ©   (17.12.04 16:38) идейно как раз то, что надо подсказал.. Правда, проигнорированно, почему-то, было автором (как мне померещилось)...


 
Leonid Troyanovsky ©   (2004-12-18 12:58) [73]


> Leonid Troyanovsky ©   (17.12.04 22:46) [67]
> говорили про очередь окна, а не потока :)


Говорили:

> Господа, не игнорируйте, пжлст, мой вопрос [50] про очередь
> сообщений окна.
..
> А у окна разве бывает очередь сообщений?
> Я думал, что у потока она есть.


Я решил не игнорировать не только вопрос, но и утверждение.
Бо, с вопросом к тому времени уже разобрались.

--
С уважением, LVT.



Страницы: 1 2 вся ветка

Текущий архив: 2005.01.02;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.029 c
14-1102766463
DillerXX
2004-12-11 15:01
2005.01.02
Хочу спросить ваше мнение что покупать


1-1103275006
Dima
2004-12-17 12:16
2005.01.02
MetaFile


1-1103195808
JIurafsfd
2004-12-16 14:16
2005.01.02
Как программно удалить графики в Tchart?


14-1102051162
OneFragLeft
2004-12-03 08:19
2005.01.02
Apache


1-1103196549
Dnech
2004-12-16 14:29
2005.01.02
КАК самому Отрисовать бордюр PopUpMenu?