Einzelnen Beitrag anzeigen

Benutzerbild von Spezi1980
Spezi1980

Registriert seit: 11. Aug 2003
Ort: Dresden OT Cossebaude
71 Beiträge
 
Delphi 2005 Personal
 
#4

Re: OnClick bei Selfmade Class

  Alt 16. Feb 2004, 16:19
Ich hab jetzt leider kein Delphi hier um mir mal TPanel anzuschauen.

Ein paar Grundlagen:

Wenn du Deine TRondo Komponente auf das Form Plazierst, kannst du im Objektinspector oder im Programmcode einem Ereigniss eine Prozedur zuweisen.
Delphi-Quellcode:
zB. bei dynamischem erstellen sieht es so aus:
procedure Form1.Create;
begin
 meinPanel := TRondo.Create;
 meinPanel.onChange := Clickit
end;

procedure Form1.Clickit(Sender : TObject)
begin
 Showmessage('irgendwas');
end;
Der code, der in der Funktion 'Clickit' befindet wird innerhalb Deiner Komponente oder Klasse aufgerufen.

Die könnte dann folgendermaßen definiert:
Delphi-Quellcode:
type
  TRondo = class (TPanel)
  private
    Fx, Fy, Fr: single;
    Fcol: TColor;
    FMeinEreigniss : TNotifyEvent;
  public
   procedure Xclick; override; //die Orginal Prozedur vom Panel (weiß jetzt nicht wie die heist)

  published
  property OnChoose: TNotifyEvent read FMeinEreigniss write FMeinEreigniss ;
end;

[...]

procedure TRondo.Xclick;
begin
  inherited;
  if Assigned(FMeinEreigniss) then FMeinEreigniss (self);
end;
Wenn in Deiner Komponente die Funktion Xclick aufgerufen wird, so wird dann das 'irgendwas' angezeigt.

Das Funktioniert aber auch nur, wenn die 'xclick' Prozedur des Panels (die ist warscheinlich in TWincontrol deklariert) mit der direktive 'dynamic' oder 'virtual' deklariert wurde. In einem anderen Fall must du eine ei´gene Prozedur in der Klasse erstellen,
prozesure meinclick; Message wm_... oder so ähnlich, die von Windows aufgerufen wird, wenn jemand deine Komponente anklickt.

Hoffe das war halbwegs verständlich. Wenn du Delphi Professional hast, kannste dir ja auch mal den Sourcecode von TWincontrol anschauen und dir angucken, wie Delphi das onClick Ereignis in seine Komponenten Implementiert.

[Edit] Danke, dummer Schreibfehler [/Edit]
Robert
Codito, ergo sum.
>>I code, therefore I am<<
  Mit Zitat antworten Zitat