📄 toolctrlseh.pas
字号:
end;
end;
function TEditButtonControlEh.GetTimer: TTimer;
begin
if FTimer = nil then
begin
FTimer := TTimer.Create(Self);
FTimer.Enabled := False;
FTimer.OnTimer := TimerEvent;
end;
Result := FTimer;
end;
procedure TEditButtonControlEh.ResetTimer(Interval: Cardinal);
begin
if Timer.Enabled = False then
begin
Timer.Interval := Interval;
Timer.Enabled := True;
end
else if Interval <> Timer.Interval then
begin
Timer.Enabled := False;
Timer.Interval := Interval;
Timer.Enabled := True;
end;
end;
procedure TEditButtonControlEh.TimerEvent(Sender: TObject);
var AutoRepeat: Boolean;
begin
if Style = ebsUpDownEh
then AutoRepeat := True
else AutoRepeat := False;
if not (FState = bsDown) then Exit;
if Timer.Interval = Cardinal(InitRepeatPause) then
ResetTimer(RepeatPause);
if FState = bsDown then
EditButtonDown(FButtonNum = 1, AutoRepeat);
if not AutoRepeat then Timer.Enabled := False;
end;
procedure TEditButtonControlEh.SetAlwaysDown(const Value: Boolean);
begin
if FAlwaysDown <> Value then
begin
FAlwaysDown := Value;
if Value then
begin
GroupIndex := 1;
Down := True;
AllowAllUp := False;
FButtonNum := 1;
end else
begin
AllowAllUp := True;
Down := False;
GroupIndex := 0;
FButtonNum := 0;
end;
end;
end;
{ TEditButtonEh }
constructor TEditButtonEh.Create(EditControl: TWinControl {; EditButtonControl: TEditButtonControlEh});
begin
inherited Create(nil);
FEditControl := EditControl;
FGlyph := TBitmap.Create;
FGlyph.Transparent := True;
FShortCut := scNone; //Menus.ShortCut(VK_DOWN, [ssAlt]); //32808
FNumGlyphs := 1;
end;
constructor TEditButtonEh.Create(Collection: TCollection);
begin
if Assigned(Collection) then Collection.BeginUpdate;
try
inherited Create(Collection);
FEditControl := nil;
FGlyph := TBitmap.Create;
FGlyph.Transparent := True;
FShortCut := scNone; //Menus.ShortCut(VK_DOWN, [ssAlt]); //32808
FNumGlyphs := 1;
finally
if Assigned(Collection) then Collection.EndUpdate;
end;
end;
destructor TEditButtonEh.Destroy;
begin
FGlyph.Free;
inherited Destroy;
end;
procedure TEditButtonEh.Assign(Source: TPersistent);
begin
if Source is TEditButtonEh then
begin
DropdownMenu := TEditButtonEh(Source).DropdownMenu;
Glyph := TEditButtonEh(Source).Glyph;
Hint := TEditButtonEh(Source).Hint;
NumGlyphs := TEditButtonEh(Source).NumGlyphs;
ShortCut := TEditButtonEh(Source).ShortCut;
Style := TEditButtonEh(Source).Style;
Visible := TEditButtonEh(Source).Visible;
Width := TEditButtonEh(Source).Width;
OnClick := TEditButtonEh(Source).OnClick;
OnDown := TEditButtonEh(Source).OnDown;
end else
inherited Assign(Source);
end;
function TEditButtonEh.GetGlyph: TBitmap;
begin
Result := FGlyph;
end;
procedure TEditButtonEh.SetGlyph(const Value: TBitmap);
begin
FGlyph.Assign(Value);
Changed;
end;
procedure TEditButtonEh.SetNumGlyphs(Value: Integer);
begin
if Value <= 0 then Value := 1
else if Value > 4 then Value := 4;
if Value <> FNumGlyphs then
begin
FNumGlyphs := Value;
Changed;
end;
end;
procedure TEditButtonEh.SetStyle(const Value: TEditButtonStyleEh);
begin
if FStyle <> Value then
begin
FStyle := Value;
Changed;
end;
end;
procedure TEditButtonEh.SetWidth(const Value: Integer);
begin
if FWidth <> Value then
begin
FWidth := Value;
Changed;
end;
end;
procedure TEditButtonEh.SetVisible(const Value: Boolean);
begin
if FVisible <> Value then
begin
FVisible := Value;
Changed;
end;
end;
function TEditButtonEh.CreateEditButtonControl: TEditButtonControlEh;
begin
Result := TEditButtonControlEh.Create(FEditControl);
with Result do
begin
ControlStyle := ControlStyle + [csReplicatable];
Width := 10;
Height := 17;
Visible := True;
Transparent := False;
Parent := FEditControl;
end;
end;
procedure TEditButtonEh.Changed;
begin
if Assigned(FOnChanged) then
FOnChanged(Self)
else if Assigned(Collection) then
Changed(False)
end;
procedure TEditButtonEh.SetHint(const Value: String);
begin
if FHint <> Value then
begin
FHint := Value;
Changed;
end;
end;
{ TEditButtonsEh }
function TEditButtonsEh.Add: TEditButtonEh;
begin
Result := TEditButtonEh(inherited Add);
end;
constructor TEditButtonsEh.Create(Owner: TPersistent; EditButtonClass: TEditButtonEhClass);
begin
inherited Create(EditButtonClass);
FOwner := Owner;
end;
function TEditButtonsEh.GetEditButton(Index: Integer): TEditButtonEh;
begin
Result := TEditButtonEh(inherited Items[Index]);
end;
function TEditButtonsEh.GetOwner: TPersistent;
begin
// inherited GetOwner;
Result := FOwner;
end;
procedure TEditButtonsEh.SetEditButton(Index: Integer; Value: TEditButtonEh);
begin
inherited Items[Index] := Value;
end;
procedure TEditButtonsEh.Update(Item: TCollectionItem);
begin
inherited Update(Item);
if Assigned(FOnChanged) then FOnChanged(Item);
end;
{ TDropDownEditButtonEh }
constructor TDropDownEditButtonEh.Create(Collection: TCollection);
begin
inherited Create(Collection);
FShortCut := Menus.ShortCut(VK_DOWN, [ssAlt]); //32808
end;
constructor TDropDownEditButtonEh.Create(EditControl: TWinControl);
begin
inherited Create(EditControl);
FShortCut := Menus.ShortCut(VK_DOWN, [ssAlt]); //32808
end;
{ TVisibleEditButtonEh }
constructor TVisibleEditButtonEh.Create(EditControl: TWinControl);
begin
inherited Create(EditControl);
FVisible := True;
FShortCut := Menus.ShortCut(VK_DOWN, [ssAlt]); //32808
end;
constructor TVisibleEditButtonEh.Create(Collection: TCollection);
begin
inherited Create(Collection);
FVisible := True;
FShortCut := Menus.ShortCut(VK_DOWN, [ssAlt]); //32808
end;
{ TSpecRowEh }
constructor TSpecRowEh.Create(Owner: TPersistent);
begin
inherited Create;
FOwner := Owner;
FFont := TFont.Create;
FFont.Assign(DefaultFont);
FFont.OnChange := FontChanged;
FCellsStrings := TStringList.Create;
FValue := Null;
FShowIfNotInKeyList := True;
FShortCut := Menus.ShortCut(VK_DELETE, [ssAlt]); //32814
end;
destructor TSpecRowEh.Destroy;
begin
FCellsStrings.Free;
FFont.Free;
inherited Destroy;
end;
function TSpecRowEh.GetOwner: TPersistent;
begin
Result := FOwner;
end;
procedure TSpecRowEh.Changed;
begin
if (FUpdateCount = 0) and Assigned(FOnChanged) then
OnChanged(Self);
end;
procedure SetCellsStrings(Strings: TStrings; const Value: String);
const
Delimiter = ';';
QuoteChar = '"';
var
P, P1: PChar;
S: string;
begin
Strings.BeginUpdate;
try
Strings.Clear;
P := PChar(Value);
while P^ in [#1..#31] do P := CharNext(P);
while P^ <> #0 do
begin
if P^ = QuoteChar then
S := AnsiExtractQuotedStr(P, QuoteChar)
else
begin
P1 := P;
while (P^ >= ' ') and (P^ <> Delimiter) do P := CharNext(P);
SetString(S, P1, P - P1);
end;
Strings.Add(S);
while P^ in [#1..#31] do P := CharNext(P);
if P^ = Delimiter then
repeat
P := CharNext(P);
until not (P^ in [#1..#31]);
end;
finally
Strings.EndUpdate;
end;
end;
procedure TSpecRowEh.SetCellsText(const Value: String);
begin
if FCellsText <> Value then
begin
FCellsText := Value;
SetCellsStrings(FCellsStrings, Value);
Changed;
end;
end;
procedure TSpecRowEh.SetColor(const Value: TColor);
begin
if FColor <> Value then
begin
FColor := Value;
FColorAssigned := True;
Changed;
end;
end;
procedure TSpecRowEh.SetFont(const Value: TFont);
begin
FFont.Assign(Value);
end;
procedure TSpecRowEh.SetValue(const Value: Variant);
begin
if FValue <> Value then
begin
FValue := Value;
Changed;
end;
end;
procedure TSpecRowEh.SetVisible(const Value: Boolean);
begin
if FVisible <> Value then
begin
FVisible := Value;
Changed;
end;
end;
procedure TSpecRowEh.FontChanged(Sender: TObject);
begin
Changed;
FFontAssigned := True;
end;
procedure TSpecRowEh.SetShowIfNotInKeyList(const Value: Boolean);
begin
if FShowIfNotInKeyList <> Value then
begin
FShowIfNotInKeyList := Value;
Changed;
end;
end;
procedure TSpecRowEh.Assign(Source: TPersistent);
begin
if Source is TSpecRowEh then
begin
BeginUpdate;
try
CellsText := TSpecRowEh(Source).CellsText;
Color := TSpecRowEh(Source).Color;
if TSpecRowEh(Source).FFontAssigned then
Font := TSpecRowEh(Source).Font;
ShortCut := TSpecRowEh(Source).ShortCut;
ShowIfNotInKeyList := TSpecRowEh(Source).ShowIfNotInKeyList;
Value := TSpecRowEh(Source).Value;
Visible := TSpecRowEh(Source).Visible;
finally
EndUpdate;
end;
end else
inherited Assign(Source);
end;
function TSpecRowEh.GetFont: TFont;
var
Save: TNotifyEvent;
begin
if not FFontAssig
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -