![]() |
Variablen in Array packen? (erledigt)
Es wurden mehrere Variablen vom Typ Integer und String irgendwo deklariert.
Leider brauche ich diese an mehreren Stellen und es geht einfach nicht anders als mit einem case-of darauf (an mehreren Stellen) zuzugreifen, Werte zu lesen und zu schreiben. Demnach gibt es mehrere case-of. Bei Änderungen im Code müssen die immer alle angepasst werden. Das soll weg. Damit das alles weniger und besser lesbarer Code wird, würde ich gerne diese Integer- und String-Variablen in ein Array packen. Im Kopf bin ich das alles schon durchgegangen und der Code wird danach insgesamt weniger und besser. Nur die geht man sowas an? Ich weiß nicht, ob mein Text verständlich ist. Aber grundsätzlich geht es darum: wie packt man Variablen in ein Array Hier ein Beispiel
Delphi-Quellcode:
case Column.Index of
1: VST.Header.Columns[Column.Index].Width := Variable1; 2: VST.Header.Columns[Column.Index].Width := Variable2; 3: VST.Header.Columns[Column.Index].Width := Variable3; ...
Delphi-Quellcode:
Daraus soll am Ende werden
case Column.Index of
1: VST.Header.Columns[Column.Index].Position:= Variable1_1; 2: VST.Header.Columns[Column.Index].Position:= Variable2_2; 3: VST.Header.Columns[Column.Index].Position:= Variable3_3; ...
Delphi-Quellcode:
Einfach ein Array mit diesen Werten füllen funktioniert nicht. Die eigentlichen Variablen haben aussagekräftige Namen und werden woanderswo auch einzeln mal verwendet).
VST.Header.Columns[i].Position:= [variable-i-aus-array-X];
Kann man vielleicht in einer Datenstruktur ein Property (array) deklarieren, welches dann, jenachdem auf welchen Index man zugreift, den Wert dieser Variable zurückgibt? Das impliziert, dass man wieder eion case-of braucht. Aber nur eines und nicht 4. |
AW: Variablen in Array packen?
Warum geht ein Array nicht?
Anstatt namentlicher Vrariablen einfach namentliche Konstanten mit dem jeweiligen Array-Index. Oder ein Assoziatives Array (Dictionary) und Konstanten mit dem jeweiligen Namen, und dazu noch ein Übersetungsarray mit Name zu Index (bzw. andersrum). |
AW: Variablen in Array packen?
Ich habe mir alles nochmal angeguckt. Es ist besser ich lasse alles so wie es ist. Es geht nicht anders denn sonst würde ich denselben Code nur an eine andere Stelle packen.
Es gibt 2 case-of in welchen Width und Position in die Variablen geschrieben werden und es gibt 2 case-of welche die aktuellen Werte zurück in die Variablen schreiben. Ein TDictionary<string, string> wäre vielleicht eine Idee, mal gucken. |
AW: Variablen in Array packen? (erledigt)
Zitat:
![]()
Delphi-Quellcode:
Das Wiederherstellen lässt sich auf die gleiche Weise umsetzen.
uses
VirtualTrees, VirtualTrees.Types, mormot.core.base, mormot.core.json, mormot.core.variants; type TViewManager = class(TObject) strict private const COLUMN_VALUENAME_INDEX = 'idx'; COLUMN_VALUENAME_WIDTH = 'wth'; COLUMN_VALUENAME_POSITION = 'pos'; COLUMN_VALUENAME_VISIBLE = 'vis'; public class function SaveListViewColumnsToJson(pmTreeList: TCustomVirtualStringTree): RawJson; end; type TCustomVirtualStringTreeAccess = class(TCustomVirtualStringTree); class function TViewManager.SaveListViewColumnsToJson(pmTreeList: TCustomVirtualStringTree): RawJson; var header: TVTHeader; column: TVirtualTreeColumn; columnValues: TDocVariantData; begin Assert(pmTreeList <> Nil); columnValues.InitFast(dvArray); header := TCustomVirtualStringTreeAccess(pmTreeList).Header; for var columnIdx: Integer := 0 to header.Columns.Count - 1 do begin column := header.Columns[columnIdx]; if (coResizable in column.Options) and (column.Width > 0) then begin columnValues.AddObject([ COLUMN_VALUENAME_INDEX, columnIdx, COLUMN_VALUENAME_WIDTH, column.Width, COLUMN_VALUENAME_POSITION, column.Position, COLUMN_VALUENAME_VISIBLE, (coVisible in column.Options)]); end; end; Result := columnValues.ToJson; end; Bis bald... Thomas |
AW: Variablen in Array packen?
Zitat:
Neben dem bisher vorgeschlagenen gibt es noch weitere Ideen. Alles ist besser als zig mal "VST.Header.Columns[Column.Index]" zu schreiben. |
AW: Variablen in Array packen? (erledigt)
Ich habe in den letzten Stunden alles angepasst. Ich habe nicht direkt den Vorschlag von mytbo übernommen, aber ich habe mich davon inspirieren lassen und es an meinen Code allgemein angepasst.
Das Resultat ist, dass es nicht ein einziges case-of mehr gibt. |
AW: Variablen in Array packen? (erledigt)
:thumb:
|
AW: Variablen in Array packen? (erledigt)
Dafür nun mit ein paar Goto? :snowball:
|
AW: Variablen in Array packen? (erledigt)
Natürlich nicht.
|
AW: Variablen in Array packen? (erledigt)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:30 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-2025 by Thomas Breitkreuz