📄 jvqtooledit.pas
字号:
I := I div 4 + GetSystemMetrics(SM_CYBORDER) * 4;
end;
if Height < Metrics.tmHeight + I then
Height := Metrics.tmHeight + I;
end;
procedure TJvCustomComboEdit.AdjustSize;
var
MinHeight: Integer;
begin
inherited AdjustSize;
if not (csLoading in ComponentState) then
begin
MinHeight := GetMinHeight;
{ text edit bug: if size to less than MinHeight, then edit ctrl does
not display the text }
if Height < MinHeight then
begin
Height := MinHeight;
Exit;
end;
end
else
begin
if (FPopup <> nil) and (csDesigning in ComponentState) then
FPopup.SetBounds(0, Height + 1, 10, 10);
end;
UpdateControls;
UpdateMargins;
end;
procedure TJvCustomComboEdit.AsyncPopupCloseUp(Accept: Boolean);
begin
PostMessage(Handle, CM_POPUPCLOSEUP, Ord(Accept), 0);
end;
function TJvCustomComboEdit.BtnWidthStored: Boolean;
begin
if (FImageKind = ikDefault) and (DefaultImages <> nil) and (DefaultImageIndex >= 0) then
Result := ButtonWidth <> Max(DefaultImages.Width + 6, DefEditBtnWidth)
else
if FImageKind = ikDropDown then
Result := ButtonWidth <> GetSystemMetrics(SM_CXVSCROLL)
else
Result := ButtonWidth <> DefEditBtnWidth;
end;
procedure TJvCustomComboEdit.ButtonClick;
begin
if Assigned(FOnButtonClick) then
FOnButtonClick(Self);
if (FPopup <> nil) and FPopupVisible then
PopupCloseUp(FPopup, True)
else
PopupDropDown(True);
end;
procedure TJvCustomComboEdit.Change;
begin
if not PopupVisible then
DoChange
else
PopupChange;
end;
procedure TJvCustomComboEdit.CreatePopup;
begin
{ Notification }
end;
procedure TJvCustomComboEdit.CreateWnd;
begin
inherited CreateWnd;
UpdateControls;
UpdateMargins;
end;
procedure TJvCustomComboEdit.CustomAlignPosition(Control: TControl; var NewLeft,
NewTop, NewWidth, NewHeight: Integer; var AlignRect: TRect);
begin
if Control = FBtnControl then
UpdateBtnBounds(NewLeft, NewTop, NewWidth, NewHeight);
end;
class function TJvCustomComboEdit.DefaultImageIndex: TImageIndex;
begin
Result := -1;
end;
class function TJvCustomComboEdit.DefaultImages: TCustomImageList;
begin
if GDefaultComboEditImagesList = nil then
GDefaultComboEditImagesList := TImageList.CreateSize(14, 12);
Result := GDefaultComboEditImagesList;
end;
procedure TJvCustomComboEdit.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties(Filer);
Filer.DefineProperty('GlyphKind', ReadGlyphKind, nil, False);
end;
procedure TJvCustomComboEdit.DoChange;
begin
inherited Change;
end;
procedure TJvCustomComboEdit.DoClick;
begin
EditButtonClick(Self);
end;
(*
procedure TJvCustomComboEdit.DoClearText;
begin
Text := '';
end;
procedure TJvCustomComboEdit.DoClipboardCut;
begin
if FDirectInput and not ReadOnly then
inherited DoClipboardCut;
end;
procedure TJvCustomComboEdit.DoClipboardPaste;
begin
if FDirectInput and not ReadOnly then
inherited DoClipboardPaste;
UpdateGroup;
end;
*)
procedure TJvCustomComboEdit.DoCtl3DChanged;
begin
UpdateMargins;
UpdateControls;
end;
procedure TJvCustomComboEdit.DoEnter;
begin
if AutoSelect and not (csLButtonDown in ControlState) then
SelectAll;
inherited DoEnter;
end;
procedure TJvCustomComboEdit.DoFlatChanged;
begin
inherited DoFlatChanged;
UpdateControls;
UpdateMargins;
end;
procedure TJvCustomComboEdit.DoKillFocus(FocusedWnd: HWND);
var
Sender: TWinControl;
begin
inherited DoKillFocus(FocusedWnd);
FFocused := False;
Sender := FindControl(FocusedWnd);
if (Sender <> Self) and (Sender <> FPopup) and
{(Sender <> FButton)} ((FPopup <> nil) and
not FPopup.ContainsControl(Sender)) then
begin
{ MSDN : While processing this message (WM_KILLFOCUS), do not make any
function calls that display or activate a window.
}
AsyncPopupCloseUp(False);
end;
end;
function TJvCustomComboEdit.DoPaintBackGround(Canvas: TCanvas; Param: Integer): Boolean;
begin
Result := True;
if csDestroying in ComponentState then
{ (rb) Implementation diffs; some return True other False }
Exit;
if Enabled then
Result := inherited DoPaintBackGround(Canvas, Param)
else
begin
Canvas.Brush.Color := FDisabledColor;
Canvas.Brush.Style := bsSolid;
Canvas.FillRect(ClientRect);
end;
end;
procedure TJvCustomComboEdit.DoSetFocus(FocusedWnd: HWND);
begin
inherited DoSetFocus(FocusedWnd);
FFocused := True;
// SetShowCaret;
end;
procedure TJvCustomComboEdit.EditButtonClick(Sender: TObject);
begin
if (not FReadOnly) or AlwaysEnableButton then
ButtonClick;
end;
function TJvCustomComboEdit.EditCanModify: Boolean;
begin
Result := not FReadOnly;
end;
procedure TJvCustomComboEdit.EnabledChanged;
begin
inherited EnabledChanged;
Invalidate;
if Assigned(FButton) then
FButton.Enabled := Enabled;
if Assigned(FOnEnabledChanged) then
FOnEnabledChanged(Self);
end;
procedure TJvCustomComboEdit.FontChanged;
begin
inherited FontChanged;
if HandleAllocated then
UpdateMargins;
end;
function TJvCustomComboEdit.GetActionLinkClass: TControlActionLinkClass;
begin
Result := TJvCustomComboEditActionLink;
end;
function TJvCustomComboEdit.GetButtonFlat: Boolean;
begin
Result := FButton.Flat;
end;
function TJvCustomComboEdit.GetButtonHint: string;
begin
Result := FButton.Hint;
end;
function TJvCustomComboEdit.GetButtonWidth: Integer;
begin
if ShowButton then
Result := FButton.Width
else
Result := FSavedButtonWidth;
end;
function TJvCustomComboEdit.GetDirectInput: Boolean;
begin
Result := FDirectInput;
end;
function TJvCustomComboEdit.GetGlyph: TBitmap;
begin
Result := FButton.Glyph;
end;
function TJvCustomComboEdit.GetGlyphKind: TGlyphKind;
begin
Result := TGlyphKind(FImageKind);
end;
procedure TJvCustomComboEdit.GetInternalMargins(var ALeft,
ARight: Integer);
const
CPixelsBetweenEditAndButton = 2;
begin
ARight := ARight + FBtnControl.Width + CPixelsBetweenEditAndButton;
end;
function TJvCustomComboEdit.GetMinHeight: Integer;
var
I: Integer;
begin
I := GetTextHeight;
if BorderStyle = bsSingle then
I := I + GetSystemMetrics(SM_CYBORDER) * 4 + 1;
Result := I;
end;
function TJvCustomComboEdit.GetNumGlyphs: TNumGlyphs;
begin
if ImageKind <> ikCustom then
Result := FNumGlyphs
else
Result := FButton.NumGlyphs;
end;
function TJvCustomComboEdit.GetPopupValue: Variant;
begin
if FPopup is TJvPopupWindow then
Result := TJvPopupWindow(FPopup).GetValue
else
Result := '';
end;
function TJvCustomComboEdit.GetPopupVisible: Boolean;
begin
Result := (FPopup <> nil) and FPopupVisible;
end;
(*
function TJvCustomComboEdit.GetReadOnly: Boolean;
begin
Result := FReadOnly;
end;
*)
function TJvCustomComboEdit.GetSettingCursor: Boolean;
begin
Result := TCustomMaskEditAccessPrivate(Self).FSettingCursor;
end;
function TJvCustomComboEdit.GetShowButton: Boolean;
begin
Result := FBtnControl.Visible;
end;
function TJvCustomComboEdit.GetTextHeight: Integer;
var
DC: HDC;
SaveFont: HFONT;
SysMetrics, Metrics: TTextMetric;
begin
DC := GetDC(0);
try
GetTextMetrics(DC, SysMetrics);
SaveFont := SelectObject(DC, Font.Handle);
GetTextMetrics(DC, Metrics);
SelectObject(DC, SaveFont);
finally
ReleaseDC(0, DC);
end;
// Result := Min(SysMetrics.tmHeight, Metrics.tmHeight); // Polaris
Result := Metrics.tmHeight; // Polaris
end;
procedure TJvCustomComboEdit.HidePopup;
begin
if FPopup is TJvPopupWindow then
TJvPopupWindow(FPopup).Hide;
end;
function TJvCustomComboEdit.IsCustomGlyph: Boolean;
begin
Result := Assigned(Glyph) and (ImageKind = ikCustom);
end;
function TJvCustomComboEdit.IsImageIndexStored: Boolean;
begin
Result :=
not (ActionLink is TJvCustomComboEditActionLink) or
not (ActionLink as TJvCustomComboEditActionLink).IsImageIndexLinked;
end;
procedure TJvCustomComboEdit.KeyDown(var Key: Word; Shift: TShiftState);
//Polaris
var
Form: TCustomForm;
begin
UpdateGroup;
//Polaris
Form := GetParentForm(Self);
if (ssCtrl in Shift) then
case Key of
VK_RETURN:
if (Form <> nil) {and Form.KeyPreview} then
begin
TWinControlAccessProtected(Form).KeyDown(Key, Shift);
Key := 0;
end;
VK_TAB:
if (Form <> nil) {and Form.KeyPreview} then
begin
TWinControlAccessProtected(Form).KeyDown(Key, Shift);
Key := 0;
end;
end;
//Original
inherited KeyDown(Key, Shift);
if (FClickKey = ShortCut(Key, Shift)) and (ButtonWidth > 0) then
begin
EditButtonClick(Self);
Key := 0;
end;
end;
procedure TJvCustomComboEdit.KeyPress(var Key: Char);
var
Form: TCustomForm;
begin
Form := GetParentForm(Self);
//Polaris if (Key = Char(VK_RETURN)) or (Key = Char(VK_ESCAPE)) then
// if (Key = Char(VK_RETURN)) or (Key = Char(VK_ESCAPE)) or ((Key = #10) and PopupVisible) then
if (Key = Cr) or (Key = Esc) or ((Key = Lf) and PopupVisible) then
begin
if PopupVisible then
begin
//Polaris PopupCloseUp(FPopup, Key = Char(VK_RETURN));
PopupCloseUp(FPopup, Key <> Esc);
Key := #0;
end
else
begin
{ must catch and remove this, since is actually multi-line }
TCustomFormAccessProtected(GetParentForm(Self)).NeedKey(Integer(Key), [], WideChar(Key));
if Key = Cr then
begin
inherited KeyPress(Key);
Key := #0;
Exit;
end;
end;
end;
//Polaris
if Key in [Tab, Lf] then
begin
Key := #0;
{ (rb) Next code has no use because Key = #0? }
if (Form <> nil) {and Form.KeyPreview} then
TWinControlAccessProtected(Form).KeyPress(Key);
end;
//Polaris
inherited KeyPress(Key);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -