Solved

An Object with Handle

Posted on 1998-06-11
14
227 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
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
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

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
There's a multitude of different network monitoring solutions out there, and you're probably wondering what makes NetCrunch so special. It's completely agentless, but does let you create an agent, if you desire. It offers powerful scalability …
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.
Suggested Courses
Course of the Month3 days, 15 hours left to enroll

630 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