Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Custom drawing in TEdit (https://www.delphipraxis.net/171656-custom-drawing-tedit.html)

WojTec 17. Nov 2012 15:20

Delphi-Version: 2010

Custom drawing in TEdit
 
I found this: http://stackoverflow.com/questions/9...t-control-text.

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?

sintronic86 6. Aug 2014 12:32

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!

Bernhard Geyer 6. Aug 2014 12:52

AW: Custom drawing in TEdit
 
Wieso selbst machen?
Mit den VCL-Styles hat man doch in Delphi einfachere Möglichkeiten.

sintronic86 6. Aug 2014 15:20

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?

Dejan Vu 6. Aug 2014 16:21

AW: Custom drawing in TEdit
 
Ich glaube, das TEdit ist ein Windows-Control und da funkt dir das eben manchmal dazwischen.

sintronic86 8. Aug 2014 08:30

AW: Custom drawing in TEdit
 
Aber es muss doch eine Möglichkeit geben, auch in diesem Fall eine eigene Zeichnungs-Routine einzubinden!

Dejan Vu 8. Aug 2014 10:21

AW: Custom drawing in TEdit
 
Zitat:

Zitat von sintronic86 (Beitrag 1267955)
Aber es muss doch eine Möglichkeit geben, auch in diesem Fall eine eigene Zeichnungs-Routine einzubinden!

Und die Windows-Routine deaktivieren? Glaube nicht. Du müsstest Dir deine eigene Bauen.

Whookie 8. Aug 2014 18:34

AW: Custom drawing in TEdit
 
Nur mal kurz die Messages durchgesehen und das probiert:

Code:
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;
Flackert zwar ein bischen ... aber besser als vorher ist es. Vielleicht kommst ja so weiter...

daarky 14. Nov 2019 21:04

AW: Custom drawing in TEdit
 
Ich hatte das gleiche Problem.
Gelöst habe ich es durch Überschreiben von CreateParams:
Code:
procedure TMyEdit.CreateParams(var Params: TCreateParams);
begin
    inherited;
    if csDesigning in ComponentState then
        exit;
    Params.ExStyle := Params.ExStyle or WS_EX_COMPOSITED;
end;
Die Lösung habe ich auch hier gepostet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz