Witam.
Czy można się odwołąć poprzez Sendmessage lub PostMessage do RichEdit lub Memo.
Chodzi o to żeby dodać linię tekstu.
Raczej idzie. A poprzez jego właściwość Memo1.Handle masz dostęp do uchwytu.
Ale po co używać SendMessage skoro można to zrobić tak Memo1.Lines.Add('jakis tekst) ??
No pewnie że można Memo1.Lines.Add("jakis tekst") ale co zrobisz jeśli jesteś w wątku pobocznym i chcesz text dodać. No niestety ale to raz zadziała a raz pojawi się błąd.
Ktoś mi napisał taki text:
Pytałam na temat obsługi VCL z poziomu wątku pobocznego.
"w praktyce więc, jeżeli nie znajdzie Pani innego rozwiązania, użyłbym
SendMessage() z dwoma parametrami: jeden byłby adresem funkcji, którą
należy wywołac, drugi: adresem obiektu, ktory przechowuje w sobie
parametry. wewnątrz kodu obsługi komunikatu w wątku głównym po prostu
zawoła Pani funkcję na przekazanych parametrach (po wczesniejszym
zrzutowaniu parametrow na odpowiednie typy)."
Czy ktoś mógłby mi to przetłumaczyć na mały kawałek kodu
Jeśli Memo ma być tylko jedno w całym programie, to ja bym zrobił tak:
- tworzymy komunikat odpowiadający za dodawanie tekstu (jakiś WM_ADDTEXT czy coś...)
- w stosownym miejscu w wątku pobocznym wywołujemy komunikat poprzez SendMessage
- w formularzu, w którym jest Memo dodajemy obsługę komunikatu (czyli dodawanie tekstu)
Jako uchwyt w SendMessage podajemu uchwyt do formy głównej. Jeśli dodawany tekst jest znany, wtedy jego treść ustalamy poprzez parametry komunikatu (np. jako indeks w tablicy). Jeśli nie, to deklarujemy zmienną globalną.
Jak dla mnie to ma wygladac tak:
SendMessage(Memo1.Handle, WM_SETTEXT, WskaznikNaCiagZnakow, 0);