![]() |
[non VCL] - Fehler bei WM_GETTEXT
Nabend.
Also ich habe einen Dialog in einer Resource, den ich dann lade. Inhalt: Edit, Button, Listbox. Jetzt war mein eigentliches Ziel mit der Listbox experimentieren, allerdings wurde daraus nix, da ich den Text aus dem Edit irgendwie nicht bekomme. Die ID vom Edit ist 102, und obwohl der Code keinen Sinn macht, funktioniert er nicht. Das Edit ist danach leer :(
Delphi-Quellcode:
Nix is ok - non VCL oh weh :mrgreen:
function DlgFunc(hwnd: HWND; uMsg: UINT; wParam: WPARAM;
lParam: LPARAM): Bool; stdcall; var s: PAnsiChar; begin Result := True; if uMsg = WM_COMMAND then begin if HiWord(wParam) = BN_CLICKED then if LoWord(wParam) = 3 then begin edit := GetDlgItem(hwnd, 102); SendMessage(edit, WM_GETTEXT, 0, Integer(@s)); SendMessage(edit, WM_SETTEXT, 0, Integer(@s)); end; end else Result := False; end; |
Re: [non VCL] - Fehler bei WM_GETTEXT
Da du offensichtlich mit Dialogen arbeitest, solltest du auch
![]() |
Re: [non VCL] - Fehler bei WM_GETTEXT
Delphi-Quellcode:
Es wird ein Eintrag hinzugefügt in der Listbox(ID = 101), aber der ist immer leer :wall:
SendDlgItemMessage(hwnd, 102, WM_GETTEXT, 0, Integer(@s));
SendDlgItemMessage(hwnd, 101, LB_ADDSTRING, 0, Integer(@s)); //Edit: Grad gesehen: Zitat:
|
Re: [non VCL] - Fehler bei WM_GETTEXT
Das oben war auch nur ein Formalhinweis. Dein Fehler liegt hier:
![]() Zitat:
|
Re: [non VCL] - Fehler bei WM_GETTEXT
Auch Edits und Listboxen werden in meinen Tutorials behandelt, warum liest du sie nicht einfach mal?
|
Re: [non VCL] - Fehler bei WM_GETTEXT
Ja das hat ich auch schon ausprobiert aber da kommt ab 8 Zeichen immer der Error Code 216.
In der Hilfe steht dann Zitat:
|
Re: [non VCL] - Fehler bei WM_GETTEXT
Wenn du einen PChar nimmst, dann solltest du vorher mal Speicher reservieren. ;)
Delphi-Quellcode:
Und damit du genau weißt, wie viel Speicher du brauchst, guckst du vorher mit
procedure TForm1.Button1Click(Sender: TObject);
var s: PChar; begin GetMem(s, length(Edit1.Text)+1); try SendMessage(Edit1.Handle, WM_GETTEXT, length(Edit1.Text)+1, Integer(@s[0])); ShowMessage(s); finally FreeMem(s, length(Edit1.Text)+1); end; end; ![]() Und noch ein heißer Tipp: Lad dir das PSDK runter: ![]() Noch was: Für Dialoge gibt es auch spezielle Dialog-Funktionen, die einem das Leben einfacher machen. Hier wäre das zum Beispiel: ![]() |
Re: [non VCL] - Fehler bei WM_GETTEXT
Zitat:
|
Re: [non VCL] - Fehler bei WM_GETTEXT
Stimmt. 216 ist nämlich die Access Violation und die kommt, weil du für deinen PChar keinen Speicher alloziierst. ;)
|
Re: [non VCL] - Fehler bei WM_GETTEXT
Probier ich gleich ma aus. Hab vergessen Prog und Dialog zu speichern :roll:
|
Re: [non VCL] - Fehler bei WM_GETTEXT
Funzt wieder nicht :(
Jetzt habe ich es ohne Dialoge versucht.
Delphi-Quellcode:
Funktioniert...bis 8 Zeichen -.-
Len := SendMessage(hWndEdit, WM_GETTEXTLENGTH, 0, 0);
SendMessage(hWndEdit, WM_GETTEXT, Len, Integer(@s)); SendMessage(hWnd, WM_SETTEXT, Len, Integer(@s)); //Edit: Aha mir ist ein Licht aufgegangen :mrgreen: Scheint daran zu liegen, dass ein PAnsiChar nur 8 Bytes (Bits?) oder so hat (grobe Vermutung :)) Wenn s: Array [0..255] of Char; dann klappt alles! |
Re: [non VCL] - Fehler bei WM_GETTEXT
Zitat:
So:
Delphi-Quellcode:
Len := SendMessage(hWndEdit, WM_GETTEXTLENGTH, 0, 0);
SetLength(s, Len+1); SendMessage(hWndEdit, WM_GETTEXT, Len, Integer(@s[1])); // ... SendMessage(hWnd, WM_SETTEXT, Len, Integer(@s[1])); |
Re: [non VCL] - Fehler bei WM_GETTEXT
es geht sogar einfacher :mrgreen:
Delphi-Quellcode:
Es funktioniert auch wenn s: Array [0..1] of Char; is, was ich irgendwie nich verstehe ^^
var
s: PChar; //... edit1 := GetDlgItem(hwnd, 1); edit2 := GetDlgItem(hwnd, 2); Length := SendMessage(edit1, WM_GETTEXTLENGTH, 0, 0) + 1; SendMessage(edit1, WM_GETTEXT, Length, Integer(@s)); SendMessage(edit2, WM_SETTEXT, Length, Integer(@s)); |
Re: [non VCL] - Fehler bei WM_GETTEXT
Ich würde es aber niemals so irgendwo verwenden, nimm einfach nen String und SetLength().
Meine Vermutung: Windows schreibt einfach in irgendeinem Speicher hinter dem Array [0..1] of Char weiter. Und wenn da zufällig was liegt, was wichtig ist, na dann gute Nacht. |
Re: [non VCL] - Fehler bei WM_GETTEXT
Zitat:
Also wie gesagt, wenn du meinst, daß du es besser weißt, mach es selber, aber eröffne bitte ein Thema in K&T wo du dein Programm vorstellst, damit alle gewarnt sind. @scp: So ist es! |
Re: [non VCL] - Fehler bei WM_GETTEXT
Zitat:
Ich hab nicht behauptet, dass ich es besser weiß. Ohne eure Hilfe wär ich nie so weit gekommen. Es sind alles ganz normale Aussagen und bei mir tickt jeder völlig durch. Habt ihr alle was gegen mich oder so? Ich versteh das mit dem Pointer auch nicht. Du hast es in deinen Quelltexten oben genau so gemacht Zitat:
//Edit:
Delphi-Quellcode:
So gehts es jetzt.
var
Text: String; ... edit1 := GetDlgItem(hwnd, 1); edit2 := GetDlgItem(hwnd, 2); Length := SendMessage(edit1, WM_GETTEXTLENGTH, 0, 0) + 1; SetLength(Text, Length); SendMessage(edit1, WM_GETTEXT, Length, Integer(PChar(Text))); SendMessage(edit2, WM_SETTEXT, Length, Integer(PChar(Text))); Und nochmal: Ich freue mich über eure Hilfsbereitschaft und finde es schade, dass sich manche durch irgendwelche Sachen sofort aufn Schlips getreten fühlen. Ich hab mich einfach nach dem Codeschnippsel gerichtet, wo Pointer verwendet wurden, es hat funktioniert und war etwas kürzer als das Beispiel. Also wollt ich der Allgemeinheit mitteilen, dass es einfacher geht, weil ich es für korrekt gehalten habe. Wenn du das jetzt innen falschen Hals bekommen hast, dann werd ich mich wohl nächstes Mal deutlicher ausdrücken... //Edit2: Tippfehler ... |
Re: [non VCL] - Fehler bei WM_GETTEXT
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Was du gemacht hast, ist, einen Pointer auf einen (nicht-zugewiesenen) Pointer auf ein Zeichen zu übergeben. Das kann zwar gutgehen, wie man bei dir gesehen hat, dies ist aber eher eine Ausnahme bzw. Zufall. Auf alle Fälle ist es Mist! Zitat:
![]() Zitat:
Ganz schön spät für eine(n) 5jährige(n) ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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