![]() |
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:
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.
CStunde = class(Tobject)
public Panel: TPanel; id: string; list: array[1..4] of TLabel; Constructor Create(t,l,h,w: integer; form: TForm); end; Wenn ich das jetzt aber versuche, also z.B. mit
Delphi-Quellcode:
bekomme ich
Constructor CStunde.create(t,l,h,w: integer; Form: TForm);
var i: byte; begin panel := TPanel.Create(nil); panel.OnClick :=myonclick(self) Zitat:
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: |
Re: Panel mit 4 Labels von TPanel ableiten
Es darf keine freie Prozedur sein, sondern muß eine Methode sein.
|
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:
Ändert nichts an meinem Problem. Was habe ich falsch gemacht?
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; |
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; |
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).
|
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:
und Methode der Klasse CStunde.
panel.OnClick :=myonclick;
|
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:
Im Aufrufenen Formualar:
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;
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