Помощь - Поиск - Пользователи - Календарь
Полная версия: Без окон и дверей... Компонент для сообщений.
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
#$# PaVeL #$#
Привет всем, всем, всем!
А теперь по делу...
Прошу подсказать как создать компонент являющимся прямым потомком
Class (TComponent)

и имеющий одно свойство
Property Handle : HWND

При этом свойство должно автоматически создаваться и удаляться.
Цель: Сделать объект который может принимать и отправлять сообщения в программе не имеющей ни формы, ни даже консольного окна. (Без окон и дверей полна горница людей smile.gif ). Заранее большое спасибо!
dirol.gif
hardcase
А какие сообщения будет принимать этот компонент?
Дело в том, что у меня есть не компонент, а класс потока (thread), которому можно посылать сообщения и он их будет обрабатывать.
#$# PaVeL #$#

Type
TMyComponent = class(TComponent)
PHandle : HWND;
private
public
procedure OpenFile(var msg: TMessage); message WM_OPENFILE;
procedure Restore(var msg: TMessage); message WM_RESTORE;
published
Property Handle : HWND read PHandle;
end;


При этом
Цитата

и имеющий одно свойство

Property Handle : HWND


При этом свойство должно автоматически создаваться и удаляться.

при этом конструктор и деструкторы всё должно быть.
Подскажите реализацию.
А насчёт компонента, Hardcase, хотелось бы взглянуть на него.
hardcase
Вот класс потока-нитки.

Я так понял, ты создаёшь класс для рабты с файлами.
А разве для этого не подходят обычные стримы?
hiv
Цитата(#$# PaVeL #$# @ 15.01.2006 13:16) *

в программе не имеющей ни формы, ни даже консольного окна. (Без окон и дверей полна горница людей smile.gif )


Для этого существуют сервисы (службы), чтобы такой сделать на Delphi:
File -> New -> Other -> Service Application
#$# PaVeL #$#
Помоему Вы оба меня не поняли, хотя всеравно спаибо.

Суть из одной проги послать в другую сообщение. Но если нет формы то нужен
Handle : HWND

, а где его взять?
Вывод: надо написать компонент!
То есть
procedure OpenFile(var msg: TMessage); message WM_OPENFILE;
procedure Restore(var msg: TMessage); message WM_RESTORE;


Это только пример что будут сообщения.
Надеюсь теперь понятно объяснил.
hiv
Какое сообщение? Если виндовое с помощью SendMessage, то Handle : HWND должен быть того приложения, которому посылаешь сообщение.
hardcase
Зная ThreadID можно послать виндусовское сообщение потоку. Так мой класс работает.
#$# PaVeL #$#
mega_chok.gif
Цитата
Какое сообщение? Если виндовое с помощью SendMessage, то Handle : HWND должен быть того приложения, которому посылаешь сообщение.

Если у меня окна нет как я его приму? Поэтому и прошу помочь сделать компонент. Форма ведь тоже компонент!
А про потоки - это уже другая история. О ней попожже.
hardcase
Цитата(#$# PaVeL #$# @ 18.01.2006 6:43) *
mega_chok.gif

Если у меня окна нет как я его приму? Поэтому и прошу помочь сделать компонент. Форма ведь тоже компонент!
А про потоки - это уже другая история. О ней попожже.

Вот тебе сэмпл, в котором создаётся окно, способное принимать сообщения.
Без VCL. Там полно комментов, так-что разобраться - раз плюнуть.
#$# PaVeL #$#
Мне окна вообще ненужны я прошу лишь помочь правильно резервировать и связывать с компонентом HWND и всё!
P.S. Но всёравно спасибо...
Dark
ну помоему - окно все равно создаеться.
Ты регистрируешь класс окна, затем создаешь окно (точнее - ту сущьность на которую и ссылаеться HWND)
почитай DRKB - минимальное приложение без VCL

а без того чтоб его создавать - ты ведь не сможешь тогда принимать сообщения...
ИМХО - это то о чем ты спрашивал...
deema
Цитата(#$# PaVeL #$# @ 19.01.2006 7:46) *

Мне окна вообще ненужны я прошу лишь помочь правильно резервировать и связывать с компонентом HWND и всё!
P.S. Но всёравно спасибо...

Handle, насколько я понимаю, это описатель объекта. Объектом может быть и окно и поток и куча чего другого, но хэндла без объкета быть не может, это просто DWord число тогда, что с него взять-то.
Сообшения могут быть посланы только объекту (например, созданному специально окну, пусть и невидимому), поэтому создавать все равно что-то придется.

Удачи
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.