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 class mit Name-Property (https://www.delphipraxis.net/137998-class-mit-name-property.html)

Helmi 1. Aug 2009 20:58


class mit Name-Property
 
hallo,

ich habe mehrere Klassen, die ähnlich der folgenden aufgebaut sind:

Delphi-Quellcode:
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.
Wenn ich nun diese Klasse erzeuge, dann möcht ich jeder Instanz einen definierten Namen geben.
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.

Aphton 1. Aug 2009 21:11

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

Helmi 1. Aug 2009 21:14

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?

himitsu 1. Aug 2009 21:49

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.

Medium 2. Aug 2009 02:07

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:
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';
.
.
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.


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