Solved

How I make a component wiht their own events?

Posted on 2000-02-23
6
190 Views
Last Modified: 2010-04-04
I have to make a component that draws
lines, circles and polygons (like the line of Visual Basic). But I don`t know how to make the events for this component. What can I do?
0
Comment
Question by:mariotwsh
6 Comments
 
LVL 8

Expert Comment

by:ZifNab
ID: 2549585
what about looking to the TShape component of the extctrls unit?
0
 

Expert Comment

by:octavioh
ID: 2549704
My recommendations:
a) Take a look at the chapters on component development in the Developer's Guide.
b) Take a look at the source code of the TShape component provided with Delphi.
c) Take a look at the example included with Delphi under
  Program Files\Delphi5\Demos\Propedit.

ThePIELIB package described there shows how to create a simple component that draws pies. This component implements several properties and an OnChange event. Furthermore, this sample shows how to build specialized property editors.

IMHO, any developer designing Delphi components should read "Developing Delphi components" by Ray Konopka. It was written for Delphi 3, but almost nothing has changed regarding component development since then.

Regards,

OH
0
 
LVL 1

Accepted Solution

by:
AttarSoftware earned 50 total points
ID: 2550063
Set up a type, eg:

type
  tMyEvent = procedure( s : string ) of object ;

and then in the private section of your component, add :

    fMyEvent : tMyEvent ;

and then in the public or protected areas, add :

    property OnSomething : tMyEvent read fMyEvent write fMyEvent ;

and then where you want the event to be fired (in some procedure in your code), add :

  if( assigned( fMyEvent ) ) then
    fMyEvent( 'Hello World' ) ;

That will set up an event, that when triggered will send the 'Hello World' string...

  Hope this points you in the right direction,

  Good luck,

  Tim.
0
Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

 

Expert Comment

by:octavioh
ID: 2550327
Regarding Tim' answer:

The suggested approach is on the right direction, but using the type tMyEvent as he proposes will not allow the programmer using your components to distinguish which concrete component generated the event. For instance, if an user of your component places two 'shapes' on a form, he may want to share a common event handler (so it's fired by both components), but detecting inside that method which one of the two components actually 'launched' it.

All the VCL events use a first parameter 'Sender: TObject' in event types, and Delphi automatically pushes onto the stack the address of the component that fired the event. The programmer that uses your class can then use the Sender parameter to communicate with the concrete component for which the event was fired.

The simplest event type is called TNotifyEvent, and is already defined by Delphi:

type
  TNotifyEvent = procedure(Sender: TObject) of object;

Other, more complex event handler patterns are also defined for keyboard events, mouse events, etc.

Again, consult the manual and check out the VCL source code (the biggest source of information, actually).

Regards,

OH

0
 
LVL 1

Expert Comment

by:AttarSoftware
ID: 2553974
Oh yeah :O)

Just me being lazy, and avoiding typing the ( sender : tObject ) bit ;O)

Sorry about that...

Tim.
0
 

Author Comment

by:mariotwsh
ID: 2554360


   A lot of thanks!!!!!!!!!!!
0

Featured Post

Is Your AD Toolbox Looking More Like a Toybox?

Managing Active Directory can get complicated.  Often, the native tools for managing AD are just not up to the task.  The largest Active Directory installations in the world have relied on one tool to manage their day-to-day administration tasks: Hyena. Start your trial today.

Question has a verified solution.

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

Suggested Solutions

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…

809 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