![]() |
inhalt von memo durch non-vcl auslesen
hallo,
ich möchte gern den inhalt eines memos, also einem mehrzeiligen edit-feld, auslesen. allerdings ist mir die größe des inhaltes (anzahl der zeichen) nicht bekannt, ich kann also nicht direkt mit WM_GETTEXT arbeiten. also hab ich im sdk ein bisschen gesucht und EM_GETLINECOUNT, sowie EM_LINELENGTH gefunden - allerdings treten bei mir jetzt immer zugriffsverletzungen auf, ich weiss aber nicht wo (wahrscheinlich falscher indexzugriff auf die strings):
Delphi-Quellcode:
danke schonmal,... EN_CHANGE: if loword(wParam) = IDC_MEMORG then begin x := 0; if SendMessage(hMemOrg, EM_GETLINECOUNT, 0 , 0) > 0 then for y := 0 to SendMessage(hMemOrg, EM_GETLINECOUNT, 0 , 0) - 1 do Inc(x, SendMessage(hMemOrg, EM_LINELENGTH, y, 0)); SendMessage(hMemOrg, WM_GETTEXT, x, Integer(@buffer)); if Length(buffer) > 0 then // = x ? begin //umformung nach tmp... end; buffer := ''; SendMessage(hMemNew, WM_SETTEXT, 0 , Integer(@tmp)); end; heiopei |
Re: inhalt von memo durch non-vcl auslesen
Moin Heiopei,
Zitat:
Ich gehe mal davon aus, dass buffer und tmp strings sind, dann musst Du sie mit @buffer[1]/@tmp[1] ansprechen, und natürlich muss der Buffer entsprechend initialisiert werden (z.b. SetLength). Ausserdem musst Du je Zeile noch +2 hinzufügen, da die Zeilenvorschübe bei der Zeilenlänge, IMHO, nicht mitzählen. |
Re: inhalt von memo durch non-vcl auslesen
danke erstmal :-)
d.h. der code müsste jetzt in etwa so ausschauen: - die ?-parameter muss ich dann nochmal nachschaun...
Delphi-Quellcode:
stimmt das dann so?!?
...
EN_CHANGE: if loword(wParam) = IDC_MEMORG then begin x := SendMessage(hMemOrg, WMGETTEXTLENGTH, ?,?); SetLength(buffer, x); SendMessage(hMemOrg, WM_GETTEXT, x, Integer(@buffer[1])); if Length(buffer) > 0 then begin //umformung nach tmp... end; SendMessage(hMemNew, WM_SETTEXT, 0 , Integer(@tmp[1])); SetLength(tmp, 0); SetLength(buffer, 0); end; ps: ja, buffer und tmp sind strings ;-), x und y sind integers |
Re: inhalt von memo durch non-vcl auslesen
Moin Heiopei,
es wäre gut x noch um 1 zu erhöhen, da WM_GETTEXTLENGTH die Länge ohne die abschliessende #0 zurückgibt, WM_GETTEXT aber die Anzahl der zu kopierenden Zeichen inclusive der #0 erfordert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23: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