AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OnClick bei Selfmade Class

Ein Thema von NeoXan · begonnen am 16. Feb 2004 · letzter Beitrag vom 16. Feb 2004
Antwort Antwort
NeoXan
(Gast)

n/a Beiträge
 
#1

OnClick bei Selfmade Class

  Alt 16. Feb 2004, 14:29
Delphi-Quellcode:
 
var
 Rondo : array[1..4 ] of TRondo;
...

Rondo[1].OnClick := Rondo[1].OnChoose;
Delphi-Quellcode:
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;
...und wenn ich versuche meine Ellipse anzuklicken passiert nischts
  Mit Zitat antworten Zitat
Benutzerbild von Spezi1980
Spezi1980

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

Re: OnClick bei Selfmade Class

  Alt 16. Feb 2004, 14:40
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:

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;
Im Programm kannst du dann beim Benutzen der Klasse eine Prozedur dem onChoose- Ereigniss zuweisen.

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.
Robert
Codito, ergo sum.
>>I code, therefore I am<<
  Mit Zitat antworten Zitat
NeoXan
(Gast)

n/a Beiträge
 
#3

Re: OnClick bei Selfmade Class

  Alt 16. Feb 2004, 15:02
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:
procedure TRondo.OnChoose;
begin
if Assigned(FMeinEreigniss) then //FMeinEreigniss (self);
ShowMessage('ASF');
end;
Wenn ich "property" weglasse kommt ein Fehler
[ Published Field 'OnChoose2' not a class or interface type ]
  Mit Zitat antworten Zitat
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, 15: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
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#5

Re: OnClick bei Selfmade Class

  Alt 16. Feb 2004, 15:32
Delphi-Quellcode:
public
   procedure Click; override; // override statt overload!
So sollte es gehen...

Gruß, teebee
  Mit Zitat antworten Zitat
NeoXan
(Gast)

n/a Beiträge
 
#6

Re: OnClick bei Selfmade Class

  Alt 16. Feb 2004, 16:45
http://www.realmofnameless.de/class.jpg

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...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz