Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Schreibarbeit sparen (https://www.delphipraxis.net/141353-schreibarbeit-sparen.html)

Alex.P 7. Okt 2009 17:09


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:
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;
...
...
...
Jeder Instanz wird eine eigene Datei zugewiesen, ein eigener Thread, viele Labels, usw, usw.
Dadurch bläht sich der Code bei mir extrem auf und wird unübersichtlich.

Greetz
Alex

DeddyH 7. Okt 2009 17:27

Re: Schreibarbeit sparen
 
Hallo und Willkommen in der DP :dp:,
entweder Du verwaltest die Komponenten in einem Array/einer TObjectList oder Du verwendest Delphi-Referenz durchsuchenFindComponent().

Namenloser 7. Okt 2009 17:27

Re: Schreibarbeit sparen
 
Arrays?

Bomberbb 8. Okt 2009 10:28

Re: Schreibarbeit sparen
 
Du könntest Sie zur Laufzeit erstellen:
Delphi-Quellcode:
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;
Eine andere Möglichkeit wäre diese:
Delphi-Quellcode:
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;
Gruß

BBB

Phoenix 8. Okt 2009 10:33

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.

Alex.P 8. Okt 2009 10:55

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?

Bomberbb 8. Okt 2009 11:02

Re: Schreibarbeit sparen
 
Was willst Du denn machen?

hoika 8. Okt 2009 11:28

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

Alex.P 8. Okt 2009 13:37

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 14:38 Uhr.

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