WC_IPADDRESS
-
VCL mit ein wenig WinAPI.
Habe mit SetWindowLong die Botschaftsbehandlungsroutine umgeleitet und wollte damit die Nachrichten abfangen.
-
Versuch es doch einfach mal ohne WS_GROUP. Wenn die anderen Komponenten alle den WS_TABSTOP haben, sollte es theoretisch klappen.
P.S. Kann man WinApi in VCL-Code einbauen? Kenne mich da nicht aus.
-
WS_GROUP weglassen, ändert nichts.
-
Zeig mal ein minimales und kompilierbares Programm und wir lösen dein Problem...
-
Morgen Früh ca. 8:30 stellt ich den Quelltext hier rein.
-
So wie versprocher kommt jetzt Quellcode:
Erstellt erst mal ein neues Project mit den Builder.In der Project.cpp muss in der WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
INITCOMMONCONTROLSEX iccex; iccex.dwSize = sizeof(iccex); iccex.dwICC = ICC_INTERNET_CLASSES; InitCommonControlsEx(&iccex);
Das sind Globale Variablen die in Unit1 deklariert werden müssen.
WNDPROC g_wndprocOld; LRESULT CALLBACK NewWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam); HWND hWndIPAdr;
Das Nächste muss in die Unit1.cpp in Funktion
__fastcall Form1::TForm1(TComponent* AOwner) : TForm(AOwner) {
hWndIPAdr = CreateWindow(WC_IPADDRESS, //erzeugen des IP Eingabefeldes NULL, WS_CHILD | WS_TABSTOP | WS_VISIBLE , 75, 144, 95, 21, Form1->Handle, NULL,NULL, NULL); SendMessage(hWndIPAdr , WM_SETFONT, (WPARAM)(GetStockObject(DEFAULT_GUI_FONT)), MAKELPARAM(TRUE, 0)); SendMessage(hWndIPAdr , IPM_SETADDRESS, 0,MAKEIPADDRESS(192,168,0,8)); g_wndprocOld = (WNDPROC)SetWindowLong(hWndIPAdr, GWL_WNDPROC, (long)NewWndProc); //Umlenken der Winproc vom IP Eingabefeld
Das ist die neu Winproc des IP Feldes.
LRESULT CALLBACK NewWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { switch(iMsg){ case WM_NOTIFY: // hier kann man nur die Message IPN_FIELDCHANGED abfangen break; } return CallWindowProc((FARPROC)g_wndprocOld,hwnd,iMsg, wParam, lParam); }
hoffe das, das erst mal reicht um ein lauffähiges Prog. zu erstellen.
[ Dieser Beitrag wurde am 13.06.2003 um 09:26 Uhr von e=mc² editiert. ]
-
ich glaub das liegt daran weil du eine VCL Form benutzt
-
warum ersetzt du überhaupt die wndproc? die WM_NOTIFY nachricht kommt doch im parent fenster, also deiner form, an.
-
Das hat mit der VCL Form nichts zu tun, da die ja auch nur mit der WINAPI ein Fenster zeichnet, würde ich jetzt mal behaubten.
-
Original erstellt von e=mc²:
Morgen Früh ca. 8:30 stellt ich den Quelltext hier rein.
e=mc² erstellt 13.06.2003 09:24
So wie versprocher kommt jetzt Quellcode:Is' bei Dir Sommer-Sommer-Zeit oder was?!