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! 🙂