home *** CD-ROM | disk | FTP | other *** search
/ swCHIP 1991 January / swCHIP_95-1.bin / desktop / cb210 / calend.pa_ / calend.pa
Text File  |  1995-12-09  |  10KB  |  375 lines

  1. Library Calend;
  2.  
  3. { Calend Add-In for the clySmic Icon Bar. (C) 1992, 1993 by clySmic Software.
  4.                                           All Rights reserved. }
  5.  
  6. {define Debug}
  7.  
  8. {$ifndef Debug}
  9. {$R-,I-,D-,L-,S-,V-,W-,G+}
  10. {$endif}
  11.  
  12. {$C MOVEABLE PRELOAD DISCARDABLE}
  13.  
  14. Uses
  15.   WinTypes,WinProcs,Strings,WinDOS,TPWTools;
  16.  
  17. {$R CALEND}
  18. {$I ADD-IN.INC}
  19. {$I ..\VER}
  20.  
  21. Const
  22.   ShowDOW : Boolean = True;
  23.   CLBVer : VerString = AddInMasterVer;
  24.  
  25. Var
  26.   Yr,Mon,Day,DOW : Word;
  27.   IWDate,INIFile : Array [0..80] of Char;
  28.   GTxInBtn,USDateFormat : Boolean;
  29.  
  30. {$D Calend Add-In for Clysbar - clySmic Software}
  31.  
  32. {-----------------------------------------------}
  33.  
  34. { --- Utility Procedures --- }
  35.  
  36. Function CenterTx(DC : HDC; Tx : PChar; Rect : TRect) : Integer;
  37.  
  38. Var
  39.   Width,WinX,StrtX : Integer;
  40.  
  41. Begin
  42.   { Ask Windows for the total pixel length of the string & calc starting X }
  43.   Width := LoWord(GetTextExtent(DC,Tx,StrLen(Tx)));
  44.  
  45.   { Get total x width of window - don't add 1! }
  46.   WinX := (Rect.Right - Rect.Left);
  47.  
  48.   { Calculate centered starting posn }
  49.   StrtX := ((WinX - Width) Div 2) + Rect.Left;
  50.  
  51.   { Return }
  52.   CenterTx := StrtX;
  53. End {CenterTx};
  54.  
  55. {-----------------------------------------------}
  56.  
  57. Procedure FormIWDate;
  58.  
  59. Const
  60.   MonthName : Array [1..12] of PChar =
  61.     ('January','February','March','April','May','June',
  62.      'July','August','September','October','November','December');
  63.  
  64.   Days : array [0..6] of PChar =
  65.      ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
  66.  
  67. Var
  68.   StrDay,StrYr : Array [0..4] of Char;
  69.  
  70. Begin
  71.   GetDate(Yr,Mon,Day,DOW);
  72.   Str(Day,StrDay);
  73.   Str(Yr,StrYr);
  74.  
  75.   If USDateFormat
  76.     Then Begin
  77.            { US date fmt }
  78.            StrCopy(IWDate,Days[DOW]);
  79.            StrCat(IWDate,', ');
  80.            StrCat(IWDate,MonthName[Mon]);
  81.            StrCat(IWDate,' ');
  82.            StrCat(IWDate,StrDay);
  83.            StrCat(IWDate,', ');
  84.            StrCat(IWDate,StrYr);
  85.          End
  86.     Else Begin
  87.            { European date fmt }
  88.            StrCopy(IWDate,Days[DOW]);
  89.            StrCat(IWDate,', ');
  90.            StrCat(IWDate,StrDay);
  91.            StrCat(IWDate,' ');
  92.            StrCat(IWDate,MonthName[Mon]);
  93.            StrCat(IWDate,' ');
  94.            StrCat(IWDate,StrYr);
  95.          End;
  96. End {FormIWDate};
  97.  
  98. {-----------------------------------------------}
  99.  
  100. { --- Perform Add-In's initialization --- }
  101.  
  102. Function AddInInit(CurVer : PChar; TxInBtn : Boolean) : InitResult; Export;
  103.  
  104. Begin
  105.   { Version check }
  106.   If StrLComp(CurVer,CLBVer,3) <> 0
  107.     Then AddInInit := InitNotOk
  108.     Else AddInInit := InitOk;
  109.  
  110.   { Point at our INI file, which is in our home dir }
  111.   StrPCopy(INIFile,HomeDir);
  112.   StrCat(INIFile,'CALEND.INI');
  113.  
  114.   { Flush INI file so we can edit it }
  115.   WritePrivateProfileString(Nil,Nil,Nil,INIFile);
  116.  
  117.   { Get display mode }
  118.   USDateFormat := Boolean(GetPrivateProfileInt('Settings',
  119.                                                'USDateFormat',
  120.                                                0,
  121.                                                INIFile));
  122.  
  123.   { Save text-in-button flag }
  124.   GTxInBtn := TxInBtn;
  125. End {AddInInit};
  126.  
  127. {-----------------------------------------------}
  128.  
  129. { --- Paint on the button (Clysbar does the background) --- }
  130.  
  131. Procedure AddInPaint(Wnd : HWnd; DC : HDC; Pressed : Boolean); Export;
  132.  
  133. Const
  134.   MonthName : Array [1..12] of PChar =
  135.     ('JAN','FEB','MAR','APR','MAY','JUN',
  136.      'JUL','AUG','SEP','OCT','NOV','DEC');
  137.  
  138.   Days : array [0..6] of PChar =
  139.      ('SUN','MON','TUE','WED','THU','FRI','SAT');
  140.  
  141. Var
  142.   ShadRect,Rect : TRect;
  143.   NumFont,OldFont,SmlFont : HFont;
  144.   Tx : Array[0..128] of Char;
  145.   StrYr,StrDay : Array [0..4] of Char;
  146.   StrtX,StrtY : Integer;
  147.   TheIcon : HIcon;
  148.  
  149. Begin
  150.   { If add-in is never uncovered, Wnd will be NULL }
  151.   If Wnd = 0
  152.     Then Exit;
  153.  
  154.   GetClientRect(Wnd,Rect);
  155.   If GTxInBtn
  156.     Then Rect.Right := Rect.Left + GetSystemMetrics(sm_cxIcon) + 12;
  157.  
  158.   { Calc location of icon }
  159.   StrtX := ((Rect.Right - Rect.Left) - GetSystemMetrics(sm_cxIcon)) Div 2;
  160.   StrtY := ((Rect.Bottom - Rect.Top) - GetSystemMetrics(sm_cyIcon)) Div 2;
  161.  
  162.   { Draw turning page if pressed }
  163.   If Pressed
  164.     Then Begin
  165.            TheIcon := LoadIcon(hInstance,'turning');
  166.            DrawIcon(DC,StrtX,StrtY,TheIcon);
  167.  
  168.            Exit;
  169.          End;
  170.  
  171.   { Draw "page" icon }
  172.   TheIcon := LoadIcon(hInstance,'calend');
  173.   DrawIcon(DC,StrtX,StrtY,TheIcon);
  174.  
  175.   { Get date info }
  176.   GetDate(Yr,Mon,Day,DOW);
  177.   Str(Day,StrDay);
  178.   Str(Yr,StrYr);
  179.  
  180.   { Create small font for the month/day/year }
  181.   SmlFont :=
  182.   CreateFont(9,             { Height }
  183.              0,0,0,         { Width, left 2 right, normal orientation }
  184.              400,           { Weight }
  185.              0,0,0,         { Italic, underlined, or strikeout }
  186.              0,             { ANSI char set }
  187.              0,             { Reserved precision field }
  188.              0,             { Default clipping }
  189.              Proof_Quality, { Quality }
  190.              ff_Roman Or Variable_Pitch,
  191.              'Small Fonts');
  192.  
  193.   { Create large font for the day number }
  194.   NumFont :=
  195.   CreateFont(17,            { Height }
  196.              0,0,0,         { Width, left 2 right, normal orientation }
  197.              700,           { Weight }
  198.              0,0,0,         { Italic, underlined, or strikeout }
  199.              0,             { ANSI char set }
  200.              0,             { Reserved precision field }
  201.              0,             { Default clipping }
  202.              Proof_Quality, { Quality }
  203.              ff_Roman Or Variable_Pitch,
  204.              'Times New Roman');
  205.  
  206.   { Setup for day number }
  207.   OldFont := SelectObject(DC,NumFont);
  208.   SetBkMode(DC,Transparent);
  209.  
  210.   { Draw lg day number's shadow }
  211.   SetTextColor(DC,RGB(128,128,128));
  212.   ShadRect := Rect;
  213.   OffsetRect(ShadRect,2,1);
  214.   DrawText(DC,StrDay,StrLen(StrDay),ShadRect,
  215.            dt_Center or dt_VCenter or dt_SingleLine);
  216.  
  217.   { Draw lg day number }
  218.   SetTextColor(DC,RGB(0,0,0));
  219.   OffsetRect(Rect,1,0);
  220.   DrawText(DC,StrDay,StrLen(StrDay),Rect,
  221.            dt_Center or dt_VCenter or dt_SingleLine);
  222.  
  223.   { Setup for other info }
  224.   SelectObject(DC,SmlFont);
  225.  
  226.   { Draw month name }
  227.   StrCopy(Tx,MonthName[Mon]);
  228.   SetTextColor(DC,RGB(255,0,0));
  229.   OffsetRect(Rect,-1,0);
  230.   TextOut(DC,CenterTx(DC,Tx,Rect),StrtY + 1,Tx,StrLen(Tx));
  231.  
  232.   { Either year or doy }
  233.   If ShowDOW
  234.     Then Begin
  235.            { Display day of week }
  236.            StrCopy(Tx,Days[DOW]);
  237.            SetTextColor(DC,RGB(0,0,128));
  238.            OffsetRect(Rect,-1,0);
  239.            TextOut(DC,CenterTx(DC,Tx,Rect),StrtY + 22,Tx,StrLen(Tx));
  240.          End
  241.     Else Begin
  242.            { Display year }
  243.            StrCopy(Tx,StrYr);
  244.            SetTextColor(DC,RGB(128,0,128));
  245.            TextOut(DC,CenterTx(DC,Tx,Rect),StrtY + 22,Tx,StrLen(Tx));
  246.          End;
  247.  
  248.   { Clean up }
  249.   SelectObject(DC,OldFont);
  250.   DeleteObject(SmlFont);
  251.   DeleteObject(NumFont);
  252. End {AddInPaint};
  253.  
  254. {-----------------------------------------------}
  255.  
  256. { --- Tell Clysbar what kind of timer we need --- }
  257.  
  258. Function AddInTimerNeeded : Integer; Export;
  259.  
  260. Begin
  261.   AddInTimerNeeded := ait_Slow;
  262. End {AddInTimerNeeded};
  263.  
  264. {-----------------------------------------------}
  265.  
  266. { --- Proc called when timer expires, perform timed duties --- }
  267.  
  268. Procedure AddInTimerTick(Wnd : HWnd; DC : HDC); Export;
  269.  
  270. Var
  271.   TimerDay : Word;
  272.  
  273. Begin
  274.   { Check for a date change }
  275.   GetDate(Yr,Mon,TimerDay,DOW);
  276.  
  277.   { If different, repaint window }
  278.   If TimerDay <> Day
  279.     Then AddInPaint(Wnd,DC,False);
  280.  
  281. End {AddInTimerTick};
  282.  
  283. {-----------------------------------------------}
  284.  
  285. { --- Proc called when button pressed --- }
  286.  
  287. Procedure AddInPressed(Wnd : HWnd; DC : HDC); Export;
  288.  
  289. Begin
  290.   { Toggle the "show day-of-week" indicator when button pressed }
  291.   ShowDOW := Not ShowDOW;
  292.   AddInPaint(Wnd,DC,False);
  293. End {AddInPressed};
  294.  
  295. {-----------------------------------------------}
  296.  
  297. { --- Exit processing for Add-In --- }
  298.  
  299. Procedure AddInExit; Export;
  300.  
  301. Begin
  302. End {AddInExit};
  303.  
  304. {-----------------------------------------------}
  305.  
  306. { --- Clysbar queries Add-In about itself --- }
  307.  
  308. Procedure AddInAbout(Str1,Str2 : PChar;
  309.                      Var TheIcon : HIcon;
  310.                      Var TitleCol,TxCol,BkCol : TColorRef); Export;
  311.  
  312. Begin
  313.   StrCopy(Str1,'Calend V');
  314.   StrCat(Str1,MasterVer);
  315.   StrCopy(Str2,'A Page-per-Day Calendar'#13'⌐ 1992 - 1994 by clySmic Software.'#13'All Rights Reserved.');
  316.  
  317.   TheIcon := LoadIcon(hInstance,'about');
  318.  
  319.   TitleCol := RGB(0,0,255);
  320.   TxCol := RGB(0,0,128);
  321.   BkCol := RGB(192,192,192);
  322. End {AddInAbout};
  323.  
  324. {-----------------------------------------------}
  325.  
  326. { --- Clysbar queries Add-In whether it'll accept d'n'd --- }
  327.  
  328. Function AddInAcceptDrops : Boolean; Export;
  329.  
  330. Begin
  331.   AddInAcceptDrops := False;
  332. End {AddInAcceptDrops};
  333.  
  334. {-----------------------------------------------}
  335.  
  336. { --- Clysbar informs Add-In of a d'n'd drop --- }
  337.  
  338. Procedure AddInDrop(hDrop : THandle); Export;
  339.  
  340. Begin
  341. End {AddInDrop};
  342.  
  343. {-----------------------------------------------}
  344.  
  345. { --- Clysbar queries Add-In for Info Window text --- }
  346.  
  347. { Return a zero-length string if you don't want to chg the text }
  348.  
  349. Procedure AddInGetInfoWinTx(Tx : PChar); Export;
  350.  
  351. Begin
  352.   If GTxInBtn
  353.     Then StrCopy(Tx,'')
  354.     Else Begin
  355.            FormIWDate;
  356.            StrCopy(Tx,IWDate);
  357.          End;
  358. End {AddInGetInfoWinTx};
  359.  
  360. {-----------------------------------------------}
  361.  
  362. Exports AddInInit         Index 1,
  363.         AddInPaint        Index 2,
  364.         AddInTimerNeeded  Index 3,
  365.         AddInTimerTick    Index 4,
  366.         AddInPressed      Index 5,
  367.         AddInExit         Index 6,
  368.         AddInAbout        Index 7,
  369.         AddInAcceptDrops  Index 8,
  370.         AddInDrop         Index 9,
  371.         AddInGetInfoWinTx Index 10;
  372.  
  373. Begin
  374. End.
  375.