![]() |
Kontrolliertes Speichern bei dpCollection?
Hallo allerseits,
ich versuche grad ein Optionssystem mit Hilfe der dpCollection zu erstellen. Nun stehe ich vor dem Problem, dass ich um eine Option zu suchen, erstmal die Ganze Collection durchlaufen muesste. Wenn ich allerdings Konstanten fuer die Optionen erstelle, und die Optionswerte genau in der Reihenfolge hinzufuege, kann ich davon ausgehen dass die Werte in genau der Reihenfolge abgespeichert werden? Also folgendes Beispiel: ich fuege Wert1, Wert3, Wert2 der Collection hinzu und speicher das Ding. Wenn ich die Collection wieder aus der Datei lade, haben die Werte immer noch dieselbe Reihenfolge? In dem Fall koennte ich die Optionswerte naemlich mit Indexen ansprechen, was natuerlich geschickter (und schneller) waere. Ich hoffe jemand kann die Frage beantworten... Thanx and Greetz alcaeus |
Re: Kontrolliertes Speichern bei dpCollection?
Ganz ehrlich. Würde darauf verzichten feste Indizies zu vergeben. Musst nur mal einen Wert mittendrin einfügen und vergessen die Indizies zu aktualisieren. Schon triffst du auf Probleme, die du eventuell nur schwer nachvollziehen kannst.
Soll dieses Optionssystem Einstellungen für das Programm speichern? Wenn ja würde ich die Optionen am Programm start in Globale Variable oder ähnlichem lesen. Dann hast du mit der Performance keine Probleme. |
Re: Kontrolliertes Speichern bei dpCollection?
Zitat:
Greetz alcaeus |
Re: Kontrolliertes Speichern bei dpCollection?
Hallo alcaeus,
grundsätzlich kannst Du davon ausgehen das die Werte der Reihe nach gespeichert werden. Wenn Du die Collection im Textformat speicherst kannst Du das sehen. Aber ich verstehe Dein Problem nicht. Wenn jeder Wert ein Element der Collection ist dann ist jeder Wert ein TCollectionItem Nachfahre. Warum bündelst Du nicht die einzelnen Werte als properties eines einzigen TCollectionItem Nachfahren? |
Re: Kontrolliertes Speichern bei dpCollection?
Zitat:
Zitat:
Also die CollectionItems sind so
Delphi-Quellcode:
deklariert und haben folgende Properties:
TOptionsItem = class(TCollectionItem)
Delphi-Quellcode:
TOptionTypes ist deklariert als
property OptionName: String read FOptionName write FOptionName;
property OptionValue: String read FOptionValue write FOptionValue; property OptionType: TOptionTypes read FOptionType write FOptionType;
Delphi-Quellcode:
Alle Optionen werden als String gespeichert, und dann bei der Verwendung in den richtigen Type gecastet, allerdings bin ich mir im Moment nicht sicher, ob dies die optimale Methode ist. Vielleicht kann mir jemand ja einen Denkanstoss geben...
TOptionTypes = (otString, otBoolean, otInteger, otFloat);
Greetz alcaeus |
Re: Kontrolliertes Speichern bei dpCollection?
Hallo alcaeus,
was ein bißchen Code doch ausmacht. Jetzt habe ich Dich verstanden. Ich würde das mit dem Index vergessen und tatsächlich die Collection durchlaufen bis ich die richtige Option gefunden habe. Wenn Du nicht gerade 1000sende Optionen gespeichert hast dürfte man den Geschwindigkeitsnachteil nicht merken. Das casten dauert bestimmt länger. Dafür würde ich TJsCollection oder TmxJsCollection wie folgt erweitern.
Delphi-Quellcode:
Damit kannst Du die Option über den Optioname ansprechen
...
function GetOptionItem(aOptionname : String) : TOptionItem; ... property Option[aOptionname : String] TOptionsItem read GetOptionItem; ... function TJsCollection.GetOptionItem(aOptionname : String) : TOptionsItem; var iCnt : Integer; _Optionname : String; begin Result:=Nil; _Optionname:=AnsiUpperCae(aOptionname); For iCnt:=0 to Count-1 do begin // evt muss hier noch nach TOptionsItem gecastet werden If AnsiUpperCase(Items[iCnt].Optionname)=_Optionname then begin Result:=Items[iCnt]; Exit; end; end; end; |
Re: Kontrolliertes Speichern bei dpCollection?
Ok, danke, das werde ich mal versuchen :)
Greetz alcaeus |
Re: Kontrolliertes Speichern bei dpCollection?
So, ich habs jetzt auch ohne den Tipp geschafft. Ich biete zwei Methoden an: einmal zum Zugreifen ueber den Namen, einmal ueber den Index. Die Funktion die ueber den Namen zugreift holt sich den Index der Option, und verwendet dann die zweite Methode. Funktioniert praechtig, und auch nicht so langsam.
Danke fuer die Hilfe :) Greetz alcaeus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 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