📄 jvqxpcore.pas
字号:
// delegate message "ParentColorChanged" to hook.
inherited ParentColorChanged;
HookParentColorChanged;
end;
procedure TJvXPCustomControl.ParentFontChanged;
begin
// delegate message "ParentFontChanged" to hook.
inherited ParentFontChanged;
HookParentFontChanged;
end;
procedure TJvXPCustomControl.TextChanged;
begin
// delegate message "TextChanged" to hook.
inherited TextChanged;
HookTextChanged;
end;
procedure TJvXPCustomControl.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
// delegate message "MouseMove" to hook.
inherited MouseMove(Shift, X, Y);
HookMouseMove(X, Y);
end;
procedure TJvXPCustomControl.AdjustSize;
begin
// delegate message "Size" to hook.
inherited AdjustSize;
HookResized;
end;
(*
procedure TJvXPCustomControl.WMWindowPosChanged(var Msg: TWMWindowPosChanged);
begin
// delegate message "WindowPosChanged" to hook.
inherited;
HookPosChanged;
end;
*)
procedure TJvXPCustomControl.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// delegate message "MouseDown" to hook.
inherited MouseDown(Button, Shift, X, Y);
if Button = mbLeft then
begin
FClicking := True;
HookMouseDown;
end;
end;
procedure TJvXPCustomControl.MouseUp(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// delegate message "MouseUp" to hook.
inherited MouseUp(Button, Shift, X, Y);
if FClicking then
begin
FClicking := False;
HookMouseUp;
end;
end;
procedure TJvXPCustomControl.Click;
var
Form: TCustomForm;
begin
Form := GetParentForm(Self);
if Form <> nil then
Form.ModalResult := ModalResult;
inherited Click;
end;
//
// hooks are used to interrupt default windows messages in an easier
// way - it's possible to override them in descendant classes.
// Beware of multiple redraw calls - if you know that the calling
// hooks always redraws the component, use the lock i.e. unlock methods
// (rom) or LockedInvalidate.
procedure TJvXPCustomControl.HookBorderChanged;
begin
// this hook is called, if the border property was changed.
// in that case we normaly have to redraw the control.
if csRedrawBorderChanged in ExControlStyle then
InternalRedraw;
end;
procedure TJvXPCustomControl.HookEnabledChanged;
begin
// this hook is called, if the enabled property was switched.
// in that case we normaly have to redraw the control.
if csRedrawEnabledChanged in ExControlStyle then
InternalRedraw;
end;
procedure TJvXPCustomControl.HookFocusedChanged;
begin
// this hook is called, if the currently focused control was changed.
if Focused then
Include(FDrawState, dsFocused)
else
begin
Exclude(FDrawState, dsFocused);
Exclude(FDrawState, dsClicked);
end;
FIsSibling := GetParentForm(Self).ActiveControl is TJvXPCustomControl;
if csRedrawFocusedChanged in ExControlStyle then
InternalRedraw;
end;
procedure TJvXPCustomControl.HookMouseEnter;
begin
// this hook is called, if the user moves (hover) the mouse over the control.
if not (csDesigning in ComponentState) then
begin
Include(FDrawState, dsHighlight);
if csRedrawMouseEnter in ExControlStyle then
InternalRedraw;
end;
if Assigned(FOnMouseEnter) then
FOnMouseEnter(Self);
end;
procedure TJvXPCustomControl.HookMouseLeave;
begin
// this hook is called, if the user moves the mouse away (unhover) from
// the control.
if not (csDesigning in ComponentState) then
begin
Exclude(FDrawState, dsHighlight);
if csRedrawMouseLeave in ExControlStyle then
InternalRedraw;
end;
if Assigned(FOnMouseLeave) then
FOnMouseLeave(Self);
end;
procedure TJvXPCustomControl.HookMouseMove(X: Integer = 0; Y: Integer = 0);
begin
// this hook is called if the user moves the mouse inside the control.
if not (csDesigning in ComponentState) then
if csRedrawMouseMove in ExControlStyle then
InternalRedraw;
end;
procedure TJvXPCustomControl.HookMouseDown;
begin
// this hook is called, if the user presses the left mouse button over the
// controls.
if not Focused and CanFocus then
SetFocus;
Include(FDrawState, dsClicked);
if csRedrawMouseDown in ExControlStyle then
InternalRedraw;
end;
procedure TJvXPCustomControl.HookMouseUp;
var
CurrentPos: TPoint;
NewControl: TWinControl;
begin
// this hook is called, if the user releases the left mouse button.
begin
Exclude(FDrawState, dsClicked);
if csRedrawMouseUp in ExControlStyle then
InternalRedraw;
// does the cursor is over another supported control?
GetCursorPos(CurrentPos);
NewControl := FindVCLWindow(CurrentPos);
if (NewControl <> nil) and (NewControl <> Self) and
(NewControl.InheritsFrom(TJvXPCustomControl)) then
TJvXPCustomControl(NewControl).HookMouseEnter;
end;
end;
procedure TJvXPCustomControl.HookParentColorChanged;
begin
// this hook is called if, the parent color was changed.
if csRedrawParentColorChanged in ExControlStyle then
InternalRedraw;
end;
procedure TJvXPCustomControl.HookParentFontChanged;
begin
// this hook is called if, the parent font was changed.
if csRedrawParentFontChanged in ExControlStyle then
InternalRedraw;
end;
procedure TJvXPCustomControl.HookPosChanged;
begin
// this hook is called, if the window position was changed.
if csRedrawPosChanged in ExControlStyle then
InternalRedraw;
end;
procedure TJvXPCustomControl.HookResized;
begin
// this hook is called, if the control was resized.
if csRedrawResized in ExControlStyle then
InternalRedraw;
end;
procedure TJvXPCustomControl.HookTextChanged;
begin
// this hook is called, if the caption was changed.
if csRedrawCaptionChanged in ExControlStyle then
InternalRedraw;
end;
//=== { TJvXPStyle } =========================================================
constructor TJvXPStyle.Create(AOwner: TComponent);
begin
inherited Create;
Parent := TJvXPCustomStyleControl(AOwner);
FTheme := WindowsXP;
FUseStyleManager := True;
end;
procedure TJvXPStyle.SetTheme(Value: TJvXPTheme);
begin
if Value <> FTheme then
begin
FTheme := Value;
Parent.InternalRedraw;
end;
end;
function TJvXPStyle.GetTheme: TJvXPTheme;
begin
Result := FTheme;
if FUseStyleManager and Assigned(Parent.StyleManager) then
Result := Parent.StyleManager.Theme;
end;
procedure TJvXPStyle.SetUseStyleManager(Value: Boolean);
begin
if Value <> FUseStyleManager then
begin
FUseStyleManager := Value;
Parent.InternalRedraw;
end;
end;
//=== { TJvXPStyleManager } ==================================================
constructor TJvXPStyleManager.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FControls := TList.Create;
FTheme := WindowsXP;
end;
destructor TJvXPStyleManager.Destroy;
begin
InvalidateControls;
FControls.Free;
inherited Destroy;
end;
procedure TJvXPStyleManager.InvalidateControls;
var
I: Integer;
begin
for I := 0 to FControls.Count - 1 do
with TJvXPCustomControl(FControls[I]) do
InternalRedraw;
end;
procedure TJvXPStyleManager.SetTheme(Value: TJvXPTheme);
begin
if Value <> FTheme then
begin
FTheme := Value;
if Assigned(FOnThemeChanged) then
FOnThemeChanged(Self);
InvalidateControls;
end;
end;
procedure TJvXPStyleManager.RegisterControls(const AControls: array of TJvXPCustomControl);
var
I: Integer;
begin
for I := Low(AControls) to High(AControls) do
if FControls.IndexOf(AControls[I]) = -1 then
FControls.Add(AControls[I]);
end;
procedure TJvXPStyleManager.UnregisterControls(const AControls: array of TJvXPCustomControl);
var
I: Integer;
begin
for I := Low(AControls) to High(AControls) do
if FControls.IndexOf(AControls[I]) <> -1 then
FControls.Delete(FControls.IndexOf(AControls[I]));
end;
//=== { TJvXPCustomStyleControl } ============================================
constructor TJvXPCustomStyleControl.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FStyle := TJvXPStyle.Create(Self);
FStyleManager := nil;
end;
destructor TJvXPCustomStyleControl.Destroy;
begin
if FStyleManager <> nil then
FStyleManager.UnregisterControls([Self]);
FStyle.Free;
inherited Destroy;
end;
procedure TJvXPCustomStyleControl.Notification(AComponent: TComponent;
Operation: TOperation);
begin
if (AComponent is TJvXPStyleManager) and (Operation = opRemove) then
FStyleManager := nil;
inherited Notification(AComponent, Operation);
end;
procedure TJvXPCustomStyleControl.SetStyleManager(Value: TJvXPStyleManager);
begin
if Value <> FStyleManager then
begin
if Value <> nil then
Value.RegisterControls([Self])
else
FStyleManager.UnregisterControls([Self]);
FStyleManager := Value;
InternalRedraw;
end;
end;
//=== { TJvXPGradient } ======================================================
constructor TJvXPGradient.Create(AOwner: TControl);
begin
inherited Create;
Parent := TJvXPCustomControl(AOwner);
Bitmap := TBitmap.Create;
FColors := 16;
FDithered := True;
FEnabled := False;
FEndColor := clSilver;
FGradientStyle := gsLeft;
FStartColor := clGray;
end;
destructor TJvXPGradient.Destroy;
begin
Bitmap.Free;
inherited Destroy;
end;
procedure TJvXPGradient.RecreateBands;
begin
if Assigned(Bitmap) then
JvXPCreateGradientRect(Parent.Width, Parent.Height, FStartColor, FEndColor,
FColors, FGradientStyle, FDithered, Bitmap);
end;
procedure TJvXPGradient.SetDithered(Value: Boolean);
begin
if FDithered <> Value then
begin
FDithered := Value;
RecreateBands;
Parent.InternalRedraw;
end;
end;
procedure TJvXPGradient.SetColors(Value: TJvXPGradientColors);
begin
if FColors <> Value then
begin
FColors := Value;
RecreateBands;
Parent.InternalRedraw;
end;
end;
procedure TJvXPGradient.SetEnabled(Value: Boolean);
begin
if FEnabled <> Value then
begin
FEnabled := Value;
Parent.InternalRedraw;
end;
end;
procedure TJvXPGradient.SetEndColor(Value: TColor);
begin
if FEndColor <> Value then
begin
FEndColor := Value;
RecreateBands;
Parent.InternalRedraw;
end;
end;
procedure TJvXPGradient.SetGradientStyle(Value: TJvXPGradientStyle);
begin
if FGradientStyle <> Value then
begin
FGradientStyle := Value;
RecreateBands;
Parent.InternalRedraw;
end;
end;
procedure TJvXPGradient.SetStartColor(Value: TColor);
begin
if FStartColor <> Value then
begin
FStartColor := Value;
RecreateBands;
Parent.InternalRedraw;
end;
end;
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$RCSfile: JvQXPCore.pas,v $';
Revision: '$Revision: 1.20 $';
Date: '$Date: 2005/02/06 14:06:32 $';
LogPath: 'JVCL\run'
);
initialization
RegisterUnitVersion(HInstance, UnitVersioning);
finalization
UnregisterUnitVersion(HInstance);
{$ENDIF UNITVERSIONING}
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -