Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#18

AW: Transparent Edit

  Alt 22. Aug 2012, 22:30
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

Geändert von EWeiss (22. Aug 2012 um 23:33 Uhr)
  Mit Zitat antworten Zitat