Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TDictionary problem mit Types (https://www.delphipraxis.net/196529-tdictionary-problem-mit-types.html)

EWeiss 28. Mai 2018 22:15


TDictionary problem mit Types
 
Die Types
Delphi-Quellcode:
  TDeviceIcon = (DesktopMicrophone, Digital, Headphones, Headset,
    Kinect, LineIn, Phone, Speakers, StereoMix, Monitor, Unknown);

  TIndex = string;
  TIconMap = TDictionary<TDeviceIcon, TIndex>;
Ich definiere die Procedure so.
Warum wird dann der Type DeviceIcon ignoriert bzw.. es wird ein Fehler gemeldet.

Delphi-Quellcode:
procedure TAudioVolume.Dictionary(Index: TIndex; DeviceIcon: TDeviceIcon);
var
  IconMap: TDictionary<DeviceIcon, Index>;
Nach meinem Verständnis sollte das eigentlich OK sein aber der Compiler will unbedingt TDeviceIcon, TIndex.

Das schlägt also fehl..

Delphi-Quellcode:
    IconMap := TDictionary<DeviceIcon, Index>.Create();
    IconMap.Add(DeviceIcon.Speakers, '0');
    IconMap.Add(DeviceIcon.Speakers, '1');
Auch das hier!
Delphi-Quellcode:
    IconMap.Add(DeviceIcon.Speakers, '1');


Aber ich brauche diesen Eintrag mehrmals..
Deshalb weil das Icon mehrmals in der Ressource vorhanden ist.

RESSOURCENNAME 3004
RESSOURCENNAME 3010
RESSOURCENNAME 3019
RESSOURCENNAME 3030
RESSOURCENNAME 3050

Ich muss jedem einzelnen den Type DeviceIcon.Speakers zuweisen.

gruss

KodeZwerg 28. Mai 2018 22:31

AW: TDictionary problem mit Types
 
Zitat:

Zitat von EWeiss (Beitrag 1403253)
Delphi-Quellcode:
TIconMap = TDictionary<TDeviceIcon, TIndex>;
der Compiler will unbedingt TDeviceIcon, TIndex.

Ist das dann nicht der Fehler?

Zacherl 29. Mai 2018 00:56

AW: TDictionary problem mit Types
 
Zitat:

Zitat von KodeZwerg (Beitrag 1403256)
Zitat:

Zitat von EWeiss (Beitrag 1403253)
Delphi-Quellcode:
TIconMap = TDictionary<TDeviceIcon, TIndex>;
der Compiler will unbedingt TDeviceIcon, TIndex.

Ist das dann nicht der Fehler?

Genau, da hast du nur das
Delphi-Quellcode:
T
vergessen.
Delphi-Quellcode:
procedure TAudioVolume.Dictionary(Index: TIndex; DeviceIcon: TDeviceIcon);
var
  IconMap: TDictionary<DeviceIcon, TIndex>; // <-- TIndex statt Index
bzw. da du dir ja schon einen Typ definiert hast, am besten:
Delphi-Quellcode:
procedure TAudioVolume.Dictionary(Index: TIndex; DeviceIcon: TDeviceIcon);
var
  IconMap: TIconMap;

EWeiss 29. Mai 2018 01:03

AW: TDictionary problem mit Types
 
Zitat:

Genau, da hast du nur das T vergessen.
Nein ich habe es nicht vergessen..
Denn Index ist als TIndex definiert.

Welchen sinn macht eine definition wenn sie nicht verwendet wird?
Das ist ja mein Problem und unverständlich für mich.

Delphi-Quellcode:
Index: TIndex;
in der Procedure.

Das müsste dann so aussehen
Delphi-Quellcode:
IconMap.Add(DeviceIcon.Speakers, '0');

IconMap.Add(DeviceIcon.Speakers, Index('0'));
Oder?

gruss

Zacherl 29. Mai 2018 01:18

AW: TDictionary problem mit Types
 
Doch doch, du hast da grade einen Denkfehler. Dein Typ ist eben
Delphi-Quellcode:
TIndex
(mit
Delphi-Quellcode:
T
). Und die Deklaration der Variable
Delphi-Quellcode:
IconMap
erfordert nun eben einen generischen Typ und keine konkrete (Variablen-)Instanz - in deinem Falle
Delphi-Quellcode:
Index
(ohne
Delphi-Quellcode:
T
) - vom entsprechenden Typ (ist so bisschen wie der Vergleich Klasse vs. Objekt(instanz)). Weiter unten die Versuche mit
Delphi-Quellcode:
IconMap.Add(DeviceIcon.Speakers, '0')
sind korrekt und sollten auch funktionieren, wenn du die von mir oben beschriebenen Änderungen durchführst.

EWeiss 29. Mai 2018 01:23

AW: TDictionary problem mit Types
 
Zitat:

Zitat von Zacherl (Beitrag 1403265)
Doch doch, du hast da grade einen Denkfehler. Dein Typ ist eben
Delphi-Quellcode:
TIndex
(mit
Delphi-Quellcode:
T
). Und die Deklaration der Variable
Delphi-Quellcode:
IconMap
erfordert nun eben einen generischen Typ und keine konkrete (Variablen-)Instanz - in deinem Falle
Delphi-Quellcode:
Index
(ohne
Delphi-Quellcode:
T
) - vom entsprechenden Typ (ist so bisschen wie der Vergleich Klasse vs. Objekt(instanz)). Weiter unten die Versuche mit
Delphi-Quellcode:
IconMap.Add(DeviceIcon.Speakers, '0')
sind korrekt und sollten auch funktionieren, wenn du die von mir oben beschriebenen Änderungen durchführst.

Ahh ok dann habe ich das verstanden..
Aber es kracht wenn ich zweimal den gleichen Aufruf verwende.

Delphi-Quellcode:
    IconMap.Add(DeviceIcon.Speakers, '0');
     IconMap.Add(DeviceIcon.Speakers, '1');
beim 2.ten

Hoffe mal nach der Änderung nicht mehr.
Und was mache ich dann mit dem TIndex?

irgendwie sinnlos.. Hmmm

gruss

Zacherl 29. Mai 2018 01:26

AW: TDictionary problem mit Types
 
Zitat:

Zitat von EWeiss (Beitrag 1403267)
Aber es kracht wenn ich zweimal den gleichen Aufruf verwende.

Delphi-Quellcode:
    IconMap.Add(DeviceIcon.Speakers, '0');
     IconMap.Add(DeviceIcon.Speakers, '1');
beim 2.ten

Hoffe mal nach der Änderung nicht mehr.

Doch, leider schon. Das
Delphi-Quellcode:
TDictionary
ist eine flache Map, deshalb darf jeder Key (also dein
Delphi-Quellcode:
TDeviceIcon
Wert) darin nur einmal vorkommen. Was du suchst ist eine
Delphi-Quellcode:
TList<TPair<TDeviceIcon, TIndex>>
. Oder alternativ natürlich auch
Delphi-Quellcode:
TDictionary<TDeviceIcon, TArray/TList<TIndex>>
. Wenn du eher wenige Einträge hast, nimm die Liste (ist einfacher).

EWeiss 29. Mai 2018 01:33

AW: TDictionary problem mit Types
 
Hmmm.. nicht so einfach der Kram mit Generics.. ;)
Werde es mal testen.
Vielleicht reicht auch eine ganz einfache TStringlist.

