Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Property zu einem bestehenden Objekt hinzufügen?
GR-Thunderstorm - Mo 02.01.12 19:41
Titel: Property zu einem bestehenden Objekt hinzufügen?
Auf meiner Form verwende ich mehrere TImages. Diese Images möchte ich anhand von Arrays zeichnen, die jeweils Bestandteil der Komponente sein sollen.
Meine bisherige Idee war es, eine eigene Klasse auf Grundlage von TImage zu erstellen und in dieser dann ein entsprechendes Property einzufügen. Aber wie genau kann ich das dann auf meiner Form verwenden? Ich habe im Texteditor der Form die Klassenbezeichner meiner Objekte entsprechend abgewandelt, aber dann kommt die Meldung, dass meine Klasse nicht gefunden werden kann und er entfernt die entsprechende Deklaration.
Am liebsten würde ich TImage so abändern, dass ich noch eine Variant-Variable hinzufüge und diese dann als variables Array gebrauche.
Hat jemand hierzu eine Lösung parat?
Moderiert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 02.01.2012 um 20:33
GR-Thunderstorm - Fr 06.01.12 14:39
Das kann ich so leider nicht machen, da ich ein Programm für meinen Professor schreibe und er muss den Code ohne weiteres kompilieren können.
Ich habe mich also entschlossen, eine neue Klasse zu erstellen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| type TSpecimen = class(TImage) private Feld: Variant; procedure FeldWrite(Value: Variant);
public constructor Create(AOwner: TComponent); override;
property PixArray : Variant read Feld write FeldWrite; end;
implementation
constructor TSpecimen.Create(AOwner: TComponent); begin inherited Create(AOwner); self.Parent:= inherited Parent; end;
procedure TSpecimen.FeldWrite(Value: Variant); begin self.Feld:=Value;
end; |
Ich erzeuge die entsprechenden Komponenten zur Laufzeit durch...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| type TForm1 = class(TForm) K1: TPanel; K2: TPanel; K3: TPanel; procedure FormCreate(Sender: TObject); end; var KC: array[1..3] of TImage;
implementation
procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin for i:=1 to 3 do begin KC[i]:=TSpecimen.Create(FindComponent('K'+IntToStr(i)) as TPanel); end; end; |
Mein Problem: Meine TSpecimen haben allesamt Parent = nil!
Wie kann das sein? Habe ich einen Fehler beim Constructor gemacht oder muss ich extra die Parent-Propertys separat eingeben?
Gausi - Fr 06.01.12 14:44
Du gibst im Create ja nur den Owner an. Das ist die Komponente, die hinterher fürs Aufräumen zuständig ist. Das Parent (also die Komponente, auf der das angezeigt wird) muss nach dem Constructor zusätzlich gesetzt werden.
D.h.
Delphi-Quelltext
1: 2: 3: 4: 5:
| constructor TSpecimen.Create(AOwner: TComponent); begin inherited Create(AOwner); self.Parent:= inherited Parent; end; |
GR-Thunderstorm - Fr 06.01.12 17:45
Gausi hat folgendes geschrieben : |
Du gibst im Create ja nur den Owner an. Das ist die Komponente, die hinterher fürs Aufräumen zuständig ist. Das Parent (also die Komponente, auf der das angezeigt wird) muss nach dem Constructor zusätzlich gesetzt werden.
D.h.
Delphi-Quelltext 1: 2: 3: 4: 5:
| constructor TSpecimen.Create(AOwner: TComponent); begin inherited Create(AOwner); self.Parent:= inherited Parent; end; | |
Stimmt, ich dachte immer, AOwner wird bei vorinstallierten Komponenten automatisch zu Parent. Hab schon zu lange nix mehr zur Laufzeit erstellen lassen. ^^
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!