📄 jvqdesktopalert.pas
字号:
end;
end;
dapTopLeft:
begin
Y := R.Top;
X := R.Left;
for I := 0 to Pred(C) do
begin
Form := Items[I];
if Assigned(Form) and Form.Visible then
begin
Form.SetNewOrigin(X, Y);
Inc(Y, Form.Height);
end;
end;
end;
end;
end;
end;
//=== { TJvCustomDesktopAlertStyle } =========================================
constructor TJvCustomDesktopAlertStyleHandler.Create(OwnerForm: TJvFormDesktopAlert);
begin
inherited Create;
FAnimTimer := TTimer.Create(nil);
FAnimTimer.Enabled := False;
FOwnerForm := OwnerForm;
end;
destructor TJvCustomDesktopAlertStyleHandler.Destroy;
begin
FAnimTimer.OnTimer := nil;
FreeAndNil(FAnimTimer);
inherited Destroy;
end;
procedure TJvCustomDesktopAlertStyleHandler.AbortAnimation;
begin
AnimTimer.Enabled := False;
if Status = hsStartAnim then
FinalizeStartAnimation
else
if Status = hsEndAnim then
FinalizeEndAnimation;
end;
procedure TJvCustomDesktopAlertStyleHandler.DoEndAnimation;
begin
if EndSteps > 0 then
begin
AnimTimer.Enabled := False;
AnimTimer.OnTimer := EndAnimTimer;
AnimTimer.Interval := EndInterval;
FCurrentStep := 0;
PrepareEndAnimation;
AnimTimer.Enabled := True;
end;
end;
procedure TJvCustomDesktopAlertStyleHandler.DoDisplay;
begin
if DisplayDuration > 0 then
begin
AnimTimer.Enabled := False;
AnimTimer.OnTimer := DisplayTimer;
AnimTimer.Interval := DisplayDuration;
FCurrentStep := 0;
AnimTimer.Enabled := True;
end;
end;
procedure TJvCustomDesktopAlertStyleHandler.DoStartAnimation;
begin
if StartSteps > 0 then
begin
AnimTimer.Enabled := False;
AnimTimer.OnTimer := StartAnimTimer;
AnimTimer.Interval := StartInterval;
FCurrentStep := 0;
PrepareStartAnimation;
AnimTimer.Enabled := True;
end;
end;
procedure TJvCustomDesktopAlertStyleHandler.EndAnimTimer(Sender: TObject);
begin
Inc(FCurrentStep);
if CurrentStep >= EndSteps then
begin
AnimTimer.Enabled := False;
FinalizeEndAnimation;
end;
end;
procedure TJvCustomDesktopAlertStyleHandler.DisplayTimer(Sender: TObject);
begin
AnimTimer.Enabled := False;
end;
function TJvCustomDesktopAlertStyleHandler.GetActive: Boolean;
begin
Result := AnimTimer.Enabled;
end;
procedure TJvCustomDesktopAlertStyleHandler.SetEndInterval(const Value: Cardinal);
begin
FEndInterval := Value;
end;
procedure TJvCustomDesktopAlertStyleHandler.SetEndSteps(const Value: Cardinal);
begin
FEndSteps := Value;
if FEndSteps < 1 then
FEndSteps := 1;
end;
procedure TJvCustomDesktopAlertStyleHandler.SetDisplayDuration(
const Value: Cardinal);
begin
FDisplayDuration := Value;
end;
procedure TJvCustomDesktopAlertStyleHandler.SetOwnerForm(
const Value: TJvFormDesktopAlert);
begin
FOwnerForm := Value;
end;
procedure TJvCustomDesktopAlertStyleHandler.SetStartInterval(
const Value: Cardinal);
begin
FStartInterval := Value;
end;
procedure TJvCustomDesktopAlertStyleHandler.SetStartSteps(const Value: Cardinal);
begin
FStartSteps := Value;
if FStartSteps < 1 then
FStartSteps := 1;
end;
procedure TJvCustomDesktopAlertStyleHandler.StartAnimTimer(Sender: TObject);
begin
Inc(FCurrentStep);
if CurrentStep >= StartSteps then
begin
AnimTimer.Enabled := False;
FinalizeStartAnimation;
DoDisplay;
end;
end;
procedure TJvCustomDesktopAlertStyleHandler.FinalizeEndAnimation;
begin
if OwnerForm <> nil then
OwnerForm.Close;
end;
procedure TJvCustomDesktopAlertStyleHandler.PrepareStartAnimation;
begin
if OwnerForm <> nil then
OwnerForm.Show;
end;
//=== { TJvFadeAlertStyleHandler } ===========================================
const
WS_EX_LAYERED = $00080000;
LWA_ALPHA = $00000002;
type
TDynamicSetLayeredWindowAttributes =
function(HWnd: THandle; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD): Boolean; stdcall;
constructor TJvFadeAlertStyleHandler.Create(OwnerForm: TJvFormDesktopAlert);
begin
inherited Create(OwnerForm);
// Set default values
StartInterval := 25;
StartSteps := 10;
EndInterval := 50;
EndSteps := 10;
DisplayDuration := 1400;
MinAlphaBlendValue := 0;
MaxAlphaBlendValue := 255;
end;
procedure TJvFadeAlertStyleHandler.AbortAnimation;
begin
AnimTimer.Enabled := False;
DoAlphaBlend(MaxAlphaBlendValue);
end;
procedure TJvFadeAlertStyleHandler.DoAlphaBlend(Value: Byte);
begin
end;
(*
var
DynamicSetLayeredWindowAttributes: TDynamicSetLayeredWindowAttributes;
CurrentStyle: Cardinal;
procedure InitProcs;
const
sUser32 = 'User32.dll';
var
ModH: HMODULE;
begin
ModH := GetModuleHandle(sUser32);
if ModH <> 0 then
@DynamicSetLayeredWindowAttributes := GetProcAddress(ModH, 'SetLayeredWindowAttributes')
else
@DynamicSetLayeredWindowAttributes := nil;
end;
begin
if OwnerForm <> nil then
begin
InitProcs;
if OwnerForm.HandleAllocated and Assigned(DynamicSetLayeredWindowAttributes) then
begin
CurrentStyle := GetWindowLong(OwnerForm.Handle, GWL_EXSTYLE);
if (CurrentStyle and WS_EX_LAYERED) = 0 then
SetWindowLong(OwnerForm.Handle, GWL_EXSTYLE,
GetWindowLong(OwnerForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
DynamicSetLayeredWindowAttributes(OwnerForm.Handle, 0, Value, LWA_ALPHA);
end;
end;
end;
*)
procedure TJvFadeAlertStyleHandler.EndAnimTimer(Sender: TObject);
begin
inherited EndAnimTimer(Sender);
DoAlphaBlend(MaxAlphaBlendValue -
((Cardinal(MaxAlphaBlendValue) - MinAlphaBlendValue) * CurrentStep) div EndSteps);
end;
procedure TJvFadeAlertStyleHandler.FinalizeEndAnimation;
begin
DoAlphaBlend(MinAlphaBlendValue);
inherited FinalizeEndAnimation; // Do not forget to call inherited, to hide the form
end;
procedure TJvFadeAlertStyleHandler.FinalizeStartAnimation;
begin
DoAlphaBlend(MaxAlphaBlendValue);
end;
procedure TJvFadeAlertStyleHandler.PrepareEndAnimation;
begin
DoAlphaBlend(MaxAlphaBlendValue);
end;
procedure TJvFadeAlertStyleHandler.PrepareStartAnimation;
begin
DoAlphaBlend(MinAlphaBlendValue);
inherited PrepareStartAnimation;
end;
procedure TJvFadeAlertStyleHandler.SetMaxAlphaBlendValue(const Value: Byte);
begin
FMaxAlphaBlendValue := Value;
end;
procedure TJvFadeAlertStyleHandler.SetMinAlphaBlendValue(const Value: Byte);
begin
FMinAlphaBlendValue := Value;
end;
procedure TJvFadeAlertStyleHandler.StartAnimTimer(Sender: TObject);
begin
DoAlphaBlend(MinAlphaBlendValue +
((Cardinal(MaxAlphaBlendValue) - MinAlphaBlendValue) * CurrentStep) div StartSteps);
inherited StartAnimTimer(Sender);
end;
procedure TJvDesktopAlert.SetStyleHandler(const Value: TJvCustomDesktopAlertStyleHandler);
begin
FStyleHandler.Assign(Value);
end;
//=== { TJvCenterGrowAlertStyleHandler } =====================================
constructor TJvCenterGrowAlertStyleHandler.Create(OwnerForm: TJvFormDesktopAlert);
begin
inherited Create(OwnerForm);
// Set default values
StartInterval := 25;
StartSteps := 10;
EndInterval := 50;
EndSteps := 10;
DisplayDuration := 1400;
MinGrowthPercentage := 0;
MaxGrowthPercentage := 100;
end;
procedure TJvCenterGrowAlertStyleHandler.AbortAnimation;
begin
AnimTimer.Enabled := False;
DoGrowRegion(MaxGrowthPercentage);
end;
procedure TJvCenterGrowAlertStyleHandler.DoGrowRegion(Percentage: Double);
var
RegionRect: TRect;
Region: HRGN;
RegionHeight: Integer;
RegionWidth: Integer;
begin
if OwnerForm <> nil then
begin
RegionHeight := Round(Percentage * OwnerForm.Height / 100.0);
RegionWidth := Round(Percentage * OwnerForm.Width / 100.0);
RegionRect.Left := (OwnerForm.Width - RegionWidth) div 2;
RegionRect.Right := RegionRect.Left + RegionWidth;
RegionRect.Top := (OwnerForm.Height - RegionHeight) div 2;
RegionRect.Bottom := RegionRect.Top + RegionHeight;
Region := CreateRectRgnIndirect(RegionRect);
SetWindowRgn(OwnerForm.Handle, Region, True);
end;
end;
procedure TJvCenterGrowAlertStyleHandler.StartAnimTimer(Sender: TObject);
begin
DoGrowRegion(MinGrowthPercentage +
((MaxGrowthPercentage - MinGrowthPercentage) * CurrentStep) / StartSteps);
inherited StartAnimTimer(Sender);
end;
procedure TJvCenterGrowAlertStyleHandler.EndAnimTimer(Sender: TObject);
begin
inherited EndAnimTimer(Sender);
DoGrowRegion(MaxGrowthPercentage -
((MaxGrowthPercentage - MinGrowthPercentage) * CurrentStep) / EndSteps);
end;
procedure TJvCenterGrowAlertStyleHandler.FinalizeEndAnimation;
begin
DoGrowRegion(MinGrowthPercentage);
inherited FinalizeEndAnimation;
end;
procedure TJvCenterGrowAlertStyleHandler.FinalizeStartAnimation;
begin
DoGrowRegion(MaxGrowthPercentage);
end;
procedure TJvCenterGrowAlertStyleHandler.PrepareEndAnimation;
begin
DoGrowRegion(MaxGrowthPercentage);
end;
procedure TJvCenterGrowAlertStyleHandler.PrepareStartAnimation;
begin
DoGrowRegion(MinGrowthPercentage);
inherited PrepareStartAnimation;
end;
procedure TJvCenterGrowAlertStyleHandler.SetMaxGrowthPercentage(const Value: Double);
begin
FMaxGrowthPercentage := Value;
if FMaxGrowthPercentage < 0.0 then
FMaxGrowthPercentage := 0.0;
if FMaxGrowthPercentage > 100.0 then
FMaxGrowthPercentage := 100.0;
end;
procedure TJvCenterGrowAlertStyleHandler.SetMinGrowthPercentage(const Value: Double);
begin
FMinGrowthPercentage := Value;
if FMinGrowthPercentage < 0.0 then
FMinGrowthPercentage := 0.0;
if FMinGrowthPercentage > 100.0 then
FMinGrowthPercentage := 100.0;
end;
(*
function TJvDesktopAlert.GetBiDiMode: TBidiMode;
begin
Result := FDesktopForm.BiDiMode;
end;
procedure TJvDesktopAlert.SetBiDiMode(const Value: TBidiMode);
begin
FDesktopForm.BiDiMode := Value;
end;
*)
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$RCSfile: JvQDesktopAlert.pas,v $';
Revision: '$Revision: 1.15 $';
Date: '$Date: 2005/02/06 14:06:05 $';
LogPath: 'JVCL\run'
);
{$ENDIF UNITVERSIONING}
initialization
{$IFDEF UNITVERSIONING}
RegisterUnitVersion(HInstance, UnitVersioning);
{$ENDIF UNITVERSIONING}
finalization
FreeAndNil(FGlobalStacker);
{$IFDEF UNITVERSIONING}
UnregisterUnitVersion(HInstance);
{$ENDIF UNITVERSIONING}
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -