Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi StringGrid Aufruf/Bezeichnung/Addressierung (https://www.delphipraxis.net/118870-stringgrid-aufruf-bezeichnung-addressierung.html)

Stecky2000 16. Aug 2008 20:51


StringGrid Aufruf/Bezeichnung/Addressierung
 
Hi Fans,

ich wusste ehrlich gesagt nicht, wie ich den Titel für diesen Thread wählen sollte.
Ich hoffe, Ihr kommt mit meiner Frage klar.

Also, ich habe mehrere Proceduren die Berechnungen durchführen und in StringGrids schreiben.
Die Sache ist halt die, dass der Code für die Berechnung recht umfangreich ist.

Wenn ich also ein Formular (Dienstplan) für eine bestimmte Abteilung öffne und verändere, werden Berechnungen in ein bestimmtes StringGrid geschrieben.

Beispiel:

ich bearbeite Formular für Dienststelle "1", die Berechnungen sollen in StringGrid1 geschrieben werden.
ich bearbeite Formular für Dienststelle "4", die Berechnungen sollen in StringGrid4 geschrieben werden.

Da die Berechnungen umfangreiche Formeln, Schleifen etc. haben, hätte ich mir einen Aufruf des Ziel-StringGrids á la
StringGrid[x].Cells..... gewünscht. Das scheint es aber nicht zu geben.
Kennt jemand von Euch eine andere Lösung die mich den gleichen Code statt mit 4 x mit Case, einmal mit so eine Art
StringGrid[x].Cells verwenden lässt. x soll natürlich die Variable sein die den Wert von 1 bis 4 enthalten kann für entsprechend eine der 4 Abteilungen/StringGrids.

Ich hoffe auf Eure Hilfe.

taaktaak 16. Aug 2008 21:36

Re: StringGrid Aufruf/Bezeichnung/Addressierung
 
Moin, Moin.
Gedanke: Für n Abteilungen rufst du deine Berechnungsprozedur n-mal auf und übergibst das jeweils gewünschte (Ziel-)grid als Parameter an die Berechnungsprozedur, dann landen die Ergebnisse optisch auch dort wo sie sollen.

Stecky2000 17. Aug 2008 08:08

Re: StringGrid Aufruf/Bezeichnung/Addressierung
 
Ich weis nicht, ob ich das richtig verstehe.......

Also nochmal von meiner Seite, wie es aussieht:

Ich habe für 4 Abteilungen, 4 StringGrids, die mittels PageControl einzeln angezeigt werden können.

Darüber habe ich ein Grid, welches die Werte der 4 Abteilungsgrids zu einem komprimierten Gesamtergebnis zusammen fasst.

Wenn ich einen Dienstplan von Abt 1 ändere, werden die Berechnungen in StringGrid1 erneuert, die anderen bleiben unangetastet.
Die Gesamtberechnung findet dann dennoch statt, weil sich ja die Inhalte von einem StringGrid geändert haben.

Die Berechnungen die in einem StringGrid 1 - 4 erfolgen, werden zum Teil in Schleifen aus mehreren StringGrids im Dienstplanformular errechnet und in das entsprechenden Ziel StringGrid geschrieben. Dort werden intern weitere Berechnungen durchgeführt und ebenfalls reingeschrieben.

Bisher habe ich nur einen Teil der Berechnung in StringGrid1 Programmiert.
Es wäre leicht, da das ganze auf Case 1 - 4 aufgebaut ist, den Code von Case 1 auch nacj Case 2, 3, 4 zu kopieren und dort die Zeilen: StringGrid1.Cells..... in StringGrid2.Cells..., StringGrid3.Cells etc. um zu benennen. Das erscrscheint mir aber "unsauber".

Deshalb die Suche nach einer Methode, das Zielobjekt, in diesem Fall "StringGrid[x]" an die Codezeile zu übergeben und somit für alle 4 Zielgrids nutzen zu können.

Lannes 17. Aug 2008 10:08

Re: StringGrid Aufruf/Bezeichnung/Addressierung
 
Hallo,

leg die Daten außerhalb der StringGrids ab, z.B. in ein dreidimensionales Array.
Delphi-Quellcode:
MyArr : Array [0..3{Abt},0..10{Cols},0..100{Rows}] of String;//oder Integer ?
dann kannst Du die Berechnungen/Summierungen als auch die Datenausgabe über den Index des Arrays realisieren.

Für die Datenanzeige nutzt Du dann nur ein Grid das jeweils auf der gewählten Registerkarte angezeigt wird, indem das Parent entsprechend gesetzt wird:
Delphi-Quellcode:
procedure TForm1.PageControlChange(Sender: TObject);
begin
//Daten berechnen, ins Array
StringGrid.Parent := PageControl.ActivePage;
//Daten ins Grid setzen
//z.B erste Abt., erste obere Zelle:
//StringGrid.Cells[c,r] := MyArr[PageControl.ActivePage.PageIndex,c,r];
//das natürlich in einer verschachtelten Schleife :-)
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:45 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