AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

class mit Name-Property

Ein Thema von Helmi · begonnen am 1. Aug 2009 · letzter Beitrag vom 2. Aug 2009
Antwort Antwort
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

class mit Name-Property

  Alt 1. Aug 2009, 20:58
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.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: class mit Name-Property

  Alt 1. Aug 2009, 21:11
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
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#3

Re: class mit Name-Property

  Alt 1. Aug 2009, 21:14
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?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#4

Re: class mit Name-Property

  Alt 1. Aug 2009, 21:49
Es müssen bei TComponent deine Komponenten nur alle den selben Owner haben, denn es wird nur mit dessen Untergeordneten Komponenten verglichen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Medium
Online

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: class mit Name-Property

  Alt 2. Aug 2009, 02:07
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:13 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