📄 jvqcomctrls.pas
字号:
begin
if FDisabledColorFrom <> Value then
begin
FDisabledColorFrom := Value;
Change;
end;
end;
procedure TJvTabDefaultPainter.SetDisabledColorTo(const Value: TColor);
begin
if FDisabledColorTo <> Value then
begin
FDisabledColorTo := Value;
Change;
end;
end;
procedure TJvTabDefaultPainter.SetDisabledFont(const Value: TFont);
begin
FDisabledFont.Assign(Value);
end;
procedure TJvTabDefaultPainter.SetDisabledGradientDirection(
const Value: TFillDirection);
begin
if FDisabledGradientDirection <> Value then
begin
FDisabledGradientDirection := Value;
Change;
end;
end;
procedure TJvTabDefaultPainter.SetInactiveColorFrom(const Value: TColor);
begin
if FInactiveColorFrom <> Value then
begin
FInactiveColorFrom := Value;
Change;
end;
end;
procedure TJvTabDefaultPainter.SetInactiveColorTo(const Value: TColor);
begin
if FInactiveColorTo <> Value then
begin
FInactiveColorTo := Value;
Change;
end;
end;
procedure TJvTabDefaultPainter.SetInactiveFont(const Value: TFont);
begin
FInactiveFont.Assign(Value);
end;
procedure TJvTabDefaultPainter.SetInactiveGradientDirection(const Value: TFillDirection);
begin
if FInactiveGradientDirection <> Value then
begin
FInactiveGradientDirection := Value;
Change;
end;
end;
function TJvTabDefaultPainter.IsActiveFontStored: Boolean;
begin
Result := True;
end;
function TJvTabDefaultPainter.IsDisabledFontStored: Boolean;
begin
Result := True;
end;
function TJvTabDefaultPainter.IsInactiveFontStored: Boolean;
begin
Result := True;
end;
//=== { TJvTabControl } ======================================================
constructor TJvTabControl.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
InputKeys := [ikTabs];
end;
procedure TJvTabControl.KeyDown(var Key: Word; Shift: TShiftState);
begin
if (Key = VK_TAB) and (Shift * KeyboardShiftStates >= [ssCtrl]) then
begin
if (Shift * KeyboardShiftStates >= [ssShift]) then
begin
if TabIndex = 0 then
TabIndex := Tabs.Count - 1
else
TabIndex := TabIndex - 1;
end
else
TabIndex := (TabIndex + 1) mod Tabs.Count;
Key := 0;
end
else
inherited KeyDown(Key, Shift);
end;
procedure TJvTabControl.MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
var
I: Integer;
R: TRect;
P: TPoint;
begin
if RightClickSelect and (Button = mbRight) then
begin
P := Point(X,Y);
for I := 0 to Tabs.Count -1 do
begin
R := TabRect(I);
if PtInRect(R, P) then
begin
if (TabIndex <> I) and CanChange then
begin
TabIndex := I;
Change;
end;
Break;
end;
end;
end;
inherited MouseDown(Button, Shift, X, Y);
end;
function TJvTabControl.DrawTab(TabIndex: Integer; const Rect: TRect; Active: Boolean): Boolean;
begin
Result := True;
if Assigned(TabPainter) then
TabPainter.DrawTab(Self, Canvas, Images, TabIndex, Tabs[TabIndex].Caption, Rect, TabIndex = Self.TabIndex, Enabled)
else
Result := inherited DrawTab(TabIndex, Rect, Active);
end;
procedure TJvTabControl.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (AComponent = TabPainter) then
TabPainter := nil;
end;
procedure TJvTabControl.SetTabPainter(const Value: TJvTabControlPainter);
begin
if FTabPainter <> Value then
begin
if FTabPainter <> nil then
FTabPainter.UnRegisterChange(Self);
FTabPainter := Value;
if FTabPainter <> nil then
begin
FTabPainter.FreeNotification(Self);
FTabPainter.RegisterChange(Self);
end;
Invalidate;
end;
end;
//=== { TJvPageControl } =====================================================
constructor TJvPageControl.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FClientBorderWidth := JvDefPageControlBorder;
FHintSource := hsDefault;
end;
function TJvPageControl.FormKeyPreview: Boolean;
var
F: TCustomForm;
begin
F := GetParentForm(Self);
if F <> nil then
Result := F.KeyPreview
else
Result := False;
end;
function TJvPageControl.WantKey(Key: Integer; Shift: TShiftState;
const KeyText: WideString): Boolean;
var
ThisTab, Tab: TTabSheet;
Forwrd: Boolean;
begin
Result := False;
if HandleGlobalTab and not FormKeyPreview and
(Key = VK_TAB) and (Shift * KeyboardShiftStates >= [ssCtrl]) then
begin
ThisTab := ActivePage;
Forwrd := (Shift * KeyboardShiftStates >= [ssShift]);
Tab := ThisTab;
repeat
Tab := FindNextPage(Tab, Forwrd, True);
until (Tab = nil) or Tab.Enabled or (Tab = ThisTab);
if Tab <> ThisTab then
begin
if CanChange then
begin
ActivePage := Tab;
Result := True;
Change;
end;
Exit;
end;
end;
Result := inherited WantKey(Key, Shift, KeyText);
end;
function TJvPageControl.DrawTab(TabIndex: Integer; const Rect: TRect;
Active: Boolean): Boolean;
var
I, RealIndex: Integer;
begin
Result := False;
if TabPainter <> nil then
begin
RealIndex := 0;
I := 0;
while I <= TabIndex + RealIndex do
begin
if not Pages[I].TabVisible then Inc(RealIndex);
Inc(I);
end;
RealIndex := RealIndex + TabIndex;
if RealIndex < PageCount then
TabPainter.DrawTab(Self, Canvas, Images, Pages[RealIndex].ImageIndex, Pages[RealIndex].Caption, Rect, Active, Pages[RealIndex].Enabled);
end
else Result := inherited DrawTab(TabIndex, Rect, Active);
end;
procedure TJvPageControl.Loaded;
begin
inherited Loaded;
HideAllTabs := FHideAllTabs;
end;
procedure TJvPageControl.SetClientBorderWidth(const Value: TBorderWidth);
begin
if FClientBorderWidth <> Value then
begin
FClientBorderWidth := Value;
RecreateWnd;
end;
end;
procedure TJvPageControl.SetHideAllTabs(const Value: Boolean);
var
I: Integer;
SaveActivePage: TTabSheet;
begin
FHideAllTabs := Value;
if (csDesigning in ComponentState) then
Exit;
if HandleAllocated then
begin
SaveActivePage := ActivePage;
for I := 0 to PageCount - 1 do
Pages[I].TabVisible := Pages[I].TabVisible and not FHideAllTabs;
ActivePage := SaveActivePage;
if FHideAllTabs and (SaveActivePage <> nil) then
SaveActivePage.TabStop := False;
end;
end;
procedure TJvPageControl.UpdateTabImages;
begin
inherited UpdateTabImages;
end;
function TJvPageControl.HintShow(var HintInfo: THintInfo): Boolean;
var
TabNo: Integer;
Tab: TTabSheet;
begin
Result := inherited HintShow(HintInfo);
if (FHintSource = hsDefault) or Result or (Self <> HintInfo.HintControl) then
Exit;
(*
hsDefault, // use default hint behaviour (i.e as regular control)
hsForceMain, // use the main controls hint even if subitems have hints
hsForceChildren, // always use subitems hints even if empty and main control has hint
hsPreferMain, // use main control hint unless empty then use subitems hints
hsPreferChildren // use subitems hints unless empty then use main control hint
);
*)
with HintInfo.CursorPos do
TabNo := IndexOfTabAt(X, Y); // X&Y are expected in Client coordinates
if (TabNo >= 0) and (TabNo < PageCount) then
Tab := Pages[TabNo]
else
Tab := nil;
if (FHintSource = hsForceMain) or ((FHintSource = hsPreferMain) and (GetShortHint(Hint) <> '')) then
HintInfo.HintStr := GetShortHint(Self.Hint)
else
if (Tab <> nil) and
((FHintSource = hsForceChildren) or ((FHintSource = hsPreferChildren) and (GetShortHint(Tab.Hint) <> '')) or
((FHintSource = hsPreferMain) and (GetShortHint(Hint) = ''))) then
begin
HintInfo.HintStr := GetShortHint(Tab.Hint);
HintInfo.CursorRect := TabRect(TabNo);
end;
end;
type
TTabSheetAccessProtected = class(TTabSheet);
function TJvPageControl.CanChange: Boolean;
begin
Result := inherited CanChange;
if Result and (ActivePage <> nil) and ReduceMemoryUse then
TTabSheetAccessProtected(ActivePage).DestroyHandle;
end;
procedure TJvPageControl.SetReduceMemoryUse(const Value: Boolean);
begin
FReduceMemoryUse := Value;
end;
procedure TJvPageControl.SetTabPainter(const Value: TJvTabControlPainter);
begin
if FTabPainter <> Value then
begin
if FTabPainter <> nil then
FTabPainter.UnRegisterChange(Self);
FTabPainter := Value;
if FTabPainter <> nil then
begin
FTabPainter.FreeNotification(Self);
FTabPainter.RegisterChange(Self);
end;
Invalidate;
end;
end;
procedure TJvPageControl.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (AComponent = TabPainter) then
TabPainter := nil;
end;
procedure TJvPageControl.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
I: Integer;
R: TRect;
P: TPoint;
begin
if RightClickSelect and (Button = mbRight) then
begin
P := Point(X,Y);
for I := 0 to PageCount -1 do
begin
R := TabRect(I);
if PtInRect(R, P) then
begin
if (ActivePageIndex <> I) and CanChange then
begin
ActivePageIndex := I;
Change;
end;
Break;
end;
end;
end;
inherited MouseDown(Button, Shift, X, Y);
end;
//=== { TJvTrackBar } ========================================================
constructor TJvTrackBar.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
// ControlStyle := ControlStyle + [csAcceptsControls];
FShowRange := True;
end;
procedure TJvTrackBar.MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
begin
inherited MouseUp(Button, Shift, X, Y);
if Assigned(FOnChanged) then
FOnChanged(Self);
end;
procedure TJvTrackBar.SetShowRange(const Value: Boolean);
begin
if FShowRange <> Value then
begin
FShowRange := Value;
RecreateWnd;
end;
end;
//=== { TJvTreeNode } ========================================================
procedure TJvTabDefaultPainter.SetGlyphLayout(const Value: TButtonLayout);
begin
if FGlyphLayout <> Value then
begin
FGlyphLayout := Value;
Change;
end;
end;
procedure TJvTabDefaultPainter.SetDivider(const Value: Boolean);
begin
if FDivider <> Value then
begin
FDivider := Value;
Change;
end;
end;
procedure TJvTabDefaultPainter.SetShowFocus(const Value: Boolean);
begin
if FShowFocus <> Value then
begin
FShowFocus := Value;
Change;
end;
end;
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$RCSfile: JvQComCtrls.pas,v $';
Revision: '$Revision: 1.13 $';
Date: '$Date: 2005/02/06 14:06:02 $';
LogPath: 'JVCL\run'
);
initialization
RegisterUnitVersion(HInstance, UnitVersioning);
finalization
UnregisterUnitVersion(HInstance);
{$ENDIF UNITVERSIONING}
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -