![]() |
class mit Name-Property
hallo,
ich habe mehrere Klassen, die ähnlich der folgenden aufgebaut sind:
Delphi-Quellcode:
Wenn ich nun diese Klasse erzeuge, dann möcht ich jeder Instanz einen definierten Namen geben.
unit Klasse_Rect;
interface uses Classes, Contnrs, SysUtils, Graphics, ExtCtrls, Funktionen; //const type TRectFeld = class (TObject) private { Private-Deklarationen } //interne Variablen FRectZaehler : Integer; //fixe Daten FLeft : Integer; FTop : Integer; FHeight : Integer; FWidth : Integer; FPenWidth : Integer; FFarbe : TColor; FMaskFaktoren : TMaskFaktoren; //variable Daten // public { Public-Deklarationen } constructor Create; destructor Destroy; procedure CreateInMaske(Maske: TPanel); published { Published-Deklarationen } property PenWidth : Integer read FPenWidth write FPenWidth; property Farbe : TColor read FFarbe write FFarbe; property MaskFaktoren : TMaskFaktoren read FMaskFaktoren write FMaskFaktoren; property Left : Integer read FLeft write FLeft; property Top : Integer read FTop write FTop; property Height : Integer read FHeight write FHeight; property Width : Integer read FWidth write FWidth; end; { Aufrufe } implementation //----------------------------------------------------------------------------// //-----------------------------------PRIVATE----------------------------------// //-----------------------------------PUBLIC-----------------------------------// constructor TRectFeld.Create; begin inherited Create; //Variablen beschreiben FRectZaehler := 0; end; destructor TRectFeld.Destroy; begin //interne Variablen freigeben inherited Destroy; end; procedure TRectFeld.CreateInMaske(Maske: TPanel); var Dummy_Rect: TShape; begin //Zähler hochzählen inc(FRectZaehler); //Rect erzeugen Dummy_Rect := TShape.Create(Maske); with Dummy_Rect do begin //feste Werte Parent := Maske; Enabled := true; Visible := true; Brush.Style := bsClear; Name := SysUtils.Format('Rect_%d', [FRectZaehler]); Left := GroessenFaktor(MaskFaktoren.MaskFaktor_Height, FLeft); Top := GroessenFaktor(MaskFaktoren.MaskFaktor_Height, FTop); Width := GroessenFaktor(MaskFaktoren.MaskFaktor_Height, FWidth); Height := GroessenFaktor(MaskFaktoren.MaskFaktor_Height, FHeight); Pen.Color := FFarbe; Pen.Width := FPenWidth; //Ereignisse end; end; //----------------------------------------------------------------------------// end. Ich hätt das gerne genau so, wie es z. B. bei einem Button ist (Button1, Button2, Button_Hugo,...) Nur ein Button ist eine Komponente. Aber kann man das auch für Klassen machen? Wieso das ganze: Ich möchte die einzeln erstellen Klassen mit deren Namen in einer Liste speichern und später dann über den namen auf die Klassen zugreifen. |
Re: class mit Name-Property
Es ist zu unterscheiden zwischen Instanzennamae und Attributename
Du könntest der Klasse die Property Name geben und je nachdem - das ganze verwalten. Um dann später eben über die Namen auf die Klasse zu kommen, müsstest du einfach alle Instanzen - welche du am besten in einer Liste (TList) verwaltest - durchgehen und die Namen vergleichen. MfG |
Re: class mit Name-Property
Wenn ich nun meine klassen vom Typ TComponent ableite, dann müsst ich doch eigentlich alles haben was ich brauche und will, oder bekomm ich dann in irgend einer Weise probleme?
|
Re: class mit Name-Property
Es müssen bei TComponent deine Komponenten nur alle den selben Owner haben, denn es wird nur mit dessen Untergeordneten Komponenten verglichen.
|
Re: class mit Name-Property
Wirf nicht die Property "Name" mit dem Variablenbezeichner innerhalb des Codes durcheinander! Der Form-Designer/OI ist der Verantwortliche, der die Property in einen Feldnamen für den Code übernimmt, die müssen aber nicht zwangsweise gleich sein!
Das ist etwa das gleiche wie wenn du sowas von Hand machen würdest:
Delphi-Quellcode:
Technisch das Selbe. Du wirst nur aus dem Code heraus es nicht schaffen, dass durch eine Zuweisung "myInstance.Name := 'haha';" gleich eine Variable mit dem Bezeichner "haha" vom Typ TMyClass angelegt wird - aber genau das macht der Form-Designer nur.
type
TMyClass = class private FName: String; public property Name: String read FName write FName; end; implementation . . . var myInstance: TMyClass; begin myInstance := TMyClass.Create; myInstance.Name := 'myInstance'; . . |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 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 by Thomas Breitkreuz