Einzelnen Beitrag anzeigen

BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

Probleme bei der dynamischen Erzeugung mehrere Komponenten

  Alt 27. Apr 2009, 10:45
Hallo an alle DPler,

Ich möchte meinen Programmcode etwas kürzen, deswegen wollte ich die Erstellen mehrere gleicher Labels für einen Status zusammen fassen. Zur Zeit sieht es wie folgt aus: Ich definiere mir in meiner Klasse mehrere Labels, wobei 2 Labels immer zusammen gehören (Bsp.: LblGeschwindigkeit und LblGeschwindigkeitAnzeige). In dem einen Label soll der Text 'Geschwindigkeit:' drinn stehen und in dem anderen die dementsprechende Zahl + 'km/h'. Ich habe folgende Prozeduren schon geschrieben und die einzelne Initialisierung funktioniert auch:

Delphi-Quellcode:
function TContainer.CreateLabel(PosX, PosY, Textgroesse: integer; Text: string): TLabel;
begin
  result := TLabel.Create(Self);
  result.Parent := Self;
  result.Left := PosX;
  result.Top := PosY;
  result.Caption := Text;
  result.Font.Height := Textgroesse;
end;
...

procedure TContainer.CreateWnd;
begin
  inherited createWnd;
  // Labelinitialisierungen
  LblGeschwindigkeit := CreateLabel(100, 100, 14, 'Geschwindigkeit:');
  LblGeschwindigkeitAnzeige := CreateLabel(150, 100, 14, '100 km/h');
  ... // weitere Erzeugung mehrerer Komponenten
end;
Möchte jetzt die namensähnlichen Labels möglichst über eine procedure oder function mit einem Aufruf initialisieren und habe es so versucht:

Delphi-Quellcode:
procedure TContainer.CreateStatusLabel(PosX: Integer; PosY: Integer; Textgroesse: Integer; Name: string; Text: string);
begin
  Findcomponent(Name) := CreateLabel(PosX, PosY, Textgroesse, Text);
  FindComponent(Name+'Anzeige') := CreateLabel(PosX + 105, PosY, Textgroesse, '');
end;

// Habe auch schon folgende Abwandlung versucht

procedure TContainer.CreateStatusLabel(PosX: Integer; PosY: Integer; Textgroesse: Integer; Name: string; Text: string);
begin
  TLabel(Findcomponent(Name)) := CreateLabel(PosX, PosY, Textgroesse, Text);
  TLabel(FindComponent(Name+'Anzeige')) := CreateLabel(PosX + 105, PosY, Textgroesse, '');
end;
Leider kommte es bei beiden Varianten zur Fehlermeldung, dass der linken seite das so nicht zugeordnet werden kann. Weiterhin erschließt sich aus der Logic, dass die Labels zum Ansprechzeitpunkt an sich noch gar nicht existieren, da ich sie ja erst erschaffen möchte. Kann mir jemand sagen, wie ich diese RICHTIG ansprechen kann oder vieleicht ob es eine bessere Methode gibt soetwas zu erstellen.

Ps.: Ich habe erstmal 2 Labels erstellt, weil sich die gleichmäßige Ausrichtung erstmal einfacher zu erreichen ist.

Vielen Dank
BAMatze
  Mit Zitat antworten Zitat