AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Constant expression expected

Constant expression expected

Ein Thema von EWeiss · begonnen am 17. Mai 2019 · letzter Beitrag vom 18. Mai 2019
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Constant expression expected

  Alt 17. Mai 2019, 18:55
Mein Problem ist folgendes

Ich schicke von außen also aus der Anwendung eine ID für meine Combobox.

Innerhalb der DLL möchte ich diese nun in einer Case Anweisung auswerten.
Nun kommt oben genannter Fehler!

Wie kann ich diese trotzdem als Constante übergeben ?

In der Anwendung..
  ID_COLORPICK = WM_APP + 119; // ColorPicker auf TAB 1
Delphi-Quellcode:
    HCombo := CreateWindowEx(0, 'COMBOBOX', PWideChar(ColorLabel), LStyle,
      Width - 24, 0, 1, 152, FHColorPicker, DlgItemID, SkinEngine.skInstance,
      nil);
DlgItemID ist dann die Constante.. Die will die Case Anweisung aber nicht!

gruss
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Constant expression expected

  Alt 17. Mai 2019, 21:50
Hallo,
die Konstante wird ja durch die Übergabe als Variable ja zu eben dieser,
also zu einer Variable.

Es klappt also nur
if statt case.
Heiko
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Constant expression expected

  Alt 17. Mai 2019, 21:56
Hallo,
die Konstante wird ja durch die Übergabe als Variable ja zu eben dieser,
also zu einer Variable.

Es klappt also nur
if statt case.
Ok Danke dann muss ich wohl IF nutzen..

gruss
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
711 Beiträge
 
Delphi 12 Athens
 
#4

AW: Constant expression expected

  Alt 17. Mai 2019, 22:20
Mein Problem ist folgendes

Ich schicke von außen also aus der Anwendung eine ID für meine Combobox.

Innerhalb der DLL möchte ich diese nun in einer Case Anweisung auswerten.
Nun kommt oben genannter Fehler!

Wie kann ich diese trotzdem als Constante übergeben ?

In der Anwendung..
  ID_COLORPICK = WM_APP + 119; // ColorPicker auf TAB 1
Delphi-Quellcode:
    HCombo := CreateWindowEx(0, 'COMBOBOX', PWideChar(ColorLabel), LStyle,
      Width - 24, 0, 1, 152, FHColorPicker, DlgItemID, SkinEngine.skInstance,
      nil);
DlgItemID ist dann die Constante.. Die will die Case Anweisung aber nicht!

gruss
Dann hast Du das falsch aufgesetzt. ein

Delphi-Quellcode:
  case DlgItemID of
    ID_COLORPICK: ....
  end;
funktioniert auf jeden Fall. Falls Du versucht haben solltest, DlgItemID als einen der Selektoren zu verwenden brauchst Du definitiv mehr Schlaf, das wäre ein übler neuronaler Kurzschluß .
Peter Below
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Constant expression expected

  Alt 17. Mai 2019, 22:23
case DlgItemID of funktioniert nicht!
DlgItemID wird aus der Anwendung an die DLL geschickt und dann wird aus DlgItemID eine Variable.
So wie @hoika schon sagte.

so geht's.

property DlgItemID: Integer read GetDlgItemID write SetDlgItemID;
Delphi-Quellcode:
              if (PDis^.CtlID = DWORD(SkinColorPicker.DlgItemID)) then
                  begin
                    case PDis^.itemAction of

                      ODA_DRAWENTIRE:
                        begin
                          if (PDis.itemAction and ODA_DRAWENTIRE) = ODA_DRAWENTIRE then
                          begin
so war es vorher
Delphi-Quellcode:
              case PDis^.CtlID of
                SkinColorPicker.DlgItemID: // error weil Variable Constant expression expected
                  begin
                    case PDis^.itemAction of

                      ODA_DRAWENTIRE:
                        begin
                          if (PDis.itemAction and ODA_DRAWENTIRE) = ODA_DRAWENTIRE then
                          begin
gruss

Geändert von EWeiss (17. Mai 2019 um 22:37 Uhr)
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
711 Beiträge
 
Delphi 12 Athens
 
#6

AW: Constant expression expected

  Alt 17. Mai 2019, 22:30
case DlgItemID of funktioniert nicht!
DlgItemID wird aus der Anwendung an die DLL geschickt und dann wird aus DlgItemID eine Variable.

gruss
Das spielt keine Rolle, solange die Variable ein ordinal type ist. Das Case-Statement will nur in den einzelnen case-Werten Konstanten haben, der Wert, der ausgewertet werden soll kann aus einer Variablen kommen. Aber es muß halt eine Variable von einem Typ sein, auf den die Ord-Funktion angewendet werden kann (also Boolean, enumerated type, ganze Zahlen).
Peter Below
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Constant expression expected

  Alt 17. Mai 2019, 22:33
case DlgItemID of funktioniert nicht!
DlgItemID wird aus der Anwendung an die DLL geschickt und dann wird aus DlgItemID eine Variable.

gruss
Das spielt keine Rolle, solange die Variable ein ordinal type ist. Das Case-Statement will nur in den einzelnen case-Werten Konstanten haben, der Wert, der ausgewertet werden soll kann aus einer Variablen kommen. Aber es muß halt eine Variable von einem Typ sein, auf den die Ord-Funktion angewendet werden kann (also Boolean, enumerated type, ganze Zahlen).
Siehe mein Edit..

Und wie schon gesagt die DLL kennt die Konstante ID_COLORPICK: nicht!
Die wird in der Anwendung erstellt.

Und DlgItemID = ID_COLORPICK wird zur DLL geschickt.

gruss

Geändert von EWeiss (17. Mai 2019 um 22:38 Uhr)
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
711 Beiträge
 
Delphi 12 Athens
 
#8

AW: Constant expression expected

  Alt 18. Mai 2019, 10:48
case DlgItemID of funktioniert nicht!
DlgItemID wird aus der Anwendung an die DLL geschickt und dann wird aus DlgItemID eine Variable.

gruss
Das spielt keine Rolle, solange die Variable ein ordinal type ist. Das Case-Statement will nur in den einzelnen case-Werten Konstanten haben, der Wert, der ausgewertet werden soll kann aus einer Variablen kommen. Aber es muß halt eine Variable von einem Typ sein, auf den die Ord-Funktion angewendet werden kann (also Boolean, enumerated type, ganze Zahlen).
Siehe mein Edit..

Und wie schon gesagt die DLL kennt die Konstante ID_COLORPICK: nicht!
Die wird in der Anwendung erstellt.

Und DlgItemID = ID_COLORPICK wird zur DLL geschickt.

gruss
Wenn die DLL nicht weis, was die Inhalte von DlgItemID bedeuten, was soll sie dann damit anfangen? Du hast da einen Fehler im Design. Normalerweise macht man das so, dass man eine Unit erstellt, die in ihrem Interface-Teil die Konstanten und eventuell Typen (z. B. enumerated type) deklariert, die sowohl die DLL als auch die Hostapplikation kennen müssen. Diese Unit benutzt man dann in beiden Projekten.
Peter Below
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:32 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