marcov hat geschrieben:es ist eine Emulation weil die von Microsoft kommender Funktionalität nicht von den native OS unterstützt ist.
Für den Anwendungs-Programmierer ist es egal, ob eine Funktionalität vom OS oder von der Laufzeit-Bibliothek unterstützt wird, oder ob die Heinzelmännchen aus Köln angelaufen kommen und die Bits verschieben. Wenn es mit guter Performence sauber funktioniert, kann er die Funktionalität (den von seiner Programmier-Umgebung bereitgestellten Funktionsaufruf) verwenden. Und wenn das auch noch Architektur-unabhängig 1:1 portabel ist (wie PostMessage <aber nicht SendMessage> in Lazarus) ist er happy.
PostMessage bedeutet schließlich einfach:
Schicke eine Event-Mitteilung an einen Thread dieses Programmes, der eine Event-Queue besitzt, die mit einem (Integer) Handle spezifiziert ist. Die Mitteilung besteht aus drei 32 Bit Werter (bzw. 64 Bit bei 64 Bit Systemen). Die Programmier-Umgebung stellt auf Implementierungs-abhängige Art die Event-Queue zur Verfügung. Ein Thread kannsolche Events durch das Konstrukt procedure ... Message empfangen, das als Klassen-Funktion einer mit in den "Dispatch"-Mechanismus, den die Programmier-Umgebung zur Verfügung stellt, eingebunden ist. Der notwendige Handle ist als Klassenvariable dieser Klasse (oder einer Klasse in der "Parent"-Kette) verfügbar.
(Momentane Einschränkung sowohl bei Delphi als auch bei FPC/Lazarus: die RTÖL baut nur für den Mainthread eine Event-Queue auf (das ließe sich prinzipiell leicht erweitern, für Delphi macht das z.B. "MadDHI").
Darum bin ich dabei, PostMessage (und anderes) in den "NoGUI" Widget-Type einzubauen, damit es auch auf Linux-Systeme ohne GTK oder QT läuft.
Das es in dem Sonderfall mit shared Libraries nicht funktioniert, ist schade, tut dem ganzen aber keinen Abbruch. Man könnte sich sicher eine Methodik einfallen lassen, die Event-Queues der beiden RTLs zu verbinden. Vielleicht fällt mir da ja noch was zu ein, wenn ich mit dem "NOGUI-Linux"-Projekt weiter fortgeschritten bin.
-Michael