Zeile aus Editbox auslesen
-
Hallo Leute,
ich würde gerne eine Zeile aus einer Editbox auslesen.
Doch irgendwie bleibt mein String immer leer.Hier mal der Code:
int lines = 0; char Line[500]; lines = SendMessage(hSupportMail,(UINT) EM_GETLINECOUNT,0,0); for(int i=0;i<lines;i++) { int len; SendMessage(hSupportMail, EM_GETLINE, lines, (LPARAM)Line); }
Ich weiß jetzt nichtmehr weiter, woran es liegen könnte.
Ich habe schon so gut wie alle möglichkeiten ausprobiert.
Kann mir villeicht jemand behilflich sein, den Text der Editbox auszulesen.Mit freundlichem Gruß
xXSlayerXx
-
Bist du sicher, dass hSupportMail ein gültiges Edit-Control ist? Was gibt SendMessage zurück? Woran erkennst du, dass der String leer bleibt? Steht im Edit-Control überhaupt was drin? Hat das mit dem EM_GETLINECOUNT geklappt (nachgezählt)? Hast du Unicode ausgeschaltet? Ansonsten versuch mal SendMessageA statt SendMessage.
-
hSupportMail sollte gültig sein.
erstelle das Edit-Control wie folgt:
hSupportMail = CreateWindowEx (WS_EX_CLIENTEDGE,"EDIT","schreibe hier dein Anliegen...",ES_MULTILINE | WS_VISIBLE | WS_CHILD,20, 130, 515, 200, SupporthWnd, (HMENU)ID_EM_SUPPORT_MAIL, g_hInstance, NULL);
Ich erkenne, dass der String leer bleibt am debuggen. Habe mir die einzelnen Variablen genau angeguckt. Der String Line bekommt von der SendMessage Funtkion keine Werte übermittelt.
Im EditControl steht etwas drin. Wie man auch oben erkennen kann, habe ich den Standardtext zum testen verwendet.
EM_GETLINECOUNT klappt super. Bekomme die genaue anzahl der beschriebenen Zeilen.
Unicode ist ausgeschaltet und auf Multibyte gesetzt.
Mit SendMessageA klappt es auch leider nicht
Mach ich villeicht was falsch, dass ich villeicht den String nicht übergeben muss, sondern in etwa so schreiben muss:
Line=SendMessage(hWnd,EM_GETLINE,line,0)...
-
Problem 1:
for(int i=0;i<lines;i++) { int len; SendMessage(hSupportMail, EM_GETLINE, lines, (LPARAM)Line); }
Angenommen du hast 5 Zeilen, 0-4. Dann holst du dir 5 mal Zeile 5, die nicht existiert, weil du i statt lines wolltest.
Problem 2:
Du musst dem Edit-Control sagen wie groß der Buffer ist. Nochmal die Doku zu EM_GETLINE lesen, insbesondere über den LPARAM Parameter. Du willst sowas hier in der Art:for (int i = 0; i < lines; i++){ *(WORD *)Line = sizeof Line; SendMessage(hSupportMail, EM_GETLINE, i, (LPARAM)Line); //tu was mit Line, sonst wird es im nächsten Schleifendurchlauf überschrieben }
-
Das ganze mit GETLINE habe ich angefangen, um die Zeilenumbrüche zu bekommen.
Doch nun habe ich das ganze mal mit WM_GETTEXT ausprobiert.Dort enthält das was ich bekomme auch Zeilenumbrüche, obwohl sie in meiner Char Array nicht erkennbar sind.
Ich weiß nicht, wo er sich die Informationen für die umbrüche abspeichert, aber scheinbar macht er es^^.
Aber trotzdem für ein großen dank für deine Lösung
-
Komisch. Bei mir kommt bei WM_GETTEXT der korrekte Text mit "\r\n" für jedes Newline. Vielleicht verwirrt das extra '\r' deinen Code?
-
Q&D:
#define size 50 TCHAR buff[size]; buff[0]=size; int lines = 0,len = 0; lines = SendMessage(hEdit, EM_GETLINECOUNT,0,0); for(int i=0;i<lines;i++) { len=SendMessage(hEdit, EM_GETLINE, (WPARAM)i, (LPARAM)buff); buff[len]=0; sprintf(buffer,"Zeilen:%d Zeile %d: %s[%d]",lines,i,buff,len); MessageBox(hWnd, buffer, "Edit", 0); ZeroMemory(buff, sizeof(buff)); buff[0]=size; }
-
buff[0]=size;
Tut nicht das Richtige wenn man ohne Unicode kompiliert, was der Threadersteller aber tut.