AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Probleme bei der dynamischen Erzeugung mehrere Komponenten
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme bei der dynamischen Erzeugung mehrere Komponenten

Ein Thema von BAMatze · begonnen am 27. Apr 2009 · letzter Beitrag vom 27. Apr 2009
Antwort Antwort
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
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Probleme bei der dynamischen Erzeugung mehrere Komponent

  Alt 27. Apr 2009, 10:52
Warum FindComponent?
Markus Kinzler
  Mit Zitat antworten Zitat
BAMatze

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

Re: Probleme bei der dynamischen Erzeugung mehrere Komponent

  Alt 27. Apr 2009, 11:00
Bei FindComponent bin ich mir ja nicht sicher, weil wie gesagt, die Komponente noch gar nicht existiert. Leider kenne ich auch keine andere Funktion oder Möglichkeit eine Komponente bei ihrem Variablennamen anzusprechen und hier habe ich auch noch nichts passendes gefunden.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Probleme bei der dynamischen Erzeugung mehrere Komponent

  Alt 27. Apr 2009, 11:16
Delphi-Quellcode:
procedure TContainer.CreateStatusLabel(PosX: Integer; PosY: Integer; Textgroesse: Integer; Name: string; Text: string);
begin
  CreateLabel(PosX, PosY, Textgroesse, Text);
  CreateLabel(PosX + 105, PosY, Textgroesse, '');
end;
Markus Kinzler
  Mit Zitat antworten Zitat
BAMatze

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

Re: Probleme bei der dynamischen Erzeugung mehrere Komponent

  Alt 27. Apr 2009, 11:24
Zitat von mkinzler:
Delphi-Quellcode:
procedure TContainer.CreateStatusLabel(PosX: Integer; PosY: Integer; Textgroesse: Integer; Name: string; Text: string);
begin
  CreateLabel(PosX, PosY, Textgroesse, Text);
  CreateLabel(PosX + 105, PosY, Textgroesse, '');
end;
Berichtige mich bitte wenn ich da jetzt was falsch verstehe aber wie verifizierst du bei der Methode zwischen FLblGeschwindigkeit und FLblGeschwindigkeitsanzeige? Und da CreateLabel als Funktion: TLabel deklariert ist bekomme ich doch so eine Fehlermeldung oder?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Probleme bei der dynamischen Erzeugung mehrere Komponent

  Alt 27. Apr 2009, 11:27
Nein, es wird jeweils eine neu Instanz von TLabel erzeugt und zurückgegeben, da ich den Rückgabewert nicht verwende wird er halt nirgends zugewiesen.
Markus Kinzler
  Mit Zitat antworten Zitat
BAMatze

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

Re: Probleme bei der dynamischen Erzeugung mehrere Komponent

  Alt 27. Apr 2009, 11:34
Und kann ich dies auch den beiden Labeln irgendwie zuordnen, da ich ja aufgrund der Lesbarkeit des Programmes die aussagekräftigen LabelNamen verwenden möchte und nicht die dann warscheinlich entstehenden Notationen Label1 und Label2. Muss auch mehrfach auf zumindest das 2. Label zugreifen, da sich dieses ja ändert.
Oder geht dies dann nur oder einfacher über ein Array oder TList?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Probleme bei der dynamischen Erzeugung mehrere Komponent

  Alt 27. Apr 2009, 11:35
Das würde ich dann über einen Array oder besser einet TObjectList machen
Markus Kinzler
  Mit Zitat antworten Zitat
BAMatze

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

Re: Probleme bei der dynamischen Erzeugung mehrere Komponent

  Alt 27. Apr 2009, 11:38
Ok danke dir, schaue ich mal danach.

BAMatze
  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 21:09 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