📄 jvxpbar.pas
字号:
Update;
{$IFDEF VCL}
{$IFDEF COMPILER6_UP}
if not CheckDefaults or (Self.AutoCheck = False) then
Self.AutoCheck := AutoCheck;
{$ENDIF COMPILER6_UP}
{$ENDIF VCL}
if not CheckDefaults or (Self.Caption = '') or (Self.Caption = Self.Name) then
Self.Caption := Caption;
if not CheckDefaults or (Self.Checked = False) then
Self.Checked := Checked;
if not CheckDefaults or Self.Enabled then
Self.Enabled := Enabled;
if not CheckDefaults or (Self.Hint = '') then
Self.Hint := Hint;
if not CheckDefaults or (Self.ImageIndex = -1) then
Self.ImageIndex := ImageIndex;
if not CheckDefaults or Self.Visible then
Self.Visible := Visible;
if not CheckDefaults or not Assigned(Self.OnClick) then
Self.OnClick := OnExecute;
end;
end;
procedure TJvXPBarItem.DrawItem(AWinXPBar: TJvXPCustomWinXPBar; ACanvas: TCanvas;
Rect: TRect; State: TJvXPDrawState; ShowItemFrame: Boolean; Bitmap: TBitmap);
var
ItemCaption: TCaption;
HasImages: Boolean;
LBar: TJvXPCustomWinXPBar;
begin
LBar := (AWinXPBar as TJvXPCustomWinXPBar);
HasImages := Self.Images <> nil;
with ACanvas do
begin
Font.Assign(LBar.Font);
Brush.Color := LBar.Colors.BodyColor;
if not ShowItemFrame then
FillRect(Rect);
if not Self.Enabled then
Font.Color := clGray
else
begin
if dsFocused in State then
begin
if LBar.HotTrack then
begin
if LBar.FHotTrackColor <> clNone then
Font.Color := LBar.FHotTrackColor;
Font.Style := Font.Style + [fsUnderline];
end;
if ShowItemFrame then
begin
Brush.Color := LBar.Colors.FocusedColor;
if LBar.RoundedItemFrame > 0 then
RoundedFrame(ACanvas, Rect, LBar.Colors.FocusedFrameColor, LBar.RoundedItemFrame)
else
begin
FillRect(Rect);
JvXPFrame3D(ACanvas, Rect, LBar.Colors.FocusedFrameColor, LBar.Colors.FocusedFrameColor);
end;
end;
end
else
if dsClicked in State then
begin
if ShowItemFrame then
begin
Brush.Color := LBar.Colors.CheckedColor;
if LBar.RoundedItemFrame > 0 then
RoundedFrame(ACanvas, Rect, LBar.Colors.CheckedFrameColor, LBar.RoundedItemFrame)
else
begin
FillRect(Rect);
JvXPFrame3D(ACanvas, Rect, LBar.Colors.CheckedFrameColor, LBar.Colors.CheckedFrameColor);
end;
end;
end
else
FillRect(Rect);
end;
if HasImages then
begin
Draw(Rect.Left + 1, Rect.Top + (LBar.FItemHeight - Bitmap.Height) div 2, Bitmap);
Inc(Rect.Left, Self.Images.Width + 4);
end
else
Inc(Rect.Left, 4);
ItemCaption := Self.Caption;
if (ItemCaption = '') and ((csDesigning in LBar.ComponentState) or (LBar.ControlCount = 0)) then
ItemCaption := Format(RsUntitledFmt, [RsUntitled, Index]);
SetBkMode(ACanvas.Handle, Windows.TRANSPARENT);
{$IFDEF USEJVCL}
DrawText(ACanvas, ItemCaption, -1, Rect,
DT_SINGLELINE or DT_VCENTER or DT_END_ELLIPSIS);
{$ELSE}
DrawText(ACanvas.Handle, PAnsiChar(ItemCaption), -1, Rect,
DT_SINGLELINE or DT_VCENTER or DT_END_ELLIPSIS);
{$ENDIF USEJVCL}
end;
end;
function TJvXPBarItem.GetActionLinkClass: TJvXPBarItemActionLinkClass;
begin
Result := TJvXPBarItemActionLink;
end;
procedure TJvXPBarItem.Assign(Source: TPersistent);
begin
if Source is TJvXPBarItem then
with TJvXPBarItem(Source) do
begin
Self.Action.Assign(Action);
Self.Caption := Caption;
Self.Data := Data;
Self.DataObject := DataObject;
Self.Enabled := Enabled;
Self.Hint := Hint;
Self.ImageList.Assign(ImageList);
Self.ImageIndex := ImageIndex;
Self.Name := Name;
Self.Tag := Tag;
Self.Visible := Visible;
Self.OnClick := OnClick;
{$IFDEF VCL}
Self.AutoCheck := AutoCheck;
{$ENDIF VCL}
Self.Checked := Checked;
Self.GroupIndex := GroupIndex;
Self.OnDblClick := OnDblClick;
end
else
inherited Assign(Source);
end;
{$IFDEF VCL}
{$IFDEF COMPILER6_UP}
function TJvXPBarItem.IsAutoCheckStored: Boolean;
begin
Result := (ActionLink = nil) or not FActionLink.IsAutoCheckLinked;
end;
{$ENDIF COMPILER6_UP}
{$ENDIF VCL}
function TJvXPBarItem.IsCaptionStored: Boolean;
begin
Result := (ActionLink = nil) or not FActionLink.IsCaptionLinked;
end;
function TJvXPBarItem.IsEnabledStored: Boolean;
begin
Result := (ActionLink = nil) or not FActionLink.IsEnabledLinked;
end;
function TJvXPBarItem.IsHintStored: Boolean;
begin
Result := (ActionLink = nil) or not FActionLink.IsHintLinked;
end;
function TJvXPBarItem.IsImageIndexStored: Boolean;
begin
Result := (ActionLink = nil) or not FActionLink.IsImageIndexLinked;
end;
function TJvXPBarItem.IsVisibleStored: Boolean;
begin
Result := (ActionLink = nil) or not FActionLink.IsVisibleLinked;
end;
function TJvXPBarItem.IsOnClickStored: Boolean;
begin
Result := (ActionLink = nil) or not FActionLink.IsOnExecuteLinked;
end;
function TJvXPBarItem.IsCheckedStored: Boolean;
begin
Result := (ActionLink = nil) or not FActionLink.IsCheckedLinked;
end;
procedure TJvXPBarItem.DoActionChange(Sender: TObject);
begin
if Sender = Action then
ActionChange(Sender, False);
end;
function TJvXPBarItem.GetAction: TBasicAction;
begin
if FActionLink <> nil then
Result := FActionLink.Action
else
Result := nil;
end;
procedure TJvXPBarItem.SetAction(Value: TBasicAction);
begin
if Value = nil then
begin
FActionLink.Free;
FActionLink := nil;
FWinXPBar.InternalRedraw; // redraw image
end
else
begin
if FActionLink = nil then
FActionLink := GetActionLinkClass.Create(Self);
FActionLink.Action := Value;
FActionLink.OnChange := DoActionChange;
ActionChange(Value, csLoading in Value.ComponentState);
Value.FreeNotification(FWinXPBar); // deligates notification to WinXPBar!
end;
end;
procedure TJvXPBarItem.SetCaption(Value: TCaption);
begin
if Value <> FCaption then
begin
FCaption := Value;
FWinXPBar.InternalRedraw;
end;
end;
procedure TJvXPBarItem.SetEnabled(Value: Boolean);
begin
if Value <> FEnabled then
begin
FEnabled := Value;
FWinXPBar.InternalRedraw;
end;
end;
procedure TJvXPBarItem.SetImageIndex(Value: TImageIndex);
begin
if Value <> FImageIndex then
begin
FImageIndex := Value;
FWinXPBar.InternalRedraw;
end;
end;
procedure TJvXPBarItem.SetImageList(Value: TCustomImageList);
begin
if Value <> FImageList then
begin
FImageList := Value;
FWinXPBar.InternalRedraw;
end;
end;
procedure TJvXPBarItem.SetName(const Value: string);
begin
if (Value <> FName) and (FCollection.Find(Value) = nil) then
FName := Value;
end;
procedure TJvXPBarItem.SetVisible(Value: Boolean);
begin
if Value <> FVisible then
begin
FVisible := Value;
FWinXPBar.ItemVisibilityChanged(Self);
FWinXPBar.ResizeToMaxHeight;
end;
end;
procedure TJvXPBarItem.SetGroupIndex(const Value: Integer);
begin
if FGroupIndex <> Value then
begin
FGroupIndex := Value;
if Checked then
TurnSiblingsOff;
end;
end;
procedure TJvXPBarItem.SetChecked(const Value: Boolean);
begin
if FChecked <> Value then
begin
FChecked := Value;
// Change(False);
if Value then
TurnSiblingsOff;
end;
end;
procedure TJvXPBarItem.TurnSiblingsOff;
var
I: Integer;
Item: TJvXPBarItem;
begin
if (GroupIndex <> 0) and Assigned(FWinXPBar) then
begin
for I := 0 to FWinXPBar.Items.Count - 1 do
begin
Item := FWinXPBar.Items[I];
if (Item <> Self) and (Item.GroupIndex = GroupIndex) then
Item.Checked := False;
end;
end;
end;
//=== { TJvXPBarItems } ======================================================
constructor TJvXPBarItems.Create(WinXPBar: TJvXPCustomWinXPBar);
begin
inherited Create(GetItemClass);
FWinXPBar := WinXPBar;
end;
function TJvXPBarItems.Add: TJvXPBarItem;
begin
Result := TJvXPBarItem(inherited Add);
end;
function TJvXPBarItems.Add(Action: TBasicAction): TJvXPBarItem;
begin
Result := Add;
Result.Action := Action;
end;
function TJvXPBarItems.Add(DataObject: TObject): TJvXPBarItem;
begin
Result := Add;
Result.DataObject := DataObject;
end;
function TJvXPBarItems.Insert(Index: Integer): TJvXPBarItem;
begin
Result := TJvXPBarItem(inherited Insert(Index));
end;
function TJvXPBarItems.Insert(Index: Integer; Action: TBasicAction): TJvXPBarItem;
begin
Result := Insert(Index);
Result.Action := Action;
end;
function TJvXPBarItems.Insert(Index: Integer; DataObject: TObject): TJvXPBarItem;
begin
Result := Insert(Index);
Result.DataObject := DataObject;
end;
function TJvXPBarItems.GetOwner: TPersistent;
begin
Result := FWinXPBar;
end;
class function TJvXPBarItems.GetItemClass: TJvXPBarItemClass;
begin
Result := TJvXPBarItem;
end;
function TJvXPBarItems.GetItem(Index: Integer): TJvXPBarItem;
begin
Result := TJvXPBarItem(inherited GetItem(Index));
end;
procedure TJvXPBarItems.SetItem(Index: Integer; Value: TJvXPBarItem);
begin
inherited SetItem(Index, Value);
end;
procedure TJvXPBarItems.Update(Item: TCollectionItem);
begin
FWinXPBar.SortVisibleItems(True);
end;
function TJvXPBarItems.Find(const AName: string): TJvXPBarItem;
var
I: Integer;
begin
Result := nil;
for I := 0 to Count - 1 do
if Items[I].Name = AName then
begin
Result := Items[I];
Break;
end;
end;
function TJvXPBarItems.Find(const Action: TBasicAction): TJvXPBarItem;
var
I: Integer;
begin
Result := nil;
for I := 0 to Count - 1 do
if Items[I].Action = Action then
begin
Result := Items[I];
Break;
end;
end;
function TJvXPBarItems.Find(const DataObject: TObject): TJvXPBarItem;
var
I: Integer;
begin
Result := nil;
for I := 0 to Count - 1 do
if Items[I].DataObject = DataObject then
begin
Result := Items[I];
Break;
end;
end;
//=== { TJvXPBarVisibleItems } ===============================================
constructor TJvXPBarVisibleItems.Create(WinXPBar: TJvXPCustomWinXPBar);
begin
inherited Create;
FItems := TList.Create;
FWinXPBar := WinXPBar;
end;
destructor TJvXPBarVisibleItems.Destroy;
begin
FItems.Free;
inherited Destroy;
end;
function TJvXPBarVisibleItems.GetItem(Index: Integer): TJvXPBarItem;
begin
Result := nil;
if Index < FItems.Count then
Result := FItems[Index];
end;
function TJvXPBarVisibleItems.Count: Integer;
begin
Result := FItems.Count;
end;
function TJvXPBarVisibleItems.Exists(Item: TJvXPBarItem): Boolean;
var
I: Integer;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -