![]() |
Warum funtioniert dieses abfrage nicht
Warum will es nicht ?
Delphi-Quellcode:
Die Meldung!
type
TSplashItems = (Background, LabelInfo); TSplashItemsTotal = array[TSplashItems] of Integer; for IntI := Low(TSplashItemsTotal) to High(TSplashItemsTotal) do TreeView.Items.AddChildObject(FNode, TSplashItems(IntI), pointer(StrToIntDef(TSplashItems(IntI), 0))); [Pascal Error] SkinManager.pas(164): E2010 Incompatible types: 'Integer' and 'TSplashItems' in dieser zeile
Code:
TSplashItemsTotal ist aber als Integer deklariert
for IntI := Low(TSplashItemsTotal) to High(TSplashItemsTotal) do
gruss Emil |
Re: Warum funtioniert dieses abfrage nicht
Weil das Array Elemente des Typs TSplashItems als Index hat. Somit liefert dir Low() Background und High() LabelInfo und damit muss ergo deine Laufvariable auch den Typ TSplashItems haben.
Und noch ein Hinweis: Schonmal gefragt warum alle Enumerations bei CodeGear immer einen Präfix haben? Finde es heraus und definiere dir nach deinem Typ TSplashItems noch einen weiteren:
Delphi-Quellcode:
Und dann schau dir mal den Ordinalwert von deinem Typ Background an oder greife mit eingeschalteter Bereichsprüfung auf dein Array Element Background zu...
type
TTestEnum = ( Whatever, Whatelse, Background ); |
Re: Warum funtioniert dieses abfrage nicht
Habs selbst gelößt und umdefiniert.. ;)
Delphi-Quellcode:
Ein Enum nutzt mir da gar nichts denn ich bracuhe die werte als string
var
TSplashItems : array[0..1] of string = ('Background', 'LabelInfo'); for IntI := Low(TSplashItems) to High(TSplashItems) do TreeView.Items.AddChildObject(FNode, TSplashItems[IntI], pointer(StrToIntDef(TSplashItems[IntI], 0))); das war der ganze sinn der sache. trotzdem danke.. gruss Emil |
Re: Warum funtioniert dieses abfrage nicht
Und nochmal für andere Suchende...
Delphi-Quellcode:
@EWeiss: Das befreit dich nicht von dem Rat dringend über die Präfixe bei den Aufzählungen nachzudenken!
type
TSplashType = ( stBackground, stLabelInfo ); var SplashItems: array[TSplashType] of string = ('Background', 'LabelInfo'); ... procedure TWhatever.AddIt; var lCounter: TSplashType; begin ... for lCounter := Low(SplashItems) to High(SplashItems) do TreeView.Items.AddChildObject(FNode, SplashItems[lCounter], pointer(Ord(lCounter))); end; Und es ist recht schlechter Stil eine Variable mit einem T vorne zu versehen. Das birgt Verwechslungsgefahr mit Klassen und Typendeklarationen. Und warum fügst du das Ergebnis von StrToIntDef() der Baumstruktur hinzu? Deine Strings sind alle nicht wandelbar, somit sollte der hinzugefügte Pointer immer NIL sein, bzw. der Integer 0. Da dies recht sinnlos erscheint, habe ich in dem Beispiel einfach den Ordinalwert des Typs dort mit angehangen. |
Re: Warum funtioniert dieses abfrage nicht
Zitat:
In dem Fall hätte ich eine doppelte definition von SplashItems oder ? Was macht oder soll die zusätzliche Type da bezwecken ? Ich frage deshalb da meine variante genauso funktioniert Mit der Namensgebung ok gebe ich dir recht ;) gruss Emil |
Re: Warum funtioniert dieses abfrage nicht
Nein, du hast keine doppelte Definitin. Der Typ wird einmal definiert (als enum) und es wqird eine globale Variable definiert, mit der du den enum in einen String wandeln kannst (könnte man auch in eine Funktion verpacken.)
Du kannst also mit dem enum schnell arbeiten und die Strings schön ausgeben (und ggf. später mal ändern oder lokalisieren) ;) |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
|
Re: Warum funtioniert dieses abfrage nicht
Zitat:
gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 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