Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Performante Lösung gesucht (Labels füllen)! (https://www.delphipraxis.net/77786-performante-loesung-gesucht-labels-fuellen.html)

Grolle 24. Sep 2006 22:35


Performante Lösung gesucht (Labels füllen)!
 
Hi,
folgender Code soll mit ca. 25 Labels ausgeführt werden:
Delphi-Quellcode:
var
s1, s2 ...... : string;
begin
  s1 := Form1.Label1.Caption;
  Label51.Caption := ' 1 - ' + StringReplace(s1,':','',[rfReplaceAll]);
  s2 := Form1.Label2.Caption;
  Label52.Caption := ' 2 - ' + StringReplace(s2,':','',[rfReplaceAll]);
  .................
end;
Gibts dafür eine performantere Lösung? Ich wüsste im Moment nicht wie.
Viele Grüße...

mkinzler 24. Sep 2006 22:43

Re: Performante Lösung gesucht (Labels füllen)!
 
Die Antwort heißt wieder mal .FindComponent/.FindControl.

tn249 24. Sep 2006 22:51

Re: Performante Lösung gesucht (Labels füllen)!
 
oder du fügst die labels in eine liste oder einen array ein und lässt dann die elemente durchlaufen

Gruß
tn249

Sunlight7 24. Sep 2006 22:57

Re: Performante Lösung gesucht (Labels füllen)!
 
Wenn ich Dich richtig verstanden habe, ginge es so.
Dazu mußt Du jedem Label den Tag als ID setzen.
Label1.Tag=1
...
Label51.Tag=51

Oder die Funktion umschreiben und die Zahl des Labelnamens als ID verwenden.

Delphi-Quellcode:
...
   var i:Integer;
       lbl:TLabel;
begin
   For i:=0 to ComponentCount-1 do
      if Components[i] is TLabel then
         if TLabel(Components[i]).Tag<=25 then begin
            lbl:=FindLabelPerTag(TLabel(Components[i]).Tag+50);
            If lbl<>nil then
               TLabel(Components[i]).Caption:=IntToStr(lbl.Tag)+'...';
         end;
...

function TForm1.FindLabelPerTag(const Tag:Integer):TLabel;
   var i:Integer;
begin
   Result:=nil;

   For i:=0 to ComponentCount-1 do
      if Components[i] is TLabel then
         if TLabel(Components[i]).Tag=Tag then begin
            Result:=TLabel(Components[i]);
            Exit;
         end;
end;

MuTzE 24. Sep 2006 23:23

Re: Performante Lösung gesucht (Labels füllen)!
 
Es ist nur sehr schwer zu erkennen, was du vor hast. Also frag ich mal, ob ich es so richtig verstanden habe :?:


Delphi-Quellcode:
var
 I: Integer;
 aString: String;
begin
 for I := 0 to ComponentCount -1 do
  begin
   if Components[I] is TLabel then
    begin
     aString := IntToStr(I + 1) + ' - ' + StringReplace((Components[I] as TLabel).Caption,':','',[rfReplaceAll]);
     (Components[I] as TLabel).Caption := aString;
    end;
  end;
end;

Grolle 24. Sep 2006 23:50

Re: Performante Lösung gesucht (Labels füllen)!
 
Hi,
ich versuchs nochmal. Bin gerade mit FindComponent am basteln, aber ich bekomms irgendwie nicht hin:

Ich will die Label1-14.Caption von Form1 einlesen. In Form2 soll dann damit die Label51-64.Caption eingefügt werden. Außerdem sollen auf den Labels der Form2 ein Zähler hinzugefügt werden und der Doppelpunkt ersetzt werden:
Delphi-Quellcode:
Form2.Label51.Caption := ' 1 - ' + StringReplace(Form1.Label1.Caption,':','',[rfReplaceAll]);
Form2.Label52.Caption := ' 2 - ' + StringReplace(Form1.Label2.Caption,':','',[rfReplaceAll]);
Form2.Label53.Caption := ' 3 - ' + StringReplace(Form1.Label3.Caption,':','',[rfReplaceAll]);
........
Form2.Label64.Caption := '14 - ' + StringReplace(Form1.Label14.Caption,':','',[rfReplaceAll]);
// Edit: das ganze dann nochmal mit Form1.Label17-24 ...
Viele Grüße...

alzaimar 25. Sep 2006 08:04

Re: Performante Lösung gesucht (Labels füllen)!
 
Delphi-Quellcode:
Var
  lb,lb10 : TLabel;
  s : String;
  i : Integer;

Begin
  For i:=1 to 14 do begin
    lb := FindComponent (Format('Label%d',[i])) as TLabel;
    lb10 := FindComponent (Format('Label%d',[50+i])) as TLabel;
    s := StringReplace(lb.Caption,':','',[rfReplaceAll]);
    lb10.caption := Format('%d - %s',[i,s]);
  End;
End;
Nachteil: Wenn Jemand die Komponente umbenennt, klappt das nicht mehr.

marabu 25. Sep 2006 08:31

Re: Performante Lösung gesucht (Labels füllen)!
 
Hallo Stefan,

alles, was ich aus diesem thread über dein Problem weiß, deutet auf ein suboptimales Design hin. S läuft auch alles darauf hinaus eine "schlechte" Idee möglichst "gut" umzusetzen. Kannst du nicht ein wenig mehr über die Hintergründe deiner Design-Idee mitteilen? Wir alle könnten dann vielleicht nach einem ganz anderen Ansatz suchen, der vielleicht noch eleganter umgesetzt werden kann.

Freundliche Grüße vom marabu

Grolle 25. Sep 2006 20:08

Re: Performante Lösung gesucht (Labels füllen)!
 
Hallo Marabu,
also ich möchte folgendes erreichen: Meine Anwendung ist mehrsprachig(prof. Adressverwaltung). Der Anwender hat die Möglichkeit die Felder, die er exportieren (csv, xml, xls....) möchte selber zu wählen. Dazu muss er in einem Editfeld in den Einstellungen (Form2) bestimmte Zahlen angeben [1,2,3,4,5,6........24]. Diese bezeichnen dann die zu exportierenden Felder der Datenbank. Zur Hilfe sind darunter Labels mit der Bedeutung der einzelnen Ziffern. Je nach Sprache soll dann folgendes dort stehen:
1 - Firma
2 - Name
3 - Vorname
......
oder (je nach Sprache)
1 - Company
2 - Last Name
3 - First Name
......
Wenn es noch nicht klar ist, poste ich noch nen Screenshot.
Viele Grüße....

Green 25. Sep 2006 20:10

Re: Performante Lösung gesucht (Labels füllen)!
 
ja, screenshot wär nich schlecht


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz