📄 tntjvtooledit.pas
字号:
if (Editor as IComboEditHelper).GetFlat then
I := 1
else
I := 2;
end
else
I := 2;
{if GetWindowLong(ed.Handle, GWL_STYLE) and ES_MULTILINE = 0 then
Result.X := (SendMessage(ed.Handle, EM_GETMARGINS, 0, 0) and $0000FFFF) + I
else}
Result.X := I;
Result.Y := I;
end;
{$ENDIF VisualCLX}
{$IFDEF VCL}
function EditorTextMargins(Editor: TCustomEdit): TPoint;
var
DC: HDC;
I: Integer;
SaveFont: HFONT;
SysMetrics, Metrics: TTextMetric;
ed: TCustomEditAccessProtected;
begin
ed := TCustomEditAccessProtected(Editor);
if NewStyleControls then
begin
if ed.BorderStyle = bsNone then
I := 0
else
if ed.Ctl3D then
I := 1
else
I := 2;
if GetWindowLong(ed.Handle, GWL_STYLE) and ES_MULTILINE = 0 then
Result.X := (SendMessage(ed.Handle, EM_GETMARGINS, 0, 0) and $0000FFFF) + I
else
Result.X := I;
Result.Y := I;
end
else
begin
if ed.BorderStyle = bsNone then
I := 0
else
begin
DC := GetDC(HWND_DESKTOP);
GetTextMetrics(DC, SysMetrics);
SaveFont := SelectObject(DC, ed.Font.Handle);
GetTextMetrics(DC, Metrics);
SelectObject(DC, SaveFont);
ReleaseDC(HWND_DESKTOP, DC);
I := SysMetrics.tmHeight;
if I > Metrics.tmHeight then
I := Metrics.tmHeight;
I := I div 4;
end;
Result.X := I;
Result.Y := I;
end;
end;
{$ENDIF VCL}
(***
function IsInWordArray(Value: Word; const A: array of Word): Boolean;
var
I: Integer;
begin
Result := True;
for I := 0 to High(A) do
if A[I] = Value then
Exit;
Result := False;
end;
function LoadDefaultBitmap(Bmp: TBitmap; Item: Integer): Boolean;
begin
{$IFDEF VCL}
{$IFDEF CLR}
Bmp.Handle := LoadBitmap(0, Item);
{$ELSE}
Bmp.Handle := LoadBitmap(0, PChar(Item));
{$ENDIF CLR}
Result := Bmp.Handle <> 0;
{$ENDIF VCL}
{$IFDEF VisualCLX}
Result := True;
case Item of
OBM_COMBO:
begin
Bmp.Width := QStyle_sliderLength(Application.Style.Handle);
Bmp.Height := Bmp.Width;
Bmp.Canvas.Start;
DrawFrameControl(Bmp.Canvas.Handle, Rect(0, 0, Bmp.Width, Bmp.Height),
DFC_SCROLL, DFCS_SCROLLDOWN);
Bmp.Canvas.Stop;
end;
else
Bmp.Width := 0;
Bmp.Height := 0;
Result := False;
end;
{$ENDIF VisualCLX}
end;
***)
{$IFDEF VCL}
function PaintComboEditW(Editor: TTntJvCustomComboEdit; const AText: WideString;
AAlignment: TAlignment; StandardPaint: Boolean;
var ACanvas: TControlCanvas; var Msg: TWMPaint): Boolean;
begin
if not (csDestroying in Editor.ComponentState) then
begin
Result := PaintEditW(Editor, AText, AAlignment, Editor.PopupVisible,
Editor.FDisabledTextColor, StandardPaint, ACanvas, Msg);
end
else
Result := True;
end;
{$ENDIF VCL}
{$IFDEF VisualCLX}
function PaintComboEditW(Editor: TTntJvCustomComboEdit; const AText: WideString;
AAlignment: TAlignment; StandardPaint: Boolean; Flat: Boolean;
ACanvas: TCanvas): Boolean;
begin
if not (csDestroying in Editor.ComponentState) then
begin
Result := PaintEditW(Editor, AText, AAlignment, Editor.PopupVisible,
Editor.FDisabledTextColor, StandardPaint, Flat, ACanvas);
end
else
Result := True;
end;
{$ENDIF VisualCLX}
{$IFDEF VCL}
function PaintEditW(Editor: TCustomEdit; const AText: WideString;
AAlignment: TAlignment; PopupVisible: Boolean;
DisabledTextColor: TColor; StandardPaint: Boolean;
var ACanvas: TControlCanvas; var Msg: TWMPaint): Boolean;
type
TEd = TCustomEditAccessProtected;
const
AlignStyle: array [Boolean, TAlignment] of DWORD =
((WS_EX_LEFT, WS_EX_RIGHT, WS_EX_LEFT),
(WS_EX_RIGHT, WS_EX_LEFT, WS_EX_LEFT));
var
LTextWidth, X: Integer;
EditRect: TRect;
DC: HDC;
PS: TPaintStruct;
S: WideString;
ExStyle: DWORD;
begin
Result := True;
if csDestroying in Editor.ComponentState then
Exit;
if TEd(Editor).UseRightToLeftAlignment then
ChangeBiDiModeAlignment(AAlignment);
if StandardPaint and not (csPaintCopy in TEd(Editor).ControlState) then
begin
if SysLocale.MiddleEast and TEd(Editor).HandleAllocated and (TEd(Editor).IsRightToLeft) then
begin { This keeps the right aligned text, right aligned }
ExStyle := DWORD(GetWindowLong(TEd(Editor).Handle, GWL_EXSTYLE)) and (not WS_EX_RIGHT) and
(not WS_EX_RTLREADING) and (not WS_EX_LEFTSCROLLBAR);
if TEd(Editor).UseRightToLeftReading then
ExStyle := ExStyle or WS_EX_RTLREADING;
if TEd(Editor).UseRightToLeftScrollBar then
ExStyle := ExStyle or WS_EX_LEFTSCROLLBAR;
ExStyle := ExStyle or
AlignStyle[TEd(Editor).UseRightToLeftAlignment, AAlignment];
if DWORD(GetWindowLong(TEd(Editor).Handle, GWL_EXSTYLE)) <> ExStyle then
SetWindowLong(TEd(Editor).Handle, GWL_EXSTYLE, ExStyle);
end;
Result := False;
{ return false if we need to use standard paint handler }
Exit;
end;
{ Since edit controls do not handle justification unless multi-line (and
then only poorly) we will draw right and center justify manually unless
the edit has the focus. }
if ACanvas = nil then
begin
ACanvas := TControlCanvas.Create;
ACanvas.Control := Editor;
end;
DC := Msg.DC;
if DC = 0 then
DC := BeginPaint(TEd(Editor).Handle, PS);
ACanvas.Handle := DC;
try
ACanvas.Font := TEd(Editor).Font;
with ACanvas do
begin
SendRectMessage(Editor.Handle, EM_GETRECT, 0, EditRect);
if not (NewStyleControls and TEd(Editor).Ctl3D) and (TEd(Editor).BorderStyle = bsSingle) then
begin
Brush.Color := clWindowFrame;
FrameRect(TEd(Editor).ClientRect);
end;
S := AText;
LTextWidth := WideCanvasTextWidth(ACanvas, S);
if PopupVisible then
X := EditRect.Left
else
begin
case AAlignment of
taLeftJustify:
X := EditRect.Left;
taRightJustify:
X := EditRect.Right - LTextWidth;
else
X := (EditRect.Right + EditRect.Left - LTextWidth) div 2;
end;
end;
if SysLocale.MiddleEast then
UpdateTextFlags;
if not TEd(Editor).Enabled then
begin
// if PS.fErase then // (p3) fErase is not set to true when control is disabled
TEd(Editor).Perform(WM_ERASEBKGND, ACanvas.Handle, 0);
SaveDC(ACanvas.Handle);
try
ACanvas.Brush.Style := bsClear;
ACanvas.Font.Color := DisabledTextColor;
WideCanvasTextRect(ACanvas, EditRect, X, EditRect.Top, S);
finally
RestoreDC(ACanvas.Handle, -1);
end;
end
else
begin
Brush.Color := TEd(Editor).Color;
WideCanvasTextRect(ACanvas, EditRect, X, EditRect.Top, S);
end;
end;
finally
ACanvas.Handle := 0;
if Msg.DC = 0 then
EndPaint(TEd(Editor).Handle, PS);
end;
end;
{$ENDIF VCL}
{$IFDEF VisualCLX}
{ PaintEditW (CLX) needs an implemented EM_GETRECT message handler. If no
EM_GETTEXT handler exists or the edit control does not implement
IComboEditHelper, it uses the ClientRect of the edit control. }
function PaintEditW(Editor: TCustomEdit; const AText: WideString;
AAlignment: TAlignment; PopupVisible: Boolean;
DisabledTextColor: TColor; StandardPaint: Boolean; Flat: Boolean;
ACanvas: TCanvas): Boolean;
var
LTextWidth, X: Integer;
EditRect: TRect;
S: WideString;
ed: TCustomEditAccessProtected;
SavedFont: TFontRecall;
SavedBrush: TBrushRecall;
Offset: Integer;
R: TRect;
EditHelperIntf: IComboEditHelper;
begin
Result := True;
if csDestroying in Editor.ComponentState then
Exit;
ed := TCustomEditAccessProtected(Editor);
if StandardPaint and not (csPaintCopy in ed.ControlState) then
begin
Result := False;
{ return false if we need to use standard paint handler }
Exit;
end;
SavedFont := TFontRecall.Create(ACanvas.Font);
SavedBrush := TBrushRecall.Create(ACanvas.Brush);
try
ACanvas.Font := ed.Font;
// paint Border
R := ed.ClientRect;
Offset := 0;
if (ed.BorderStyle = bsSingle) then
begin
ACanvas.Start;
QStyle_drawPanel(QWidget_style(Editor.Handle), ACanvas.Handle,
R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top, QWidget_colorGroup(Editor.Handle),
True, 2, nil);
ACanvas.Stop;
//QGraphics.DrawEdge(ACanvas, R, esLowered, esLowered, ebRect)
end
else
begin
if Flat then
QGraphics.DrawEdge(ACanvas, R, esNone, esLowered, ebRect);
Offset := 2;
end;
with ACanvas do
begin
if Supports(Editor, IComboEditHelper, EditHelperIntf) then
begin
EditRect := EditHelperIntf.GetEditorRect;
EditHelperIntf := nil;
end
else
begin
EditRect := Rect(0, 0, 0, 0);
SendMessage(Editor.Handle, EM_GETRECT, 0, Integer(@EditRect));
end;
if IsRectEmpty(EditRect) then
begin
EditRect := ed.ClientRect;
if ed.BorderStyle = bsSingle then
InflateRect(EditRect, -2, -2);
end
else
InflateRect(EditRect, -Offset, -Offset);
if Flat and (ed.BorderStyle = bsSingle) then
begin
Brush.Color := clWindowFrame;
FrameRect(ACanvas, ed.ClientRect);
end;
S := AText;
LTextWidth := TextWidth(S);
if PopupVisible then
X := EditRect.Left
else
begin
case AAlignment of
taLeftJustify:
X := EditRect.Left;
taRightJustify:
X := EditRect.Right - LTextWidth;
else
X := (EditRect.Right + EditRect.Left - LTextWidth) div 2;
end;
end;
if not ed.Enabled then
begin
if Supports(ed, IJvWinControlEvents) then
(ed as IJvWinControlEvents).DoEraseBackground(ACanvas, 0);
ACanvas.Brush.Style := bsClear;
ACanvas.Font.Color := DisabledTextColor;
WideCanvasTextRect(Canvas, EditRect, X, EditRect.Top + 1, S);
end
else
begin
Brush.Color := ed.Color;
DrawSelectedText(ACanvas, EditRect, X, EditRect.Top + 1, S,
ed.SelStart, ed.SelLength,
clHighlight, clHighlightText);
end;
end;
finally
SavedFont.Free;
SavedBrush.Free;
end;
end;
{$ENDIF VisualCLX}
{$IFDEF VCL}
//=== { TAutoCompleteSource } ================================================
constructor TAutoCompleteSource.Create(AComboEdit: TTntJvCustomComboEdit; const StartIndex: Integer);
begin
inherited Create;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -