Solved

An Object with Handle

Posted on 1998-06-11
14
224 Views
Last Modified: 2013-11-23
Hi,

I need to create an object that recieves messages and perform some procedures according to this messages.
Is there a way to create an object with Handle, but not a subclass of TWinControl and not the DDE component,
meaning this object is derived directly from TObject?

Thanks,
Ronit
0
Comment
Question by:ronit051397
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 4
  • 3
  • +1
14 Comments
 
LVL 5

Expert Comment

by:inter
ID: 1352163
Hi ronit,
The thing that we should note here is that Windows only posts messages to handles associated with windows class or subclass. If you do not want to use TWinControl or else we should explicitely create a Window handle and associate its message callback with CreateWindow function. But this is virtually same as what TWinControl does. So why do you need such thing. May be we can use events rather than messages.
Regards, Igor
0
 
LVL 5

Expert Comment

by:JimBob091197
ID: 1352164
Hi

You can do the following:

constructor TMyObject.Create;
  inherited;
  FHandle := AllocateHWnd(WndProc);
end;

destructor TMyObject.Destroy;
begin
  DeallocateHWnd(FHandle);
  inherited;
end;

procedure TMyObject.WndProc(var AMsg: TMessage);
begin
  case Msg.Msg of
    WM_THIS:...;
    WM_THAT:...;
    else
      Msg.Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
  end;
end;

This is a similar approach to TTimer (in ExtCtrls.pas).  I haven't tried it for a TObject, but it *should* work...

Cheers,
JB
0
 
LVL 5

Author Comment

by:ronit051397
ID: 1352165
Actually threads and processes have handles, as far as I know they can get messages and are not windows.
The DDE protocol is based on messages and it doesn't have to be related to a certain window, I mean, you can create a non windowed process and use DDE with it.
CreateWindow has something to do with visible stuff, But I am writing a non windowed "engine" that has to get messages from the system.
What I need is to Create an object and accociate a handle to it (maybe by CreateHandle or something), then to write methods that get certain messages and perform stuff.
Is it possible this way?
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 5

Expert Comment

by:JimBob091197
ID: 1352166
Oops...  change the WndProc to:

procedure TMyObject.WndProc(var Msg: TMessage);
begin
  case Msg.Msg of
    WM_THIS:...;
    WM_THAT:...;
    else
      Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.wParam, Msg.lParam);
  end;
end;

JB
0
 
LVL 5

Author Comment

by:ronit051397
ID: 1352167
JB, I didn't see your comment, I'll check it.
0
 
LVL 5

Author Comment

by:ronit051397
ID: 1352168
Thanks JB, it's working. If you post some answer i'll grade it.
0
 
LVL 3

Expert Comment

by:Matvey
ID: 1352169
Ronit, (some more) if you want your coponents to receive messages like top windows do, then see a component that ZifNab wrote - TCDEvents. You can find it in the Delphi pages or I can send it to you...

bosism@netvision.net.il
0
 
LVL 5

Author Comment

by:ronit051397
ID: 1352170
Matvay, Please do:  ronith@cmr.co.il

Thanks,
Ronit
0
 
LVL 5

Expert Comment

by:JimBob091197
ID: 1352171
Ronit: before I post an answer I'll wait for you to check out Zif's component which Matvey mentioned.

JB
0
 
LVL 5

Expert Comment

by:inter
ID: 1352172
Hi,
Well, this is cooperation. You are all, soo nobble guys. You make EE distinctive with these actions.
(Excuse me for my excitement but it is not common to see such a discussion on the net these days)
Regards, Igor
0
 
LVL 3

Expert Comment

by:Matvey
ID: 1352173
Hi Igor!

It's been a long time...

Ronit, I sent you the component. It might not be the last ver, but still cool enough. -Enjoy

--Matvey
0
 
LVL 5

Author Comment

by:ronit051397
ID: 1352174
Thanks Matvey. I have checked the component, it's derived from TComponent and it opens and closes the CD Door (meaning Eject), nice to know that there is one.
Yes, it uses the procedures you have posted, JB.
But now we know that we can use these procedures also with objects.
JB, you can post an answer if you want to.

Thanks everyone for your coorporation
Ronit

0
 
LVL 5

Accepted Solution

by:
JimBob091197 earned 50 total points
ID: 1352175
Hi Ronit,

Here is the answer for AllocateHWnd and DeallocateHWnd.

Bye,
JB
0
 
LVL 3

Expert Comment

by:Matvey
ID: 1352176
-If you didn't notice, the component receives the "..._DeviceChange" message, so it's not only the eject method. The component actually receives all messages taht are posted to the top windows...

Cheers
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
find a node in VST 2 81
Drag & Drop... Data from one grid to another 2 47
Firemonkey allowing RTL on android 6 56
Firemonkey how to swip panel with finger tap 1 23
In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an antispam), the admini…

730 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question