theo hat geschrieben: Mi 26. Nov 2025, 21:03
Dein Zitat sagt es ja:
"da man den hohen Aufwand einer Änderung für diese
selten verwendete Funktionalität scheut."
Manchmal muss man etwas halt auf andere Weise lösen für Multi-Plattform.
Und manchmal muss man etwas Kontrolle abgeben und sich mit einem Kompromiss anfreunden..
So ist das halt.
Wenn man x-platform von Anfang an im Blick hat, geht es oft recht problemlos.
Aber eine Ausgangslage mit viel Winapi-zentrischem Code, kann schon etwas Kopfzerbrechen bereiten.
Ich würde mal eher sagen, die haben keinen Bock, das umzusetzen.
Über die Motivation, das nicht umzusetzen für Linux, mag ich nicht spekulieren.
Die entsprechenen Threads, in denen das mal - und bestimmt heiß - diskutiert wurde, kenne ich auch nicht.
".. on a 64 bit platform these make no sense" ist
meiner Meinung nach völlig falsch.
Wenn man im Auge behält, daß die LCL / Lazarus immer noch Dephi- und damit Windows-Gene trägt.
Es wäre mit {$ifdef cpu64}.. "Füll-bytes" {$endif} ohne weiteres möglich,
die alten Windows-Like Definitionen WParamHi, WParamLo etc.
für die Unix-Plattform zur Verfügung zu stellen.
Niemand wäre oder würde gezwungen, diese Definitionen unter Linux zu nutzen.
Code: Alles auswählen
{$ifndef windows}
TLMessage = record
Msg : Cardinal;
{$ifdef cpu64}
UnusedMsg: Cardinal;
{$endif}
case Integer of
0 : (
WParam: LclType.WPARAM;
LParam: LclType.LPARAM;
Result: LclType.LRESULT);
{$IFNDEF CPU64}
// on a 64 bit platform these make no sense
1 : (
{$IFDEF FPC_LITTLE_ENDIAN}
WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
ResultLo: Word;
ResultHi: Word);
{$ELSE}
WParamHi: Word;
WParamLo: Word;
LParamHi: Word;
LParamLo: Word;
ResultHi: Word;
ResultLo: Word);
{$ENDIF}
{$endif}
end;
{$else}
TLMessage = TMessage;
{$endif}
Also habe ich es
passend für meine Zwecke selber gebaut, (hoffentlich richtig) mit
Code: Alles auswählen
...
var
Msg_lParamhi : Word; // new 2025-11-27 - added for LINUX
Msg_lParamlo : Word; // new 2025-11-26 - added for LINUX
begin
Msg_lParamhi:= word( dword( Msg.lParam) shr 16 and $0000FFFF);
Msg_lParamlo:= word( dword( Msg.lParam) and $0000FFFF);
...
Dann jedes Msg.lParamhi und Msg.lParamlo ersetzen mit Msg_lParamhi und Msg_lParamlo ist machbar.
Aber nicht schön.