📄 jvspeedbarform.pas
字号:
NewSRow := FSelectData.sRow;
if (SectionList.RowCount > FSelectData.sRowCount) or
(NewSRow > SectionList.RowCount - 1) then
NewSRow := SectionList.RowCount - 1;
if NewSRow < 0 then
NewSRow := 0;
SectionList.Row := NewSRow;
SetSection(SectionList.Row); { set ButtonsList to current section }
NewBRow := FSelectData.bRow;
if (ButtonsList.RowCount > FSelectData.bRowCount) or
(NewBRow > ButtonsList.RowCount - 1) then
NewBRow := ButtonsList.RowCount - 1;
if NewBRow < 0 then
NewBRow := 0;
ButtonsList.Row := NewBRow;
end;
procedure TJvSpeedbarEditorMain.UpdateEnabled(BtnRow, Section: Integer);
var
EnableSect, EnableBtn: Boolean;
begin
EnableSect := CheckSpeedBar and (FBar.SectionCount > 0);
EnableBtn := EnableSect and (BtnRow >= 0) and (ItemBySectionRow(Section,
BtnRow) <> nil);
DelSection.Enabled := EnableSect;
SectionName.Enabled := EnableSect;
AddButton.Enabled := EnableSect;
RemoveButton.Enabled := EnableBtn;
CopyMenu.Enabled := EnableBtn;
CutMenu.Enabled := EnableBtn;
PasteMenu.Enabled := EnableSect and ClipboardComponents;
UpBtn.Enabled := EnableBtn and (BtnRow > 0);
DownBtn.Enabled := EnableBtn and (BtnRow < ButtonsList.RowCount - 1);
end;
function TJvSpeedbarEditorMain.CheckSpeedBar: Boolean;
begin
Result := (FBar <> nil) and (FBar.Owner <> nil) and (FBar.Parent <> nil) and
{$IFDEF COMPILER6_UP}
(Designer.Root <> nil);
{$ELSE}
(Designer.Form <> nil);
{$ENDIF COMPILER6_UP}
end;
function TJvSpeedbarEditorMain.CurrentSection: Integer;
begin
if CheckSpeedBar and (FBar.SectionCount > 0) then
Result := SectionList.Row
else
Result := -1;
end;
procedure TJvSpeedbarEditorMain.SetSection(Section: Integer);
var
I: Integer;
begin
if CheckSpeedBar then
begin
I := Section;
if (I >= 0) and (I < FBar.SectionCount) then
begin
SectionName.Text := TJvSpeedbarSection(FBar.Sections[I]).Caption;
ButtonsList.RowCount := FBar.ItemsCount(I);
end
else
begin
SectionName.Text := '';
ButtonsList.RowCount := 0;
end;
SectionList.DefaultColWidth := SectionList.ClientWidth;
ButtonsList.DefaultColWidth := ButtonsList.ClientWidth;
end;
end;
procedure TJvSpeedbarEditorMain.UpdateData;
begin
Inc(FLocked);
try
SaveSelection;
if CheckSpeedBar then
SectionList.RowCount := FBar.SectionCount
else
SectionList.RowCount := 0;
RestoreSelection; { set section }
finally
Dec(FLocked);
end;
UpdateEnabled(ButtonsList.Row, SectionList.Row);
SelectButton(CurrentSection, ItemByRow(ButtonsList.Row), False);
end;
function TJvSpeedbarEditorMain.GetForm: TCustomForm;
begin
{$IFDEF COMPILER6_UP}
Result := TCustomForm(Designer.Root); { GetParentForm(FBar) }
{$ELSE}
Result := Designer.Form; { GetParentForm(FBar) }
{$ENDIF COMPILER6_UP}
end;
procedure TJvSpeedbarEditorMain.UpdateListHeight;
var
Cnt: Integer;
MaxHeight: Integer;
begin
Canvas.Font := Font;
MaxHeight := MulDiv(MaxBtnListHeight, Screen.PixelsPerInch, 96);
ButtonsList.DefaultRowHeight := FBar.BtnHeight + 2;
Cnt := Max(1, Max(ButtonsList.ClientHeight, MaxHeight) div (FBar.BtnHeight + 2));
ButtonsList.ClientHeight := Min(ButtonsList.DefaultRowHeight * Cnt, MaxHeight);
SectionList.DefaultRowHeight := CanvasMaxTextHeight(Canvas) + 2;
end;
procedure TJvSpeedbarEditorMain.SetJvSpeedBar(Value: TJvSpeedBar);
var
I: Integer;
begin
if FBar <> Value then
begin
if FBar <> nil then
FBar.SetEditing(0);
FBar := Value;
if FBar <> nil then
FBar.SetEditing(Handle);
Inc(FLocked);
try
if FBar <> nil then
UpdateListHeight;
if FBar.SectionCount = 0 then
NewSectionClick(Self)
else
for I := 0 to FBar.SectionCount - 1 do
if FBar.Sections[I].Name = '' then
begin
FBar.Sections[I].Name := UniqueName(FBar.Sections[I]);
Designer.Modified;
end;
if ButtonsList.RowCount > 0 then
ActiveControl := ButtonsList
else
ActiveControl := SectionList;
UpdateData;
ButtonsList.Row := 0;
finally
Dec(FLocked);
end;
SectionList.Row := 0;
end;
end;
procedure TJvSpeedbarEditorMain.CMSpeedBarChanged(var Msg: TMessage);
begin
if Pointer(Msg.LParam) = FBar then
case Msg.WParam of
SBR_CHANGED:
Designer.Modified;
SBR_DESTROYED:
Close;
SBR_BTNSIZECHANGED:
if FBar <> nil then
UpdateListHeight;
end
else
if (Msg.WParam = SBR_BTNSELECT) and CheckSpeedBar then
begin
SelectButton(-1, nil, True);
Designer.Modified;
end;
end;
function TJvSpeedbarEditorMain.ItemBySectionRow(Section, Row: Integer): TJvSpeedItem;
begin
if CheckSpeedBar then
Result := FBar.Items(Section, Row)
else
Result := nil;
end;
function TJvSpeedbarEditorMain.SectionByRow(Row: Integer): TJvSpeedbarSection;
begin
if CheckSpeedBar and (Row >= 0) and (Row < FBar.SectionCount) then
Result := FBar.Sections[Row]
else
Result := nil;
end;
function TJvSpeedbarEditorMain.ItemByRow(Row: Integer): TJvSpeedItem;
begin
Result := ItemBySectionRow(CurrentSection, Row);
end;
procedure TJvSpeedbarEditorMain.NewSectionClick(Sender: TObject);
var
S: string;
I: Integer;
begin
if CheckSpeedBar then
begin
I := 0;
repeat
S := Format(RsNewSectionName, [I]);
Inc(I);
until FBar.SearchSection(S) < 0;
I := NewSpeedSection(FBar, S);
if I >= 0 then
FBar.Sections[I].Name := UniqueName(FBar.Sections[I]);
ActiveControl := SectionName;
Designer.Modified;
end;
end;
procedure TJvSpeedbarEditorMain.DelSectionClick(Sender: TObject);
var
Sect: Integer;
Item: TJvSpeedItem;
begin
if CheckSpeedBar and ConfirmDelete then
begin
Sect := SectionList.Row;
if (Sect >= 0) and (Sect < FBar.SectionCount) then
begin
// Self.ValidateRename(FBar.Sections[Sect],
{$IFDEF COMPILER6_UP}
TCustomForm(Designer.Root).Designer.ValidateRename(FBar.Sections[Sect],
FBar.Sections[Sect].Name, '');
{$ELSE}
Designer.ValidateRename(FBar.Sections[Sect],
FBar.Sections[Sect].Name, '');
{$ENDIF COMPILER6_UP}
try
while FBar.ItemsCount(Sect) > 0 do
begin
Item := FBar.Items(Sect, 0);
if Item <> nil then
begin
OwnerForm.RemoveComponent(Item);
Item.Free;
end;
end;
FBar.RemoveSection(Sect);
finally
Designer.Modified;
end;
end;
end;
end;
procedure TJvSpeedbarEditorMain.Copy;
var
CompList: TDesignerSelectionList;
Item: TJvSpeedItem;
begin
{$IFDEF COMPILER6_UP}
CompList := TDesignerSelections.Create;
{$ELSE}
CompList := TDesignerSelectionList.Create;
{$ENDIF COMPILER6_UP}
{$IFNDEF COMPILER6_UP}
try
{$ENDIF !COMPILER6_UP}
Item := ItemByRow(ButtonsList.Row);
if Item <> nil then
begin
Item.InvalidateItem;
CompList.Add(Item);
CopyComponents(OwnerForm, CompList);
Item.UpdateSection;
end;
{$IFNDEF COMPILER6_UP}
finally
CompList.Free;
end;
{$ENDIF !COMPILER6_UP}
end;
procedure TJvSpeedbarEditorMain.Paste;
var
CompList: TDesignerSelectionList;
begin
if CheckSpeedBar then
begin
{$IFDEF COMPILER6_UP}
CompList := TDesignerSelections.Create;
{$ELSE}
CompList := TDesignerSelectionList.Create;
{$ENDIF COMPILER6_UP}
{$IFNDEF COMPILER6_UP}
try
{$ENDIF !COMPILER6_UP}
FBar.OnAddItem := OnPasteItem;
try
PasteComponents(OwnerForm, FBar, CompList);
finally
FBar.OnAddItem := nil;
end;
UpdateData;
{$IFNDEF COMPILER6_UP}
finally
CompList.Free;
end;
{$ENDIF !COMPILER6_UP}
end;
end;
procedure TJvSpeedbarEditorMain.Cut;
begin
Copy;
RemoveButtonClick(Self);
end;
procedure TJvSpeedbarEditorMain.OnPasteItem(Item: TObject);
begin
if Item <> nil then
if CheckSpeedBar and (Item is TJvSpeedItem) then
begin
TJvSpeedItem(Item).ASection := CurrentSection;
TJvSpeedItem(Item).Visible := False;
end;
end;
procedure TJvSpeedbarEditorMain.AddButtonClick(Sender: TObject);
var
I: Integer;
Item: TJvSpeedItem;
begin
I := CurrentSection;
if I < 0 then
Exit;
Item := TJvSpeedItem.Create(OwnerForm);
if Item <> nil then
try
FBar.AddItem(I, Item);
Item.Name := UniqueName(Item);
Designer.Modified;
if Sender <> nil then
ActivateInspector(#0);
except
Item.Free;
raise;
end
else
raise EJvSpeedbarError.CreateRes(@RsESBItemNotCreate);
end;
procedure TJvSpeedbarEditorMain.RemoveButtonClick(Sender: TObject);
var
Item: TJvSpeedItem;
begin
Item := ItemByRow(ButtonsList.Row);
if Item <> nil then
begin
Self.ValidateRename(Item, Item.Name, '');
OwnerForm.RemoveComponent(Item);
Item.Free;
Designer.Modified;
end;
end;
procedure TJvSpeedbarEditorMain.CloseBtnClick(Sender: TObject);
begin
Close;
end;
procedure TJvSpeedbarEditorMain.UpBtnClick(Sender: TObject);
var
I, Sect: Integer;
begin
if CheckSpeedBar and FBar.FindItem(ItemByRow(ButtonsList.Row), Sect, I) then
if I > 0 then
begin
FBar.Sections[Sect].List.Move(I, I - 1);
Designer.Modified;
ButtonsList.Invalidate;
ButtonsList.Row := ButtonsList.Row - 1;
end;
end;
procedure TJvSpeedbarEditorMain.DownBtnClick(Sender: TObject);
var
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -