![]() |
AW: Tmemo und threads
Zitat:
(aber wo bleibt dann BeginUpdate/EndUpdate ?) Gruß K-H |
AW: Tmemo und threads
Unnötig?
Der Text wird eh nur mit dem einem Befehl reingegeben und es gibt somit nur eine Aktualisierung. OK, "synchronisiert" wird es nur "indirekt". Windows fügt diese Message synchronisert in die MessageQueue des Erstellerthreads des Controls ein. Und da nur der eine Thread seine Messages ausliest und verarbeitet, werden dort alle Messages auch immer nur nacheinander abgerifen/verarbeitet. |
AW: Tmemo und threads
Ich hab es mal umgesetzt, und es fluppt:
Delphi-Quellcode:
Vielen dank
procedure TDirThread.Execute;
var ll : tstrings; begin ll:=tstringlist.Create; Dirliste(Muster,tstrings(ll)); //liefert alle subdirs unterhalb von muster SendMessage(FMsgCompHandle, WM_SETTEXT, 0, Longint(PChar(ll.Text))); //FMsgCompHandle ist das Handle vom Memo1 ll.Free; end; K-H |
AW: Tmemo und threads
Unter Win64 wird es mit LongInt natürlich knallen.
Selbst Integer/Cardinal ist inzwischen falsch, da dessen Größe eingefroren wurde. Als Casts für Pointer solltest du immer nur die Typen IntPtr (falls das definiert ist), NativeInt NativeUInt (das neue "Integer") oder besser noch LPARAM, WPARAM und LRESULT verwenden. Letztere sind die "eigentlichen" Typen der Parameter, für z.B. SendMessage, weswegen sie hier natürlich immer die richtigen Ergebnisse liefern. NativeUInt/Cardinal statt NativeInt/Integer, da Pointer natürlich vorzeichenlos sind. :zwinker: |
AW: Tmemo und threads
Danke für den Hinweis, das kommt davon wenn man blöde abschreibt.
Delphi-Quellcode:
(für mich ist Pchar noch in Ordnung!)
SendMessage(FMsgCompHandle, WM_SETTEXT, 0, LPARAM(PChar(ll.Text)));
Aaber... BS ist ein 64Bit-Windows. Kompiliert wurde das Programm mit D7 (also 32 Bit). Hier verweist SendMessage auf SendMessageA (Ansi-Text?) und es gibt keine Unterscheidung zwischen 32 und 64 Bit. Warum sollte es auch knallen? Ich übergebe einen Wert (der unterhalb der 32Bit Grenze liegt) an eine 64Bit Speicherstelle. Das sollte passen. Etwas anders ist es wenn ich in einem 64Bit Kompilat einen 64Bit-Wert durch einen 32-Bit Typen "verhunze". Das kann gut gehen, aber man soll sich nicht wundern wenn es nicht gut geht. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:41 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 by Thomas Breitkreuz