![]() |
Delphi-Version: 2010
Custom drawing in TEdit
I found this:
![]() It's nice, but one thing is missing: text selection. I added it, but one more thing is wrong (in original code, my modification just modifing font and brush colors): when select text by mouse, custom paint method is not used. Could you help, please? |
AW: Custom drawing in TEdit
Liste der Anhänge anzeigen (Anzahl: 2)
Ich greife das Thema mal auf, weil ich aktuell vor dem selben Problem stehe.
Mit Hilfe des vom Vorredner angegebenen Links und dem Quellcode des "TCustomButtonedEdit" habe ich es hinbekommen, mein eigenes TEdit selber zu zeichnen, den Text entsprechend auszurichten und eigene Grafiken zu hinterlegen. Allerdings greift die eigene Paint-Methode nicht, wenn ich mit der Maus linksklicke und dann bewege. Im Anhang zeigt Bild 1, wie das Edit mit eingetragenem Text aussieht, das Bild 2, was passiert, wenn ich den Text selektiere! Ist für dieses Problem mittlerweile eine Lösung bekannt? Vielen Dank im Vorraus! |
AW: Custom drawing in TEdit
Wieso selbst machen?
Mit den VCL-Styles hat man doch in Delphi einfachere Möglichkeiten. |
AW: Custom drawing in TEdit
Ja, das stimmt sicherlich. Auch mit den VCL-Styles habe ich bereits Erfahrungen gemacht! Wobei ich da immernoch nach einem vernünftigen Designer suche.
Gibt es denn für mein Problem keine Lösung, als komplett auf die VCL-Styles umzusteigen? |
AW: Custom drawing in TEdit
Ich glaube, das TEdit ist ein Windows-Control und da funkt dir das eben manchmal dazwischen.
|
AW: Custom drawing in TEdit
Aber es muss doch eine Möglichkeit geben, auch in diesem Fall eine eigene Zeichnungs-Routine einzubinden!
|
AW: Custom drawing in TEdit
Zitat:
|
AW: Custom drawing in TEdit
Nur mal kurz die Messages durchgesehen und das probiert:
Code:
Flackert zwar ein bischen ... aber besser als vorher ist es. Vielleicht kommst ja so weiter...
procedure TMyEdit.WndProc(var Message: TMessage);
begin DebugString(dbGetMsgName(Message)); if Message.Msg = CN_CTLCOLOREDIT then Begin SetBkMode(TWMCtlColor(Message).ChildDC,TRANSPARENT); Message.Result:=GetStockObject(HOLLOW_BRUSH); End else inherited WndProc(Message); with Message do case Msg of CM_MOUSEENTER, CM_MOUSELEAVE, WM_LBUTTONUP, WM_LBUTTONDOWN, CN_CTLCOLOREDIT, WM_KEYDOWN, WM_KEYUP, WM_SETFOCUS, WM_KILLFOCUS, CM_FONTCHANGED, CM_TEXTCHANGED: begin Invalidate; end; end; // case end; |
AW: Custom drawing in TEdit
Ich hatte das gleiche Problem.
Gelöst habe ich es durch Überschreiben von CreateParams:
Code:
Die Lösung habe ich auch
procedure TMyEdit.CreateParams(var Params: TCreateParams);
begin inherited; if csDesigning in ComponentState then exit; Params.ExStyle := Params.ExStyle or WS_EX_COMPOSITED; end; ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 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-2025 by Thomas Breitkreuz