AGB  ·  Datenschutz  ·  Impressum  







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

TDictionary problem mit Types

Ein Thema von EWeiss · begonnen am 28. Mai 2018 · letzter Beitrag vom 29. Mai 2018
Antwort Antwort
Seite 1 von 2  1 2      
EWeiss
(Gast)

n/a Beiträge
 
#1

TDictionary problem mit Types

  Alt 28. Mai 2018, 23:15
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!
    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

Geändert von EWeiss (28. Mai 2018 um 23:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TDictionary problem mit Types

  Alt 28. Mai 2018, 23:31
TIconMap = TDictionary<TDeviceIcon, TIndex>; der Compiler will unbedingt TDeviceIcon, TIndex.
Ist das dann nicht der Fehler?
Gruß vom KodeZwerg

Geändert von KodeZwerg (28. Mai 2018 um 23:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: TDictionary problem mit Types

  Alt 29. Mai 2018, 01:56
TIconMap = TDictionary<TDeviceIcon, TIndex>; der Compiler will unbedingt TDeviceIcon, TIndex.
Ist das dann nicht der Fehler?
Genau, da hast du nur das 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;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: TDictionary problem mit Types

  Alt 29. Mai 2018, 02:03
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.

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

Geändert von EWeiss (29. Mai 2018 um 02:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: TDictionary problem mit Types

  Alt 29. Mai 2018, 02:18
Doch doch, du hast da grade einen Denkfehler. Dein Typ ist eben TIndex (mit T ). Und die Deklaration der Variable IconMap erfordert nun eben einen generischen Typ und keine konkrete (Variablen-)Instanz - in deinem Falle Index (ohne T ) - vom entsprechenden Typ (ist so bisschen wie der Vergleich Klasse vs. Objekt(instanz)). Weiter unten die Versuche mit IconMap.Add(DeviceIcon.Speakers, '0') sind korrekt und sollten auch funktionieren, wenn du die von mir oben beschriebenen Änderungen durchführst.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (29. Mai 2018 um 02:20 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: TDictionary problem mit Types

  Alt 29. Mai 2018, 02:23
Doch doch, du hast da grade einen Denkfehler. Dein Typ ist eben TIndex (mit T ). Und die Deklaration der Variable IconMap erfordert nun eben einen generischen Typ und keine konkrete (Variablen-)Instanz - in deinem Falle Index (ohne T ) - vom entsprechenden Typ (ist so bisschen wie der Vergleich Klasse vs. Objekt(instanz)). Weiter unten die Versuche mit 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
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: TDictionary problem mit Types

  Alt 29. Mai 2018, 02:26
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 TDictionary ist eine flache Map, deshalb darf jeder Key (also dein TDeviceIcon Wert) darin nur einmal vorkommen. Was du suchst ist eine TList<TPair<TDeviceIcon, TIndex>> . Oder alternativ natürlich auch TDictionary<TDeviceIcon, TArray/TList<TIndex>> . Wenn du eher wenige Einträge hast, nimm die Liste (ist einfacher).
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: TDictionary problem mit Types

  Alt 29. Mai 2018, 02:33
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

Geändert von EWeiss (29. Mai 2018 um 02:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: TDictionary problem mit Types

  Alt 29. Mai 2018, 02:49
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.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: TDictionary problem mit Types

  Alt 29. Mai 2018, 06:39
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

Geändert von EWeiss (29. Mai 2018 um 08:12 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:28 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