![]() |
OnClick bei Selfmade Class
Delphi-Quellcode:
var Rondo : array[1..4 ] of TRondo; ... Rondo[1].OnClick := Rondo[1].OnChoose;
Delphi-Quellcode:
...und wenn ich versuche meine Ellipse anzuklicken passiert nischts :(
type
TRondo = class (TPanel) private Fx, Fy, Fr: single; Fcol: TColor; public procedure Init(xx,yy: integer; col:TColor); procedure Show; procedure OnChoose(Sender: TObject); published property x : single read Fx write Fx; property y : single read Fy write Fy; property r : single read Fr write Fr; property col : TColor read Fcol write Fcol; end; ... procedure TRondo.Show; var b: Tcolor; begin with frmMain.imgMain.Canvas do begin Brush.Color := color; Ellipse(Round(x-r),Round(y-r),Round(x+r),Round(y+r)); Brush.Color := b; end; end; procedure TRondo.OnChoose(Sender: TObject); begin ShowMessage('ASF'); end; |
Re: OnClick bei Selfmade Class
Hi,
du kannst nicht Rondo[1].OnClick := Rondo[1].OnChoose; zuweisen. Wenn du ein eigenes Ereigniss erstellen willst, so mußt du eine Varible erstellen:
Delphi-Quellcode:
Im Programm kannst du dann beim Benutzen der Klasse eine Prozedur dem onChoose- Ereigniss zuweisen.meineKlasse = ... private FMeinEreigniss =TNotifityEvent; public procedure tueirgendwas; published onChoose : TNotifityEvent read FMeinEreigniss write FMeinEreigniss; end; [...] procedure meineKlasse.tueirgendwas; begin [...] //hier wird das Ereigniss und der damit verbundene Code aufgerufen //natürlich nur, wenn damit auch eine Prozedur des Typs TNotifityEvent verbunden ist. if Assigned(FMeinEreigniss) then FMeinEreigniss(self); [...] end; Wenn du das onClick Ereigniss überschreiben willst, so mußt du entweder die vorhergehende Klasse überschreiben (Wenn das Möglich ist) oder die Windowsmessage abfangen. |
Re: OnClick bei Selfmade Class
Ich glaub' ich stelle mich da ein wenig zu dämlich an...
Delphi-Quellcode:
type
TRondo = class (TPanel) private Fx, Fy, Fr: single; Fcol: TColor; FMeinEreigniss : TNotifyEvent; public procedure OnChoose; published property OnChoose2: TNotifyEvent read FMeinEreigniss write FMeinEreigniss ; end;
Delphi-Quellcode:
Wenn ich "property" weglasse kommt ein Fehler
procedure TRondo.OnChoose;
begin if Assigned(FMeinEreigniss) then //FMeinEreigniss (self); ShowMessage('ASF'); end; [ Published Field 'OnChoose2' not a class or interface type ] |
Re: OnClick bei Selfmade Class
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:
Der code, der in der Funktion 'Clickit' befindet wird innerhalb Deiner Komponente oder Klasse aufgerufen.
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; Die könnte dann folgendermaßen definiert:
Delphi-Quellcode:
Wenn in Deiner Komponente die Funktion Xclick aufgerufen wird, so wird dann das 'irgendwas' angezeigt.
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; 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] |
Re: OnClick bei Selfmade Class
Delphi-Quellcode:
So sollte es gehen...
public
procedure Click; override; // override statt overload! Gruß, teebee |
Re: OnClick bei Selfmade Class
![]() so schaut mein Feld aus... die einzelnen Figuren sind alles eigene Klassen (wirklich Komponenten habe ich nicht ins Form gedropped) Class(TPanel) hatte ich nur geschrieben, um zu probieren, wie ich dat mit dem Click hinbekomme... Ich wollte einfach die Figuren bewegen...dazu dachte ich mir die kleinen Rechtecke ansich zu einer Klasse zu machen und dann mehrere Instanzen zu erstellen...und somit die Figuren zu bewegen... ...aber dazu müsste ich das mit dem Clicken wieder hinbekommen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz