Hab doch noch ein probleme bzg. des Subclassing.
Delphi-Quellcode:
constructor TSkinEdit.Create(hOwner: HWND; Visible: Bool; x, y, xW, yH, EditID: Integer);
begin
if Visible
then
begin
LStyle := WS_VISIBLE
or WS_CHILD
or ES_NOHIDESEL;
end else
LStyle := WS_CHILD
or ES_NOHIDESEL;
FHEdit := CreateWindowEx(WS_EX_TRANSPARENT
or WS_EX_CLIENTEDGE, '
EDIT',
'
Was nun? Nur ein Test!', LStyle, x, y, xW, yH, hOwner, EditID,
hInstance,
nil);
if FHEdit <> 0
then
begin
SubClass(
Handle);
end;
end;
Delphi-Quellcode:
procedure TSkinEdit.SubClass(WinHandle: HWND);
begin
FClientInstance := MakeObjectInstance(ClientWndProc);
FPrevClientProc := Pointer(GetWindowLong(WinHandle, GWL_WNDPROC));
SetWindowLong(WinHandle, GWL_WNDPROC, Integer(FClientInstance));
end;
Messagen die zur zeit GeSubclassed werden
Delphi-Quellcode:
procedure TSkinEdit.ClientWndProc(
var Message: TMessage);
begin
with Message do
begin
case Msg
of
WM_ERASEBKGND:
Result := EditProc(
Handle, integer(Msg),
Message.WParam,
Message.LParam);
WM_PAINT:
Result := EditProc(
Handle, integer(Msg),
Message.WParam,
Message.LParam);
WM_GETTEXT:
Result := EditProc(
Handle, integer(Msg),
Message.WParam,
Message.LParam);
WM_GETTEXTLENGTH:
Result := EditProc(
Handle, integer(Msg),
Message.WParam,
Message.LParam);
end;
end;
end;
Probleme die ich nun habe
1. Kein Focus auf das Edit
2. Kein Rechter Mausclick wird ausgelöst
3. Edit läßt sich nicht editieren
Deaktiviere ich die Subclass dann sind alle die genannten Functionen so wie sie sein sollen.
Dann ist sie allerdings nicht mehr transparent und ohne OwnerdrawText.
Was fehlt?
Hab mich im NET mal dumm und dusselig gesucht finde nicht die
passenden WM Messagen oder was auch immer um die probleme zu beheben.
Edit:
Ok werde wohl mal ne Standard Edit mit Winspector überwachen.
Und prüfen welche Messagen ausgelöst werden.
gruss