📄 flatedits.pas
字号:
property DragCursor;
property DragMode;
property Enabled;
property EditMask;
property Font;
property HideSelection;
property MaxLength;
property OEMConvert;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PasswordChar;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Text;
property Visible;
property OnChange;
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
property OnValidate;
{$IFDEF DFS_DELPHI_4_UP}
property ImeMode;
property ImeName;
property Anchors;
property BiDiMode;
property Constraints;
property DragKind;
property ParentBiDiMode;
property OnEndDock;
property OnStartDock;
{$ENDIF}
end;
TFlatMemo = class(TCustomMemo)
private
FUseAdvColors: Boolean;
FAdvColorFocused: TAdvColors;
FAdvColorBorder: TAdvColors;
FParentColor: Boolean;
FFocusedColor: TColor;
FBorderColor: TColor;
FFlatColor: TColor;
MouseInControl: Boolean;
procedure SetColors (Index: Integer; Value: TColor);
procedure SetAdvColors (Index: Integer; Value: TAdvColors);
procedure SetUseAdvColors (Value: Boolean);
procedure SetParentColor (Value: Boolean);
procedure CMEnabledChanged (var Message: TMessage); message CM_ENABLEDCHANGED;
procedure CMMouseEnter (var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave (var Message: TMessage); message CM_MOUSELEAVE;
procedure WMSetFocus (var Message: TWMSetFocus); message WM_SETFOCUS;
procedure WMKillFocus (var Message: TWMKillFocus); message WM_KILLFOCUS;
procedure WMNCCalcSize (var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
procedure WMNCPaint (var Message: TMessage); message WM_NCPAINT;
procedure CMSysColorChange (var Message: TMessage); message CM_SYSCOLORCHANGE;
procedure CMParentColorChanged (var Message: TWMNoParams); message CM_PARENTCOLORCHANGED;
protected
procedure CalcAdvColors;
procedure RedrawBorder (const Clip: HRGN);
public
constructor Create (AOwner: TComponent); override;
published
property ColorFocused: TColor index 0 read FFocusedColor write SetColors default clWhite;
property ColorBorder: TColor index 1 read FBorderColor write SetColors default $004080FF;
property ColorFlat: TColor index 2 read FFlatColor write SetColors default $00E1EAEB;
property ParentColor: Boolean read FParentColor write SetParentColor default false;
property AdvColorFocused: TAdvColors index 0 read FAdvColorFocused write SetAdvColors default 10;
property AdvColorBorder: TAdvColors index 1 read FAdvColorBorder write SetAdvColors default 50;
property UseAdvColors: Boolean read FUseAdvColors write SetUseAdvColors default false;
property Align;
property Alignment;
property DragCursor;
property DragMode;
property Enabled;
property Font;
property HideSelection;
property MaxLength;
property OEMConvert;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ReadOnly;
property ShowHint;
property ScrollBars;
property TabOrder;
property TabStop;
property Visible;
property Lines;
property WantReturns;
property WantTabs;
property WordWrap;
property OnChange;
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
{$IFDEF DFS_DELPHI_4_UP}
property Anchors;
property BiDiMode;
property Constraints;
property DragKind;
property ParentBiDiMode;
property OnEndDock;
property OnStartDock;
{$ENDIF}
end;
TFlatDBMemo = class(TCustomMemo)
private
FDataLink: TFieldDataLink;
FAutoDisplay: Boolean;
FFocused: Boolean;
FMemoLoaded: Boolean;
FPaintControl: TPaintControl;
FParentColor: Boolean;
FUseAdvColors: Boolean;
FAdvColorFocused: TAdvColors;
FAdvColorBorder: TAdvColors;
FFocusedColor: TColor;
FFlatColor: TColor;
FBorderColor: TColor;
MouseInControl: Boolean;
procedure DataChange(Sender: TObject);
procedure EditingChange(Sender: TObject);
function GetDataField: string;
function GetDataSource: TDataSource;
function GetField: TField;
function GetReadOnly: Boolean;
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
procedure SetReadOnly(Value: Boolean);
procedure SetAutoDisplay(Value: Boolean);
procedure SetFocused(Value: Boolean);
procedure UpdateData(Sender: TObject);
procedure WMCut(var Message: TMessage); message WM_CUT;
procedure WMPaste(var Message: TMessage); message WM_PASTE;
procedure WMUndo(var Message: TMessage); message WM_UNDO;
procedure CMEnter(var Message: TCMEnter); message CM_ENTER;
procedure CMExit(var Message: TCMExit); message CM_EXIT;
procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message WM_LBUTTONDBLCLK;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK;
procedure CMEnabledChanged (var Message: TMessage); message CM_ENABLEDCHANGED;
procedure CMMouseEnter (var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave (var Message: TMessage); message CM_MOUSELEAVE;
procedure WMSetFocus (var Message: TWMSetFocus); message WM_SETFOCUS;
procedure WMKillFocus (var Message: TWMKillFocus); message WM_KILLFOCUS;
procedure WMNCCalcSize (var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
procedure WMNCPaint (var Message: TMessage); message WM_NCPAINT;
procedure CMSysColorChange (var Message: TMessage); message CM_SYSCOLORCHANGE;
procedure CMParentColorChanged (var Message: TWMNoParams); message CM_PARENTCOLORCHANGED;
procedure SetAdvColors(const Index: Integer; const Value: TAdvColors);
procedure SetColors(const Index: Integer; const Value: TColor);
procedure SetParentColor(const Value: Boolean);
procedure SetUseAdvColors(const Value: Boolean);
protected
procedure Change; override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
procedure Loaded; override;
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure WndProc(var Message: TMessage); override;
procedure CalcAdvColors;
procedure RedrawBorder (const Clip: HRGN);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function ExecuteAction(Action: TBasicAction): Boolean; override;
procedure LoadMemo; virtual;
function UpdateAction(Action: TBasicAction): Boolean; override;
function UseRightToLeftAlignment: Boolean; override;
property Field: TField read GetField;
published
property ColorFocused: TColor index 0 read FFocusedColor write SetColors default clWhite;
property ColorBorder: TColor index 1 read FBorderColor write SetColors default $004080FF;
property ColorFlat: TColor index 2 read FFlatColor write SetColors default $00E1EAEB;
property ParentColor: Boolean read FParentColor write SetParentColor default false;
property AdvColorFocused: TAdvColors index 0 read FAdvColorFocused write SetAdvColors default 10;
property AdvColorBorder: TAdvColors index 1 read FAdvColorBorder write SetAdvColors default 50;
property UseAdvColors: Boolean read FUseAdvColors write SetUseAdvColors default false;
property Align;
property Alignment;
property Anchors;
property AutoDisplay: Boolean read FAutoDisplay write SetAutoDisplay default True;
property BiDiMode;
property BorderStyle;
property Color;
property Constraints;
property Ctl3D;
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Font;
property ImeMode;
property ImeName;
property MaxLength;
property ParentBiDiMode;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False;
property ScrollBars;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property WantTabs;
property WordWrap;
property OnChange;
property OnClick;
property OnContextPopup;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDock;
property OnStartDrag;
end;
implementation
{ TCustomFlatEdit }
constructor TCustomFlatEdit.Create (AOwner: TComponent);
begin
inherited Create(AOwner);
ParentFont := True;
FFocusedColor := clWhite;
FBorderColor := $004080FF;
FFlatColor := $00E1EAEB;
FParentColor := True;
AutoSize := False;
Ctl3D := False;
BorderStyle := bsNone;
ControlStyle := ControlStyle - [csFramed];
SetBounds(0, 0, 121, 19);
FUseAdvColors := false;
FAdvColorFocused := 10;
FAdvColorBorder := 50;
FAlignment := taLeftJustify;
FLabelPosition := lpLeft;
FLabelSpacing := 3;
SetupInternalLabel;
end;
procedure TCustomFlatEdit.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do begin
Params.Style := Params.Style or ES_MULTILINE or Aligns[FAlignment];
end;
end;
procedure TCustomFlatEdit.KeyPress(var Key: Char);
begin
inherited KeyPress(Key);
if (Key = Char(VK_RETURN)) then
Key := #0;
end;
procedure TCustomFlatEdit.SetParentColor (Value: Boolean);
begin
if Value <> FParentColor then
begin
FParentColor := Value;
if FParentColor then
begin
if Parent <> nil then
FFlatColor := TForm(Parent).Color;
RedrawBorder(0);
end;
end;
end;
procedure TCustomFlatEdit.CMSysColorChange (var Message: TMessage);
begin
if FUseAdvColors then
begin
if Parent <> nil then
FFlatColor := TForm(Parent).Color;
CalcAdvColors;
end
else
if FParentColor then
begin
if Parent <> nil then
FFlatColor := TForm(Parent).Color;
end;
RedrawBorder(0);
end;
procedure TCustomFlatEdit.CMParentColorChanged (var Message: TWMNoParams);
begin
if FUseAdvColors then
begin
if Parent <> nil then
FFlatColor := TForm(Parent).Color;
CalcAdvColors;
end
else
if FParentColor then
begin
if Parent <> nil then
FFlatColor := TForm(Parent).Color;
end;
RedrawBorder(0);
end;
procedure TCustomFlatEdit.SetColors (Index: Integer; Value: TColor);
begin
case Index of
0: FFocusedColor := Value;
1: FBorderColor := Value;
2: FFlatColor := Value;
end;
if Index = 2 then
FParentColor := False;
RedrawBorder(0);
end;
procedure TCustomFlatEdit.CalcAdvColors;
begin
if FUseAdvColors then
begin
FFocusedColor := CalcAdvancedColor(FFlatColor, FFocusedColor, FAdvColorFocused, lighten);
FBorderColor := CalcAdvancedColor(FFlatColor, FBorderColor, FAdvColorBorder, darken);
end;
end;
procedure TCustomFlatEdit.SetAdvColors (Index: Integer; Value: TAdvColors);
begin
case Index of
0: FAdvColorFocused := Value;
1: FAdvColorBorder := Value;
end;
if FUseAdvColors then
begin
CalcAdvColors;
RedrawBorder(0);
end;
end;
procedure TCustomFlatEdit.SetUseAdvColors (Value: Boolean);
begin
if Value <> FUseAdvColors then
begin
FUseAdvColors := Value;
ParentColor := Value;
CalcAdvColors;
RedrawBorder(0);
end;
end;
procedure TCustomFlatEdit.CMMouseEnter (var Message: TMessage);
begin
inherited;
if (GetActiveWindow <> 0) then
begin
MouseInControl := True;
RedrawBorder(0);
end;
end;
procedure TCustomFlatEdit.CMMouseLeave (var Message: TMessage);
begin
inherited;
MouseInControl := False;
RedrawBorder(0);
end;
procedure TCustomFlatEdit.NewAdjustHeight;
var
DC: HDC;
SaveFont: HFONT;
Metrics: TTextMetric;
begin
DC := GetDC(0);
SaveFont := SelectObject(DC, Font.Handle);
GetTextMetrics(DC, Metrics);
SelectObject(DC, SaveFont);
ReleaseDC(0, DC);
Height := Metrics.tmHeight + 6;
end;
procedure TCustomFlatEdit.Loaded;
begin
inherited;
if not(csDesigning in ComponentState) then
NewAdjustHeight;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -