AGB  ·  Datenschutz  ·  Impressum  







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

Warum funtioniert dieses abfrage nicht

Ein Thema von EWeiss · begonnen am 5. Sep 2008 · letzter Beitrag vom 5. Sep 2008
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Warum funtioniert dieses abfrage nicht

  Alt 5. Sep 2008, 20:55
Warum will es nicht ?

Delphi-Quellcode:
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)));
Die Meldung!
[Pascal Error] SkinManager.pas(164): E2010 Incompatible types: 'Integer' and 'TSplashItems'
in dieser zeile
Code:
for IntI := Low(TSplashItemsTotal) to High(TSplashItemsTotal) do
TSplashItemsTotal ist aber als Integer deklariert

gruss Emil
  Mit Zitat antworten Zitat
Roachford
(Gast)

n/a Beiträge
 
#2

Re: Warum funtioniert dieses abfrage nicht

  Alt 5. Sep 2008, 21:10
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:
type
  TTestEnum = ( Whatever, Whatelse, Background );
Und dann schau dir mal den Ordinalwert von deinem Typ Background an oder greife mit eingeschalteter Bereichsprüfung auf dein Array Element Background zu...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: Warum funtioniert dieses abfrage nicht

  Alt 5. Sep 2008, 21:15
Habs selbst gelößt und umdefiniert..

Delphi-Quellcode:
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)));
Ein Enum nutzt mir da gar nichts denn ich bracuhe die werte als string
das war der ganze sinn der sache.

trotzdem danke..

gruss Emil
  Mit Zitat antworten Zitat
Roachford
(Gast)

n/a Beiträge
 
#4

Re: Warum funtioniert dieses abfrage nicht

  Alt 5. Sep 2008, 21:23
Und nochmal für andere Suchende...

Delphi-Quellcode:
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;
@EWeiss: Das befreit dich nicht von dem Rat dringend über die Präfixe bei den Aufzählungen nachzudenken!

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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

Re: Warum funtioniert dieses abfrage nicht

  Alt 5. Sep 2008, 21:30
Zitat von Roachford:
Und nochmal für andere Suchende...

Delphi-Quellcode:
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;
@EWeiss: Das befreit dich nicht von dem Rat dringend über die Präfixe bei den Aufzählungen nachzudenken!

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.
Danke für die Info!

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
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: Warum funtioniert dieses abfrage nicht

  Alt 5. Sep 2008, 21:32
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)
  Mit Zitat antworten Zitat
5. Sep 2008, 21:45
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
EWeiss
(Gast)

n/a Beiträge
 
#8

Re: Warum funtioniert dieses abfrage nicht

  Alt 5. Sep 2008, 21:50
Zitat von jfheins:
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)
ahh habs verstanden danke schön..

gruss Emil
  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 14:51 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 by Thomas Breitkreuz