AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schreibarbeit sparen

Ein Thema von Alex.P · begonnen am 7. Okt 2009 · letzter Beitrag vom 8. Okt 2009
Antwort Antwort
Alex.P

Registriert seit: 7. Okt 2009
Ort: Ingolstadt
24 Beiträge
 
#1

Schreibarbeit sparen

  Alt 7. Okt 2009, 18:09
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: Schreibarbeit sparen

  Alt 7. Okt 2009, 18:27
Hallo und Willkommen in der DP ,
entweder Du verwaltest die Komponenten in einem Array/einer TObjectList oder Du verwendest Delphi-Referenz durchsuchenFindComponent().
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Schreibarbeit sparen

  Alt 7. Okt 2009, 18:27
Arrays?
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#4

Re: Schreibarbeit sparen

  Alt 8. Okt 2009, 11:28
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
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#5

Re: Schreibarbeit sparen

  Alt 8. Okt 2009, 11:33
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Alex.P

Registriert seit: 7. Okt 2009
Ort: Ingolstadt
24 Beiträge
 
#6

Re: Schreibarbeit sparen

  Alt 8. Okt 2009, 11:55
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?
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#7

Re: Schreibarbeit sparen

  Alt 8. Okt 2009, 12:02
Was willst Du denn machen?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Schreibarbeit sparen

  Alt 8. Okt 2009, 12:28
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
Heiko
  Mit Zitat antworten Zitat
Alex.P

Registriert seit: 7. Okt 2009
Ort: Ingolstadt
24 Beiträge
 
#9

Re: Schreibarbeit sparen

  Alt 8. Okt 2009, 14:37
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:16 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