Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Panel mit 4 Labels von TPanel ableiten (https://www.delphipraxis.net/87480-panel-mit-4-labels-von-tpanel-ableiten.html)

Nikolas 1. Mär 2007 09:38


Panel mit 4 Labels von TPanel ableiten
 
Hallo

Ich habe leider schon länger nichts mehr geschrieben und versuch gerade wieder reinzukommen.

Mein aktuelles Problem ist dieses: Ich will eine Anzahl von Panels haben, die jeweils vier Label tragen. Mein erster Ansatz war dieser:
Delphi-Quellcode:
CStunde = class(Tobject)
  public
  Panel: TPanel;
  id: string;
  list: array[1..4] of TLabel;
  Constructor Create(t,l,h,w: integer; form: TForm);
end;
den ich schon mit Hilfer der DP bekommen habe. Mein Problem liegt jetzt darin, an das onclick ereigniss des Panels zu kommen. Im Endeffekt will ich damit zB. die ID als showmessage anzeigen oder ein weiteres Formular öffnen. Ich glaube mich zu erinner, dass ich früher bei dynamisch erstellen Komponenten einfach nur ein list[i].onclick:= myonclick(Self); schreiben konnte, wenn list als array[1..5] of TPanel und myonclick als procedure Myonlick(Sender: Tobject) definiert war.

Wenn ich das jetzt aber versuche, also z.B. mit
Delphi-Quellcode:
Constructor CStunde.create(t,l,h,w: integer; Form: TForm);
var
i: byte;
begin
       
panel := TPanel.Create(nil);
panel.OnClick :=myonclick(self)
bekomme ich
Zitat:

[Fehler] E2010 Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter'
Was habe ich falsch gemacht?

Alternativ habe ich mir überlegt, gleich von TPanel abzuleiten, wird mir beim self:= tPanel.create; natürlich gesagt, dass CSTunde und TPanel inkompatibel sind. Wahrscheinlich muss ich da mit inherited. o.ä. dran, aber ich habe leider schon zu lange nicht mehr ObjectOrientiert gearbeitet.

Es wäre also sehr nett, wenn mir jemand auf die Sprünge helfen könnte. :gruebel:

mkinzler 1. Mär 2007 09:43

Re: Panel mit 4 Labels von TPanel ableiten
 
Es darf keine freie Prozedur sein, sondern muß eine Methode sein.

Nikolas 1. Mär 2007 09:49

Re: Panel mit 4 Labels von TPanel ableiten
 
Laut OH: ''Eine Methode ist eine Prozedur oder Funktion, die zu einer bestimmten Klasse gehört.''
Nur: Zu welcher Klasse denn und wie schreibe ich dass?
Delphi-Quellcode:
CStunde = class(Tobject)
 public

 Panel: TPanel;
 id: string;
 list: array[1..4] of TLabel;

 Procedure MyClick(sender: TObject);
 Constructor Create(t,l,h,w: integer; form: TForm);

end;
Ändert nichts an meinem Problem. Was habe ich falsch gemacht?

mkinzler 1. Mär 2007 09:51

Re: Panel mit 4 Labels von TPanel ableiten
 
Am besten nicht dieser Klasse sondern einer anderen (es bietet sich hier immer die Form an, auf welcher die Komponente nachher liegt.)

Delphi-Quellcode:
panel := TPanel.Create(Form1);
panel.OnClick :=Form1.myonclick;

Nikolas 1. Mär 2007 09:56

Re: Panel mit 4 Labels von TPanel ableiten
 
Aber ich weiss doch gar nicht, wo meine Klasse nachher liegt, bzw. will ich sie auf mehreren Formularen einsetzen. (Deswegen übergebe ich im Create schon ein TForm).

mkinzler 1. Mär 2007 09:59

Re: Panel mit 4 Labels von TPanel ableiten
 
Ja deshalb sind Events ja Properties. Man kann sie dann während der Laufzeit dann Setzen.
[Edit: Jetzt verstehe ich, was du meinst:
Delphi-Quellcode:
panel.OnClick :=myonclick;
und Methode der Klasse CStunde.

Nikolas 1. Mär 2007 10:07

Re: Panel mit 4 Labels von TPanel ableiten
 
Ok, jetzt habe ich es verstanden.

Vielen Dank für deine Hilfe :thumb:




Für die den Thread später lesen:

Delphi-Quellcode:
CStunde = class(Tobject)
 public
 Panel: TPanel;
 Constructor Create(t,l,h,w: integer; form: TForm);
end;
Delphi-Quellcode:
Constructor CStunde.create(t,l,h,w: integer; Form: TForm);
begin
Panel:= TPanel.Create(nil);

 with panel do
  begin
  Parent:= Form;
  Top:= t;
  ...
  end;

 end;
end;
Im Aufrufenen Formualar:
Delphi-Quellcode:
var
  Form1: TForm;
  sp: CStunde;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
sp := Cstunde.Create(50,50,120,200,Form1);
sp.Panel.OnClick:= myclick;
end;
Delphi-Quellcode:
Procedure TForm1.MyClick(Sender: TObject);
begin
showmessage('öööööö');
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 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