Autor Beitrag
schnorchel
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 04.09.13 20:04 
Hallo,

ich muß ein mit Delphi 7 geschriebenes Programm nach Delphi XE4 portieren.

Problem: Unter D7 können bei PostMessage mittels des wParam-Parameters auch negative Werte übergeben werden, also etwa "PostMessage(Handle,WM_XXX,-100,0)". Unter XE4 dagegen bekomme ich für den negativen Wert beim Kompilieren die Fehlermeldung "subrange out of bounds".

Anscheinend sind jetzt nur noch nicht-negative Zahlen erlaubt. Bitte um erhellendes Wissen... Gibt es vielleicht eine Möglichkeit, dennoch negative Zahlen zu übergeben?
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Mi 04.09.13 21:31 
Integer zu Cardinal casten (geht ohne Probleme, da beides 4 Byte groß ist) und beim Empfänger wieder zurück von Cardinal zu Integer..
meineswissens dürfte das so funktionieren.. da gibt es aber nicht nur 4 Byte paare
Hier mal ein Paar Beispiele: Byte: Negative / Positive
1: ShortInt / Byte
2: SmallInt / Word
4: Integer / Cardinal
4: LongInt / LongWord
8: Int64 / UInt64

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Do 05.09.13 08:17 
user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
Integer zu Cardinal casten

Wieso nicht gleich zu wParam?
ausblenden Delphi-Quelltext
1:
PostMessage(SomeHandle, SomeMessage, wParam(-100), 0);					
schnorchel Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 05.09.13 11:51 
Danke für die Antworten, Casten funktioniert bestens.

Was ich eigentlich wissen wollte (und das kommt in meiner Anfrage nicht klar zum Ausdruck), war der Grund für das geschilderte andere Verhalten unter XE4. Wie ich inzwischen weiss, hat Embarcadero mit/ab XE2 die Definition von WPARM von INT_PTR auf UINT_PTR geändert, um der offiziellen Windows-API Definition "typedef UINT_PTR WPARAM" zu entsprechen und damit Problemen im 64-Bit-Bereich aus dem Wege zu gehen.