![]() |
Schreibarbeit sparen
Hallo,
gibt es bei Delphi eine Möglichkeit sich Schreibarbeit zu sparen in dem man Variablen irgendwie durchzählt und in Schleifen abarbeitet? Ich habe einen Code in dem für mehrere Threads und Instanzen immer das gleiche gemacht werden muss allerdings mit eigenen Variablen. Im Augenblick sieht das noch in etwa so aus:
Delphi-Quellcode:
Jeder Instanz wird eine eigene Datei zugewiesen, ein eigener Thread, viele Labels, usw, usw.
Port1 := TConnectionPortClass.Create; Port1.PortNr := 1;
Port2 := TConnectionPortClass.Create; Port2.PortNr := 2; Port3 := TConnectionPortClass.Create; Port3.PortNr := 3; Port4 := TConnectionPortClass.Create; Port4.PortNr := 4; ... ... ... if Port.PortNr = 1 then MainForm.Label3Port1.Caption := Text1; if Port.PortNr = 2 then MainForm.Label3Port2.Caption := Text1; if Port.PortNr = 3 then MainForm.Label3Port3.Caption := Text1; if Port.PortNr = 4 then MainForm.Label3Port4.Caption := Text1; ... ... ... Dadurch bläht sich der Code bei mir extrem auf und wird unübersichtlich. Greetz Alex |
Re: Schreibarbeit sparen
Hallo und Willkommen in der DP :dp:,
entweder Du verwaltest die Komponenten in einem Array/einer TObjectList oder Du verwendest ![]() |
Re: Schreibarbeit sparen
Arrays?
|
Re: Schreibarbeit sparen
Du könntest Sie zur Laufzeit erstellen:
Delphi-Quellcode:
Eine andere Möglichkeit wäre diese:
var
MyLabels: Array [1..4] of TLabel; i: integer; Begin for i:=1 to 4 do Begin MyLabels[i]:=TLabel.Create(MainForm); MyLabels[i].parent... MyLabels[i].top... MyLabels[i].left... End; MyLabels[Port.PortNr].Laption := Text1; End;
Delphi-Quellcode:
Gruß
var
MyLabels: Array [1..4] of TLabel; Begin MyLabels[1]:=MainForm.Label3Port1; MyLabels[2]:=MainForm.Label3Port2; MyLabels[3]:=MainForm.Label3Port3; MyLabels[4]:=MainForm.Label3Port4; MyLabels[Port.PortNr].Laption := Text1; End; BBB |
Re: Schreibarbeit sparen
Eine auch funktionierende Kombination aus beidem wäre, alle Komponenten in einer Schleife zu durchlaufen. Die Nummer des Ports (1-4) verpasst Du dem Label im Objektinspektor in dem Property 'Tag'. Dann kannst Du einfach dem Label[x] das gefundene Label mit dem Tag x zuweisen und hast keine festen Codierungen im Code - und erst recht keine zigfach kopierten Zeilen.
|
Re: Schreibarbeit sparen
Hallo,
danke für die schnellen Antworten. Die zweite Version mit Arrays scheint mir dir schnellste Methode. Ich werde das gleich mal ausprobieren. Funktioniert das ganze auch mit Instanzvariablen? |
Re: Schreibarbeit sparen
Was willst Du denn machen?
|
Re: Schreibarbeit sparen
Hallo,
erzeuge aus deinen "vielen" Variablen eine (Hüll-)Klasse. Schreibe dort den Label-Setz-Code rein. Etwa so
Delphi-Quellcode:
type
TCoverClass = class PortNr: Integer; PortLabel: array[1..X] of TLabel end; procedure TCoverClass.SetLabel; begin PortLabel[PortNr]:= 'bla'; // nur ein Bsp, es muss natürlich Synchronize benutzt werden !!! end; // Thread 1 (Port 1) var CoverClass: TCoverClass; begin CoverClass:= TCoverClass.Create; CoverClass.PortNr:= 1; PortLabel[1]:= MainForm.Label1Port1; PortLabel[2]:= MainForm.Label1Port2; usw ... // Thread 3 (Port 3) var CoverClass: TCoverClass; begin CoverClass:= TCoverClass.Create; CoverClass.PortNr:= 3; PortLabel[1]:= MainForm.Label3Port1; PortLabel[2]:= MainForm.Label3Port2; usw ... Heiko |
Re: Schreibarbeit sparen
Funktioniert super.
Array[edel] Habe so gerade 3 Seiten Code auf 5 Zeilen zusammenfassen können. Ausserdem spare ich mir etliche Übergaben von kompletten Klassen an meine Prozeduren. In den Threads ändere ich (noch) keine Labels. Mercy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 Uhr. |
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