Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit UEditSelectedColor;
- interface
- uses
- Classes, Controls, Graphics, Messages, Windows, StdCtrls;
- type
- TEditSelectedColor = class(StdCtrls.TEdit)
- private
- FCanvas: TCanvas;
- OldColor : TColor;
- FColorDestBackBround : TColor;
- FColorSelected : TColor;
- FFontColorSelected : TColor;
- procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
- procedure SetColorDestBackGround(const Value: TColor);
- procedure SetColorSelected(const Value: TColor);
- procedure SetFontColorSelected(const Value: TColor);
- protected
- procedure CreateParams(var Params: TCreateParams); override;
- procedure WndProc(var Message: TMessage); override;
- procedure Paint; virtual;
- procedure PaintWindow(DC: HDC); override;
- procedure WMSize(var msg: TWMSize); message WM_SIZE;
- property Canvas: TCanvas read FCanvas;
- procedure SetParent(AParent: TWinControl); override;
- public
- property ColorDestBackGround: TColor read FColorDestBackBround write SetColorDestBackGround default clYellow;
- property ColorSelected: TColor read FColorSelected write SetColorSelected default clRed;
- property FontColorSelected: TColor read FFontColorSelected write SetFontColorSelected default clWhite;
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- end;
- implementation
- { TEditSelectedColor }
- constructor TEditSelectedColor.Create(AOwner: TComponent);
- begin
- inherited Create(AOwner);
- FCanvas := TControlCanvas.Create;
- TControlCanvas(FCanvas).Control := Self;
- FColorDestBackBround := clYellow;
- FColorSelected := clRed;
- FFontColorSelected := clWhite;
- end;
- procedure TEditSelectedColor.CreateParams(var Params: TCreateParams);
- begin
- inherited;
- if csDesigning in ComponentState then
- exit;
- Params.ExStyle := Params.ExStyle or WS_EX_COMPOSITED;
- end;
- destructor TEditSelectedColor.Destroy;
- begin
- FCanvas.Free;
- inherited;
- end;
- procedure TEditSelectedColor.Paint;
- var
- R: TRect;
- I: Integer;
- NewColor : TColor;
- NewBackColor : TColor;
- procedure DrawEx(S: String);
- begin
- OldColor := Self.Font.Color;
- if ((i-1)>=Self.SelStart) and ((i-1)<=(Self.SelStart+(Self.SelLength-1)))
- and (Self.SelLength>0) and (Self.focused)
- then begin
- Canvas.Font.Color := FFontColorSelected;
- Canvas.Brush.Color := NewColor;
- end else begin
- Canvas.Font.Color := OldColor;
- Canvas.Brush.Color := NewBackColor;
- end;
- Canvas.Brush.Style := bsSolid;
- DrawText(Canvas.Handle, PChar(S), -1, R, DT_LEFT or DT_NOPREFIX or
- DT_WORDBREAK or DrawTextBiDiModeFlagsReadingOnly);
- end;
- begin
- R := ClientRect;
- Inc(R.Left, 1);
- Inc(R.Top, 1);
- Canvas.Brush.Assign(Self.Brush);
- Canvas.Font.Assign(Self.Font);
- if Self.Focused then begin
- NewBackColor := FColorDestBackBround;
- Canvas.Brush.Color := NewBackColor;
- Canvas.Brush.Style := bsSolid;
- Canvas.FillRect(ClientRect);
- // Canvas.DrawFocusRect(ClientRect);
- end else NewBackColor := FFontColorSelected;
- for I:=1 to Length(Text) do begin
- if PasswordChar=#0 then begin
- NewColor := FColorSelected;
- DrawEx(Text[I]);
- Inc(R.Left,Canvas.TextWidth(Text[I]));
- end else begin //with passwordchar
- NewColor := clBlack;
- DrawEx(PasswordChar);
- Inc(R.Left,Canvas.TextWidth(PasswordChar));
- end;
- end;
- end;
- procedure TEditSelectedColor.PaintWindow(DC: HDC);
- begin
- FCanvas.Lock;
- try
- FCanvas.Handle := DC;
- try
- TControlCanvas(FCanvas).UpdateTextFlags;
- Paint;
- finally
- FCanvas.Handle := 0;
- end;
- finally
- FCanvas.Unlock;
- end;
- end;
- procedure TEditSelectedColor.SetColorDestBackGround(const Value: TColor);
- begin
- FColorDestBackBround := Value;
- end;
- procedure TEditSelectedColor.SetColorSelected(const Value: TColor);
- begin
- FColorSelected := Value;
- end;
- procedure TEditSelectedColor.SetFontColorSelected(const Value: TColor);
- begin
- FFontColorSelected := Value;
- end;
- procedure TEditSelectedColor.SetParent(AParent: TWinControl);
- begin
- inherited;
- end;
- procedure TEditSelectedColor.WMPaint(var Message: TWMPaint);
- begin
- ControlState := ControlState+[csCustomPaint];
- inherited;
- ControlState := ControlState-[csCustomPaint];
- end;
- procedure TEditSelectedColor.WMSize(var msg: TWMSize);
- begin
- end;
- procedure TEditSelectedColor.WndProc(var Message: TMessage);
- begin
- inherited WndProc(Message);
- with Message do
- case Msg of
- CM_MOUSEENTER, CM_MOUSELEAVE, WM_LBUTTONUP, WM_LBUTTONDOWN,
- WM_KEYDOWN, WM_KEYUP,
- WM_SETFOCUS, WM_KILLFOCUS,
- CM_FONTCHANGED, CM_TEXTCHANGED:
- begin
- Invalidate;
- end;
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement