AGB  ·  Datenschutz  ·  Impressum  







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

Variablen in Array packen? (erledigt)

Ein Thema von DieDolly · begonnen am 2. Jan 2024 · letzter Beitrag vom 3. Jan 2024
Antwort Antwort
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

Variablen in Array packen? (erledigt)

  Alt 2. Jan 2024, 18:56
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:
  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;
  ...
Daraus soll am Ende werden
     VST.Header.Columns[i].Position:= [variable-i-aus-array-X]; Einfach ein Array mit diesen Werten füllen funktioniert nicht. Die eigentlichen Variablen haben aussagekräftige Namen und werden woanderswo auch einzeln mal verwendet).
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.

Geändert von DieDolly ( 2. Jan 2024 um 20:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

AW: Variablen in Array packen?

  Alt 2. Jan 2024, 19:12
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).
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#3

AW: Variablen in Array packen?

  Alt 2. Jan 2024, 19:34
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.

Geändert von DieDolly ( 2. Jan 2024 um 20:18 Uhr)
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#4

AW: Variablen in Array packen? (erledigt)

  Alt 2. Jan 2024, 21:26
Aber grundsätzlich geht es darum: wie packt man Variablen in ein Array
Wenn ich richtig sehe, möchtest du die Eigenschaften der Columns eines VirtualTrees speichern/wiederherstellen. Einfach geht es mit einem mORMot DocVariant:
Delphi-Quellcode:
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;
Das Wiederherstellen lässt sich auf die gleiche Weise umsetzen.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.443 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Variablen in Array packen?

  Alt 3. Jan 2024, 08:51
... Es geht nicht anders ...
Doch.
Neben dem bisher vorgeschlagenen gibt es noch weitere Ideen.
Alles ist besser als zig mal "VST.Header.Columns[Column.Index]" zu schreiben.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#6

AW: Variablen in Array packen? (erledigt)

  Alt 3. Jan 2024, 13:37
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.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.443 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Variablen in Array packen? (erledigt)

  Alt 3. Jan 2024, 15:10
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#8

AW: Variablen in Array packen? (erledigt)

  Alt 3. Jan 2024, 15:59
Dafür nun mit ein paar Goto?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#9

AW: Variablen in Array packen? (erledigt)

  Alt 3. Jan 2024, 16:02
Natürlich nicht.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch
Online

Registriert seit: 11. Aug 2012
Ort: Essen
1.604 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Variablen in Array packen? (erledigt)

  Alt 3. Jan 2024, 19:01
Dafür nun mit ein paar Goto?
LOL!
Thomas Mueller
  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 13:58 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