Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - für 20 labels das onClick-ereignis steuern?


bruder jonas - Sa 13.07.02 21:37
Titel: für 20 labels das onClick-ereignis steuern?
hallo,

habe ein problem.
ich habe 20 labels. bei programmstart lese ich aus einer ini-datei den labelnamen aus.

ich möchte per onclick auf das label eine webseite öffnen. die url muss vorhere eingelesen werden.
wie kann ich das mit einer for schleife machen, das für jedes der 20 label bei onclick die richtige url ausgelesen wird?

danke


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 29.03.2010 um 22:55


Pit - Sa 13.07.02 22:05
Titel: Re: für 20 labels das onClick-ereignis steuern?


Tino - So 14.07.02 08:53

Moin,

beim erstellen der Labels einfach ein OnClick-Event zuweisen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
With tLable.Create (Self) Do
  Begin
    Parent := Self;
    {...}
    OnClick := DoURLLabelClick;
  End;

Die Procedure DoURLLabelClick definierst Du einfach in der Privat-Sektion des Forms:

Delphi-Quelltext
1:
2:
private
  procedure DoURLLabelClick (aSender: tObject);

Die Implementerierung sollte in etwa so sein:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure tForm1.DoURLLabelClick (aSender: tObject);
Var
  URL: String;
Begin
  URL := tLabel (aSender).Caption;
  // Hier die URL öffnen
End;


Gruß


gnomecoder - Mo 29.03.10 14:06

sorry dass ich diesen 8 Jahre alten Thread ausgrabe, aber brauche mal hilfe.
hab ein label array und hab das mit dem onclick ereignis bei der zuweisung so gemacht wie hier beschrieben. funktioniert auch super.
Nur ist es irgendwie möglich beim onclickereignis an die Indexzahl des labels zu kommen?

Beispiel: Ich klicke auf das label MyLabel[3] und lade die zahl 3 irgwie in nen label.


irgwie so in der art:

Delphi-Quelltext
1:
2:
3:
4:
procedure tmain.DoLabelClick(aSender: TObject);
Begin
  label1.caption:= inttostr(tlabel(aSender).???);
End;

hoffe ihr habt mein Problem verstanden.
danke schonmal.

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


Nersgatt - Mo 29.03.10 14:13

Delphi ist kein VB :D
Du bekommst mit dem Sender einen Verweis auf das entsprechende Label geliefert. Wenn Du die Indexzahl brauchst, musst Du das Element im Array suchen. Oder Du missbrauchst dafür z.B. die Tag-Eigenschaft und schreibst schon beim Erstellen der Labels den Index ins Tag. Dann kannst Du mit TLabel(Sender).Tag das ganze wieder auslesen.


gnomecoder - Mo 29.03.10 14:20

danke für die Antwort.
habs grad anders hinbekommen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure tmain.DoLabelClick(aSender: TObject);
Var
i, indexzahl  : integer;
Begin
  for i := 0 to anzahl - 1 do
  begin
    if tlabel(aSender) = labels[i] then
    indexzahl:= i;
  end;
  label1.caption := inttostr(indexzahl);
End;

nicht besonders elegant, aber funktioniert :D

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


Nersgatt - Mo 29.03.10 14:27

user profile icongnomecoder hat folgendes geschrieben Zum zitierten Posting springen:
danke für die Antwort.
habs grad anders hinbekommen:

Wieso "anders"? Ist doch genauso, wie ich es gesagt hatte...
Zitat:
Wenn Du die Indexzahl brauchst, musst Du das Element im Array suchen.


Wobei ich noch etwas verbessern würde. Wenn das erste Element im Array schon das ist, das Du suchst, vergleicht Deine Schleife einfach weiter die anderen Element. Ist doch gar nicht mehr nötig, Du hast doch schon gefunden, was Du suchst.
Mach es vielleicht so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var i, indexzahl  : integer;
Begin
  i := 0;
  Indexzahl := -1;
  while (i <= anzahl - 1and (Indexzahl < 0)
  begin
    if tlabel(aSender) = labels[i] then
      indexzahl:= i;
    inc(i);
  end;
  label1.caption := inttostr(indexzahl);
End;