Advertisement
jpfassis

TEdit Selected Color - Delphi

Aug 9th, 2022 (edited)
1,264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.76 KB | None | 0 0
  1. unit UEditSelectedColor;
  2.  
  3. interface
  4.  
  5. uses
  6.  
  7.  Classes, Controls, Graphics, Messages, Windows, StdCtrls;
  8.  
  9. type
  10.  
  11.   TEditSelectedColor = class(StdCtrls.TEdit)
  12.   private
  13.     FCanvas: TCanvas;
  14.     OldColor : TColor;
  15.     FColorDestBackBround : TColor;
  16.     FColorSelected : TColor;
  17.     FFontColorSelected : TColor;
  18.     procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
  19.     procedure SetColorDestBackGround(const Value: TColor);
  20.     procedure SetColorSelected(const Value: TColor);
  21.     procedure SetFontColorSelected(const Value: TColor);
  22.   protected
  23.     procedure CreateParams(var Params: TCreateParams); override;
  24.     procedure WndProc(var Message: TMessage); override;
  25.     procedure Paint; virtual;
  26.     procedure PaintWindow(DC: HDC); override;
  27.     procedure WMSize(var msg: TWMSize); message WM_SIZE;
  28.     property  Canvas: TCanvas read FCanvas;
  29.     procedure SetParent(AParent: TWinControl); override;
  30.   public
  31.     property ColorDestBackGround: TColor read FColorDestBackBround write SetColorDestBackGround default clYellow;
  32.     property ColorSelected: TColor read FColorSelected write SetColorSelected default clRed;
  33.     property FontColorSelected: TColor read FFontColorSelected write SetFontColorSelected default clWhite;
  34.     constructor Create(AOwner: TComponent); override;
  35.     destructor Destroy; override;
  36.   end;
  37.  
  38. implementation
  39.  
  40. { TEditSelectedColor }
  41.  
  42. constructor TEditSelectedColor.Create(AOwner: TComponent);
  43. begin
  44.   inherited Create(AOwner);
  45.   FCanvas := TControlCanvas.Create;
  46.   TControlCanvas(FCanvas).Control := Self;
  47.   FColorDestBackBround := clYellow;
  48.   FColorSelected := clRed;
  49.   FFontColorSelected := clWhite;
  50. end;
  51.  
  52. procedure TEditSelectedColor.CreateParams(var Params: TCreateParams);
  53. begin
  54.   inherited;
  55.   if csDesigning in ComponentState then
  56.    exit;
  57.   Params.ExStyle := Params.ExStyle or WS_EX_COMPOSITED;
  58. end;
  59.  
  60. destructor TEditSelectedColor.Destroy;
  61. begin
  62.   FCanvas.Free;
  63.   inherited;
  64. end;
  65.  
  66. procedure TEditSelectedColor.Paint;
  67. var
  68.   R: TRect;
  69.   I: Integer;
  70.   NewColor : TColor;
  71.   NewBackColor : TColor;
  72.  
  73.   procedure DrawEx(S: String);
  74.   begin
  75.      OldColor := Self.Font.Color;
  76.      if ((i-1)>=Self.SelStart) and ((i-1)<=(Self.SelStart+(Self.SelLength-1)))
  77.         and (Self.SelLength>0) and (Self.focused)
  78.        then begin
  79.          Canvas.Font.Color  := FFontColorSelected;
  80.          Canvas.Brush.Color := NewColor;
  81.        end else begin
  82.          Canvas.Font.Color  := OldColor;
  83.          Canvas.Brush.Color := NewBackColor;
  84.        end;
  85.      Canvas.Brush.Style := bsSolid;
  86.      DrawText(Canvas.Handle, PChar(S), -1, R, DT_LEFT or DT_NOPREFIX or
  87.        DT_WORDBREAK or DrawTextBiDiModeFlagsReadingOnly);
  88.   end;
  89.  
  90. begin
  91.   R := ClientRect;
  92.   Inc(R.Left, 1);
  93.   Inc(R.Top, 1);
  94.   Canvas.Brush.Assign(Self.Brush);
  95.   Canvas.Font.Assign(Self.Font);
  96.  
  97.   if Self.Focused then begin
  98.       NewBackColor       := FColorDestBackBround;
  99.       Canvas.Brush.Color := NewBackColor;
  100.       Canvas.Brush.Style := bsSolid;
  101.       Canvas.FillRect(ClientRect);
  102. //      Canvas.DrawFocusRect(ClientRect);
  103.     end else NewBackColor := FFontColorSelected;
  104.  
  105.   for I:=1 to Length(Text) do begin
  106.    if PasswordChar=#0 then begin
  107.        NewColor := FColorSelected;
  108.        DrawEx(Text[I]);
  109.        Inc(R.Left,Canvas.TextWidth(Text[I]));
  110.     end else begin //with passwordchar
  111.        NewColor := clBlack;
  112.        DrawEx(PasswordChar);
  113.      Inc(R.Left,Canvas.TextWidth(PasswordChar));
  114.     end;
  115.   end;
  116.  
  117. end;
  118.  
  119. procedure TEditSelectedColor.PaintWindow(DC: HDC);
  120. begin
  121.   FCanvas.Lock;
  122.   try
  123.     FCanvas.Handle := DC;
  124.     try
  125.       TControlCanvas(FCanvas).UpdateTextFlags;
  126.       Paint;
  127.     finally
  128.       FCanvas.Handle := 0;
  129.     end;
  130.   finally
  131.     FCanvas.Unlock;
  132.   end;
  133. end;
  134.  
  135. procedure TEditSelectedColor.SetColorDestBackGround(const Value: TColor);
  136. begin
  137.   FColorDestBackBround := Value;
  138. end;
  139.  
  140. procedure TEditSelectedColor.SetColorSelected(const Value: TColor);
  141. begin
  142.   FColorSelected := Value;
  143. end;
  144.  
  145. procedure TEditSelectedColor.SetFontColorSelected(const Value: TColor);
  146. begin
  147.   FFontColorSelected := Value;
  148. end;
  149.  
  150. procedure TEditSelectedColor.SetParent(AParent: TWinControl);
  151. begin
  152.   inherited;
  153.  
  154. end;
  155.  
  156. procedure TEditSelectedColor.WMPaint(var Message: TWMPaint);
  157. begin
  158.   ControlState := ControlState+[csCustomPaint];
  159.   inherited;
  160.   ControlState := ControlState-[csCustomPaint];
  161. end;
  162.  
  163. procedure TEditSelectedColor.WMSize(var msg: TWMSize);
  164. begin
  165.  
  166. end;
  167.  
  168. procedure TEditSelectedColor.WndProc(var Message: TMessage);
  169. begin
  170.   inherited WndProc(Message);
  171.   with Message do
  172.     case Msg of
  173.       CM_MOUSEENTER, CM_MOUSELEAVE, WM_LBUTTONUP, WM_LBUTTONDOWN,
  174.       WM_KEYDOWN, WM_KEYUP,
  175.       WM_SETFOCUS, WM_KILLFOCUS,
  176.       CM_FONTCHANGED, CM_TEXTCHANGED:
  177.       begin
  178.         Invalidate;
  179.       end;
  180.   end;
  181.  
  182. end;
  183.  
  184. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement