[gelöst] with mit Variable verwenden

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
NoCee
Beiträge: 164
Registriert: Do 3. Mär 2011, 21:34
OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
CPU-Target: Intel 32/64Bit, ARM9
Wohnort: Ulm

[gelöst] with mit Variable verwenden

Beitrag von NoCee »

Hallo zusammen,

in meinem Projektchen habe ich 10 Stringgrids Grid1 bis Grid10 die alle identisch aussehen.
Diese werden in einer Procedure mit Daten befüllt.
Der Code ist für alle der gleiche. Die Auswahl welcher Grid verwendet werden soll,
bekomme ich über einen Integerwert.
Wie rufe ich jetzt das zum Integerwert zugehörige Grid auf?
Oder besser gesagt, wie kann ich mit einer Variablen ein Grid geben?
Ich dachte an so was wie mit "With"

Code: Alles auswählen

my_var:= Form1.Grid1
   with my_var do begin
      Entnahme.cells[1,1]:= .....;
      Entnahme.cells[2,1]:= .....;
      Entnahme.cells[3,1]:= .....;
      Entnahme.cells[4,1]:= .....;
    end; 
Was mir auch noch eingefallen wäre ist das Befüllen der Grids in eine eigene Procedure
zu packen und da das Grid als Parameter zu übergeben. Dafür hab ich was im Netz gefunden.
Ich wollte aber vermeiden noch eine Procedure extra mit reinzupacken.

Hat jemand einen Tipp für mich?

Vielen Dank schon mal im Vorraus
Grüße aus Ulm
NoCee
Zuletzt geändert von NoCee am Do 15. Jun 2023, 17:52, insgesamt 1-mal geändert.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2623
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: with mit Variable verwenden

Beitrag von m.fuchs »

NoCee hat geschrieben:
Mi 14. Jun 2023, 14:16
Wie rufe ich jetzt das zum Integerwert zugehörige Grid auf?
[...]
Was mir auch noch eingefallen wäre ist das Befüllen der Grids in eine eigene Procedure
zu packen und da das Grid als Parameter zu übergeben.
Genauso würde ich das machen.
NoCee hat geschrieben:
Mi 14. Jun 2023, 14:16
Ich wollte aber vermeiden noch eine Procedure extra mit reinzupacken.
Warum?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
theo
Beiträge: 10333
Registriert: Mo 11. Sep 2006, 19:01

Re: with mit Variable verwenden

Beitrag von theo »

NoCee hat geschrieben:
Mi 14. Jun 2023, 14:16
Wie rufe ich jetzt das zum Integerwert zugehörige Grid auf?

Code: Alles auswählen

var AComponent:TComponent;
  Idx:Integer;
begin
   Idx:=1;
   AComponent:=FindComponent('StringGrid'+IntToStr(Idx));
   If AComponent is TStringGrid then TStringGrid(AComponent).Cells[1,1]:='Test';
end; 

Warf
Beiträge: 1878
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: with mit Variable verwenden

Beitrag von Warf »

NoCee hat geschrieben:
Mi 14. Jun 2023, 14:16
zu packen und da das Grid als Parameter zu übergeben. Dafür hab ich was im Netz gefunden.
Ich wollte aber vermeiden noch eine Procedure extra mit reinzupacken.
Code in prozeduren auslagern ist grundsätzlich immer eine gute Idee. Als Faustregel wird gesagt das eine Funktion nicht mehr als 20 Zeilen lang sein sollte. Wobei allerdings hierbei nur "echte" zeilen gezählt werden, also echte statements. Der code den begin-end oder try-finally beisteuert wird dabei nicht mitgezählt (sonst wäre ein repeat-until einem while-begin-end ja immer vorzuziehen).

Code sollte sich wie ein Text lesen lassen, und Prozeduren helfen dabei. Wenn du eine Prozedur "FillGrid" aufrufst weist du ok, hier wird das grid befüllt. Wenn dich interessiert mit was das grid befüllt wird schaust du rein, aber wenn du nur den allgemeinen Ablauf betrachten willst, ist oftmals die Information das das Grid befüllt wird komplett ausreichend um zu verstehen was die funktion im allgemeinen macht.

NoCee
Beiträge: 164
Registriert: Do 3. Mär 2011, 21:34
OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
CPU-Target: Intel 32/64Bit, ARM9
Wohnort: Ulm

Re: [gelöst] with mit Variable verwenden

Beitrag von NoCee »

Vielen Dank für die Unterstützung.

Ich hab da selber auch noch eine Lösung gefunden.
Stammt aber nicht von mir sondern hab ich mal hier als Tipp
für was anderes bekommen. Hat aber eine Weile gedauert, bis mir das wieder eingefallen ist.
Mit dem Ehrgeiz das hinzubekommen hab ich das eingebaut und ist sogar relativ easy und übersichtlich.

Code: Alles auswählen

myGridlist: array[0..10] of TStringGrid; 

//in FormCreate dann meine 10 StringGrids übergeben
myGridlist[0]:= myStringList0;   
myGridlist[1]:= myStringList1;
myGridlist[2]:= myStringList2;
....

//und in meiner procedure mit x als Index aufgerufen
myGridlist[x].cells[0,5]:= inttostr(42);
Funktioniert prima.

vielen Dank für eure Antworten und Tipps
Gruß
NoCee

Mathias
Beiträge: 5929
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: [gelöst] with mit Variable verwenden

Beitrag von Mathias »

Code: Alles auswählen

myGridlist[0]:= myStringList0;
Mit der mystringList auch noch ein Array machen, und dann kannst du es mit einer for to Schleife lösen.

Code: Alles auswählen

myGridlist[i]:= myStringList[i]
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten