Just a quick note to wish all our customers and readers of this blog good tidings for this festive season. Whether you celebrate this time of the year or not, we’ll be raising a glass to all of you.
Forum regular JRL has put together this snazzy little Macro Scheduler script. Paste it into a new macro and hit run for some festive cheer:
OnEvent>key_down,VK27,0,Quit
SRT>Quit
SetControlText>Sparkler,TEdit,1,Complete
WaitWindowClosed>Sparkler
Wait>1
DeleteFile>%temp_dir%Sparkler.scp
Exit>0
END>Quit
DeleteFile>%temp_dir%Sparkler.scp
LabelToVar>SparkleScript,vScrData
Dialog>Dialog1
object Dialog1: TForm
BorderStyle = bsNone
Caption = 'Happy Holidays'
ClientHeight = 330
ClientWidth = 780
Color = 111111
Position = poScreenCenter
object Panel3: TPanel
Left = 0
Top = 0
Width = 780
Height = 330
BevelEdges = []
BevelOuter = bvNone
Caption = 'And a Happy New Year'
Color = 111111
Font.Charset = ANSI_CHARSET
Font.Color = clRed
Font.Height = -80
Font.Name = 'Vladimir Script'
Font.Style = []
ParentFont = False
Visible = False
end
object Panel2: TPanel
Left = 0
Top = 0
Width = 780
Height = 330
BevelEdges = []
BevelOuter = bvNone
Caption = 'Merry Christmas'
Color = 111111
Font.Charset = ANSI_CHARSET
Font.Color = clRed
Font.Height = -96
Font.Name = 'Old English Text MT'
Font.Style = []
ParentFont = False
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 780
Height = 330
BevelEdges = []
BevelOuter = bvNone
Caption = ''
Color = 111111
end
end
EndDialog>Dialog1
Show>Dialog1
ExecuteFile>%temp_dir%Sparkler.scp
Let>WIN_USEHANDLE=1
GetWindowPos>Dialog1.handle,Dia1X,Dia1Y
Let>WIN_USEHANDLE=0
Add>Dia1Y,165
Let>StartY=Dia1Y
Let>YFlag=1
Wait>0.3
Let>kk=0
Repeat>kk
Add>kk,4
If>Dia1Y>{%StartY%+20}
Let>YFlag=0
EndIf
If>Dia1Y<{%StartY%-20}
Let>YFlag=1
EndIf
Add>Dia1X,4
If>YFlag=1
Add>Dia1Y,8
Else
Sub>Dia1Y,8
EndIf
Wait>0.025
If>Dia1X>40
SetControlText>Sparkler,TEdit,1,%Dia1X%;%Dia1Y%
EndIf
SetDialogProperty>Dialog1,Panel1,Left,kk
Until>kk>750
Timer>Begin
GetWindowPos>Sparkler,SparkX,SparkY
Label>Loop
If>{%Dia1X%<%SparkX%+150}
Add>Dia1X,1
EndIf
If>Dia1Y>StartY
Sub>Dia1Y,1
EndIf
If>Dia1YDia1Y,1
EndIf
SetControlText>Sparkler,TEdit,1,%Dia1X%;%Dia1Y%
Wait>0.01
Timer>Stop
If>{%Stop%-%Begin%>5000}
GoSub>Fade
EndIf
Goto>Loop
SRT>Fade
SetDialogProperty>Dialog1,,AlphaBlend,True
Let>Fader=255
Repeat>Fader
Sub>Fader,5
SetDialogProperty>Dialog1,,AlphaBlendValue,Fader
Wait>0.1
Until>Fader<0
Let>Fader=255
SetDialogProperty>Dialog1,Panel3,Visible,True
SetDialogProperty>Dialog1,Panel2,Visible,False
SetDialogProperty>Dialog1,,AlphaBlendValue,Fader
Wait>3
Timer>Begin
GetScreenRes>ScreenX,ScreenY
While>{%Stop%-%Begin%<10000}
Timer>Stop
Random>100,Pct
Add>pct,1
Let>Dia1X={round(%ScreenX%*(%pct%/100))}
Random>100,Pct
Add>pct,1
Let>Dia1Y={round(%ScreenY%*(%pct%/100))}
SetControlText>Sparkler,TEdit,1,%Dia1X%;%Dia1Y%
Sub>Fader,5
SetDialogProperty>Dialog1,,AlphaBlendValue,Fader
Wait>0.2
EndWhile
SetControlText>Sparkler,TEdit,1,Complete
WaitWindowClosed>Sparkler
Wait>1
DeleteFile>%temp_dir%Sparkler.scp
Exit>0
END>Fade
/*
SparkleScript:
Let>size=200
OnEvent>key_down,vk27,0,Quit
SRT>Quit
Exit>0
END>Quit
Dialog>Dialog2
object Dialog2: TForm
BorderStyle = bsNone
Caption = 'Sparkler'
Color = 1
TransparentColor = True
TransparentColorValue = 1
object Panel1: TPanel
Left = 0
Top = 0
BevelOuter = bvNone
Caption = 'Panel1'
Color = 1
TabOrder = 0
end
object Edit1: TEdit
Text = '-1000;-1000'
Visible = False
end
end
EndDialog>Dialog2
Let>WIN_USEHANDLE=1
MoveWindow>Dialog2.handle,-1000,-1000
Let>WIN_USEHANDLE=0
AddDialogHandler>Dialog2,,OnClose,Quit
SetDialogProperty>Dialog2,,ClientHeight,size
SetDialogProperty>Dialog2,,ClientWidth,size
SetDialogProperty>Dialog2,Panel1,Height,size
SetDialogProperty>Dialog2,Panel1,Width,size
SetDialogProperty>Dialog2,,AlphaBlend,True
SetDialogProperty>Dialog2,,AlphaBlendValue,0
Show>Dialog2
Let>halfSize={round(%size%/2)}
Let>85Per={round(%halfSize%*0.85)}
Let>15Per={round(%halfSize%*0.15)}
Let>ang2=0
Let>kk=0
SetDialogProperty>Dialog2,,AlphaBlendValue,255
Repeat>kk
GetDialogProperty>Dialog2,Edit1,Text,vPos
If>vPos=Complete
Let>kk=-100
Goto>Done
EndIf
Separate>vPos,;,Cur
Sub>Cur_1,%halfSize%
Sub>Cur_2,%halfSize%
MoveWindow>Sparkler,Cur_1,Cur_2
Add>kk,1
Random>85Per,res
Add>res,%15Per%
Random>50,color
Add>Color,45500
Random>90,ang2
Let>ang2=%ang2%*4
GoSub>Angle,Dialog2,Panel1,ang2,%halfSize%,%halfSize%,%halfSize%,4,1
Random>90,ang3
Let>ang3=%ang3%*4
GoSub>Angle,Dialog2,Panel1,ang3,%halfSize%,%halfSize%,%halfSize%,4,1
Random>90,ang
Let>ang=%ang%*4
SetDialogProperty>Dialog2,Panel1,caption,space
GoSub>Angle,Dialog2,Panel1,ang,%halfSize%,%halfSize%,res,2,color
Label>Done
Until>kk<0
//Angle Usage:
//GoSub>Angle,Dialog,Object,Angle(in degrees),XStart,YStart,Length,PenSize,PenColor
//Requires Drawline subroutine
SRT>Angle
Let>DegreeAngle=Angle_var_3
Let>XStart=Angle_var_4
Let>Ystart=Angle_var_5
Let>LineLength=Angle_var_6
Let>RadAngle={%DegreeAngle%*(pi/180)}
Let>XEnd={trunc((cos(%RadAngle%))*%LineLength%)}
Let>YEnd={trunc((sin(%RadAngle%))*%LineLength%)}
Let>XEnd=%XEnd%+%XStart%
Let>YEnd=%YEnd%+%YStart%
GoSub>DrawLine,%Angle_var_1%.%Angle_var_2%.Handle,Angle_var_7,Angle_var_8,XStart,YStart,XEnd,YEnd
END>Angle
SRT>DrawLine
LibFunc>user32,GetDC,HDC,%DrawLine_var_1%
LibFunc>gdi32,CreatePen,Penres,0,%DrawLine_var_2%,%DrawLine_var_3%
LibFunc>gdi32,SelectObject,SOPres,hdc,Penres
Libfunc>gdi32,MoveToEx,mtres,HDC,%DrawLine_var_4%,%DrawLine_var_5%,0
LibFunc>gdi32,LineTo,ltres,hdc,%DrawLine_var_6%,%DrawLine_var_7%
LibFunc>gdi32,DeleteObject,DOres,Penres
LibFunc>user32,ReleaseDC,RDCres,HDC_1,HDC
END>DrawLine
*/
Enjoy! 🙂