Ich glaube ich lasse es zu viel ärger. ;) DAnke.

gruss

KodeZwerg 29. Mai 2018 01:49

AW: TDictionary problem mit Types
 
Zitat:

Zitat von EWeiss (Beitrag 1403269)
Hmmm.. nicht so einfach der Kram mit Generics.. ;)

Da geb ich Dir Recht weswegen ich mehr als einmal meinen Ersten Post bearbeiten musste eh ichs halbwegs Verstand was daran Fehlerhaft sein könnte, bei mir war es nur eine Vermutung, schön das es jemand mit mehr skills bestätigen konnte.

EWeiss 29. Mai 2018 05:39

AW: TDictionary problem mit Types
 
Zitat:

Zitat von KodeZwerg (Beitrag 1403271)
Zitat:

Zitat von EWeiss (Beitrag 1403269)
Hmmm.. nicht so einfach der Kram mit Generics.. ;)

Da geb ich Dir Recht weswegen ich mehr als einmal meinen Ersten Post bearbeiten musste eh ichs halbwegs Verstand was daran Fehlerhaft sein könnte, bei mir war es nur eine Vermutung, schön das es jemand mit mehr skills bestätigen konnte.

Du must ja auch nicht auf jeden Beitrag antworten :)

Egal hat sich erledigt!
Habe es auf anderer weise geregelt und funktioniert nun alles.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 Uhr.
Seite 1 von 2  1 2      

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