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
Narses: 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; 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
Narses: 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
Narses: Code- durch Delphi-Tags ersetzt
Nersgatt - Mo 29.03.10 14:27
gnomecoder hat folgendes geschrieben : |
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 - 1) and (Indexzahl < 0) begin if tlabel(aSender) = labels[i] then indexzahl:= i; inc(i); end; label1.caption := inttostr(indexzahl); End; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!