AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tmemo und threads

Ein Thema von p80286 · begonnen am 22. Jun 2016 · letzter Beitrag vom 29. Jun 2016
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#11

AW: Tmemo und threads

  Alt 27. Jun 2016, 14:19
Du kannst also per SetWindowText an Edit.Handle von überall (anderer Thread oder gar andere Anwendung) etwas schicken und Windows synchronisiert das dann automatisch.
Ich hab mal versucht mich schlau zu machen, SetWindowText scheint aber nur innerhalb eines Threads zu funktionieren, das Mittel der Wahl wäre dann SendMessage(..WM_SETTEXT..).
(aber wo bleibt dann BeginUpdate/EndUpdate ?)


Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#12

AW: Tmemo und threads

  Alt 27. Jun 2016, 14:25
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#13

AW: Tmemo und threads

  Alt 28. Jun 2016, 16:21
Ich hab es mal umgesetzt, und es fluppt:
Delphi-Quellcode:
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;
Vielen dank
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#14

AW: Tmemo und threads

  Alt 28. Jun 2016, 18:55
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#15

AW: Tmemo und threads

  Alt 29. Jun 2016, 11:54
Danke für den Hinweis, das kommt davon wenn man blöde abschreibt.
SendMessage(FMsgCompHandle, WM_SETTEXT, 0, LPARAM(PChar(ll.Text))); (für mich ist Pchar noch in Ordnung!)

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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz