AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

label erstellen --> Name?

Ein Thema von MAM2508 · begonnen am 10. Jan 2006 · letzter Beitrag vom 10. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2   
MAM2508

Registriert seit: 28. Aug 2005
1 Beiträge
 
#1

label erstellen --> Name?

  Alt 10. Jan 2006, 13:23
hallo, ich habe mal eine frage:

ich bin total der neuling aber ein fruend und ich langweilien uns ziemlich im informatikunterrich. es ist das erste halbjahr, aber wir wollen viel mehr lernen.

unser problem:

es wird mit jedem knopfdruck ein neues label unter das letzte geschrieben:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  

  MyLabel := TLabel.Create(Form1);

  inc(anzahl);
  with MyLabel do
    begin
      Caption := 'test';
      Top := 100+Anzahl*20;
      Left := 150;
      Parent := Form1;
    end;

end;

was muss man tun, damit die labels namen bekommen?
wir wissen nämlich nicht, wie wir sie danach beschriften können (oder allgemein damit arbeiten), weil wir halt den namen der labels nicht kennen.

es ist sicher nur ein kleines problem für euch, aber wir haben keine ahnung davon.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: label erstellen --> Name?

  Alt 10. Jan 2006, 13:33
Hi MAM2508 ... und herzlich willkommen in der DelphiPraxis!

Ein schlechte Nachricht gleich vorneweg: Deine Labels werden keinen Namen haben.
Warum?
Weil du sie ja nicht eindeutig deklarierst. Du hast sie kurze Zeit unter dem Namen "MyLabel" zur Verfügung. Aber eben nur so lange, wie die Variable nicht freigegeben (.Free) oder neu belegt wird.
Was kannst du jetzt tun?
Ein Weg führt über die Eingenschaft "Components" deines Formulars. Diese enthält eine List aller Komponenten, deren "Parent" das Formular ist. Du könntest also die Liste durchklappern und nach deinen Labels suchen.
Delphi-Quellcode:
var
  idx : Integer;
  EinLabel : TLabel;
begin
  for idx:=0 to FormularName.ComponentCount-1 do
  begin
    if (FormularName[idx].Components is TLabel) then //Nachsehen, ob diese Komponente vom Typ TLabel ist
    begin
      EinLabel:=TLabel(FormularName[idx].Components); //Wir holen uns die Komponente als TLabel
      EinLabel.MAchDiesUndMachDas ....
    end;
  end;
end;
Dadurch findest du natürlich alle Labels; auch die, die du mit dem Designer auf das Form gezogen hast. Um das zu vermeiden, könntest du dir in MyLabel.Tag eine Zahl speichern, die du später, in obiger Routine, kontrollierst.
if (FormularName[idx].Components is TLabel) and (TLabel(FormularName[idx].Components).Tag=DeineZahl) then
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: label erstellen --> Name?

  Alt 10. Jan 2006, 13:34
Da Du die Labels zur Laufzeit erstellst, kann Du nicht schon im Quellcode über einen Namen darauf zugreifen. Du hast im Grunde 2 Möglichkeiten:
1. Du packst die Labels in ein array, und greifst dann über den Index auf das Label zu
2. Du verzichtest auf das Array und suchst beim Zugriff auf das Label mittels FindComponent danach. Du kannst im Label die Eigenschaft Tag setzen, den Du als Index für dein Label nehmen kannst... Du hast doch schon die Variable Anzahl. Ich würde als den Tag einfach mit dem Wert von Anzahl füllen. Wenn Du nun also das 3. erstellte Label suchst, könntest Du diese Funktion nutzen:

Delphi-Quellcode:
function TForm1.LabelNr (Index : integer) : TLabel ;
var
 i : integer ;
begin
     Result := nil ;
     for i := 0 to ComponentCount-1 do if Components[i] is TLabel then begin
         if (Components[i] as TLabel).Tag = Index then begin
             Result := Components[i] as TLabel ;
             abort ;
         end ;
     end ;
end ;
Der Aufruf würde dann etwa so aussehen:

Delphi-Quellcode:
procedure TForm1.MachWasMitDemLabel ;
var
 Label : TLabel ;
begin
     Label := LabelNr (3) ;
     if assigned(Label) then with Label do begin
         // Mach irgend was.
     end ;
end ;
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: label erstellen --> Name?

  Alt 10. Jan 2006, 13:44
Aber als Variablennamen bitte nicht "Label" verwenden. Label ist ein reservierter Begriff und dient als Sprungziel für Goto (do not use ^^).
Daniel Schuhmann
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: label erstellen --> Name?

  Alt 10. Jan 2006, 13:46
Zitat von Daniel Schuhmann:
Aber als Variablennamen bitte nicht "Label" verwenden. Label ist ein reservierter Begriff und dient als Sprungziel für Goto (do not use ^^).
Stimmt, da war ich kurz abwesend
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: label erstellen --> Name?

  Alt 10. Jan 2006, 13:57
Mal ne ganz andere Frage... warum nicht einfach die Namen zur Laufzeit vergeben? Folgendes funktioniert bei mir zumindest:

Delphi-Quellcode:
type
  // [...]
  private
    procedure SetMyLabelCaption(LabelName, Caption: String);
  end;

var
  // [...]
  Anzahl: Integer;

implementation

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  MyLabel: TLabel;
begin
  MyLabel := TLabel.Create(Form1);

  inc(anzahl);
  with MyLabel do
  begin
    Caption := 'test';
    Top := 100+Anzahl*20;
    Left := 150;
    Parent := Form1;
    Name := 'Label'+IntToStr(Anzahl);
  end;
end;

procedure TForm1.SetMyLabelCaption(LabelName, Caption: String);
begin
  TLabel(FindComponent(LabelName)).Caption := Caption;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SetMyLabelCaption('Label2', 'Hallo');
end;
Daniel Schuhmann
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: label erstellen --> Name?

  Alt 10. Jan 2006, 14:06
Ja klar, das klappt auch...

Aber trotzdem musst Du über FindComponent gehen, um deinen Label nachher anzusprechen. Ich denke mal, was hier gewollt war, ist dann irgendwo im Quelltext einfach mit label2.irgendwas zuzugreifen. Und das geht definitiv nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: label erstellen --> Name?

  Alt 10. Jan 2006, 14:11
Ja sicher, das verweigert der compiler ja weil wegen gibts nicht. Gefällt mir aber so besser, als über den Tag drauf zuzugreifen.
Daniel Schuhmann
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#9

Re: label erstellen --> Name?

  Alt 10. Jan 2006, 15:13
Zitat von Daniel Schuhmann:
Gefällt mir aber so besser, als über den Tag drauf zuzugreifen.
Das hängt vielleicht von der Situation ab. Indirekt bringst Du ja auch den Wert von Anzahl im Labelnamen unter. Ich schreib ihn in den Tag. Ich denk das ist gehupst wie gedupst, alles wohl Geschmackssache.
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#10

Re: label erstellen --> Name?

  Alt 10. Jan 2006, 15:25
naja aber vielleicht braucht man das tag später um noch irgendwelche anderen informationen dem label zuzuordnen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf