home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / pctchnqs / 1991 / number6 / pie / pietest.pas < prev    next >
Pascal/Delphi Source File  |  1991-12-10  |  5KB  |  203 lines

  1. { pietest.pas -- Test Pie Control by Tom Swan }
  2.  
  3. program PieTest;
  4.  
  5. {$R pietest.res }
  6.  
  7. uses WinTypes, WinProcs, WObjects;
  8.  
  9. const
  10.   PieCtrlDLL = 'piectrl.dll';  { Name of custom control DLL }
  11.   em_DLLNotFound = 1;          { DLL not found error code }
  12.   cm_Test = 101;               { Menu Test command ID }
  13.   id_Menu = 100;               { Menu resource ID }
  14.   id_Dialog = 100;             { Dialog resource ID }
  15.   id_PieCtrl = 1;              { Pie control resource ID }
  16.   endTime = 15;                { Max time for test dialog }
  17.  
  18. {$I piectrl.inc }  { Include message identifiers }
  19.  
  20. type
  21.   TPieApp = object(TApplication)
  22.     LibHandle: THandle;
  23.     constructor Init(AName: PChar);
  24.     destructor Done; virtual;
  25.     procedure Error(ErrorCode: Integer); virtual;
  26.     procedure InitMainWindow; virtual;
  27.   end;
  28.  
  29.   PPieWin = ^TPieWin;
  30.   TPieWin = object(TWindow)
  31.     Testing: Boolean;
  32.     constructor Init(AParent: PWindowsObject; ATitle: PChar);
  33.     function CanClose: Boolean; virtual;
  34.     procedure CMTest(var Msg: TMessage);
  35.       virtual cm_First + cm_Test;
  36.   end;
  37.  
  38.   PPieDlg = ^TPieDlg;
  39.   TPieDlg = object(TDialog)
  40.     ContinueFlag: Boolean;
  41.     BackBrush, ForeBrush: HBrush;
  42.     constructor Init(AParent: PWindowsObject; ResourceID: Word);
  43.     destructor Done; virtual;
  44.     procedure Start(EndTime: Word);
  45.     procedure Update(Time: Word);
  46.     procedure Ok(var Msg: TMessage);
  47.       virtual id_First + id_Ok;
  48.     procedure Cancel(var Msg: TMessage);
  49.       virtual id_First + id_Cancel;
  50.     procedure WMCtlColor(var Msg: TMessage);
  51.       virtual wm_First + wm_CtlColor;
  52.   end;
  53.  
  54. procedure Delay(MSecs: LongInt);
  55. var
  56.   Mark: LongInt;
  57. begin
  58.   Mark := GetTickCount + MSecs;
  59.   repeat { Wait } until GetTickCount >= Mark;
  60. end;
  61.  
  62. { TPieApp }
  63.  
  64. constructor TPieApp.Init(AName: PChar);
  65. begin
  66.   LibHandle := LoadLibrary(PieCtrlDLL);
  67.   if LibHandle < 32 then
  68.     Status := em_DLLNotFound
  69.   else
  70.     TApplication.Init(AName);
  71. end;
  72.  
  73. destructor TPieApp.Done;
  74. begin
  75.   if LibHandle >= 32 then
  76.     FreeLibrary(LibHandle);
  77.   TApplication.Done;
  78. end;
  79.  
  80. procedure TPieApp.Error(ErrorCode: Integer);
  81. begin
  82.   case ErrorCode of
  83.     em_DLLNotFound:
  84.       Halt(ErrorCode);
  85.   else
  86.     TApplication.Error(ErrorCode);
  87.   end;
  88. end;
  89.  
  90. procedure TPieApp.InitMainWindow;
  91. begin
  92.   MainWindow := New(PPieWin, Init(nil, 'PieTest'))
  93. end;
  94.  
  95. { TPieWin }
  96.  
  97. constructor TPieWin.Init(AParent: PWindowsObject; ATitle: PChar);
  98. begin
  99.   TWindow.Init(AParent, ATitle);
  100.   Attr.Menu := LoadMenu(HInstance, PChar(id_Menu));
  101.   Testing := false;
  102. end;
  103.  
  104. function TPieWin.CanClose: Boolean;
  105. begin
  106.   CanClose := not Testing;
  107. end;
  108.  
  109. procedure TPieWin.CMTest(var Msg: TMessage);
  110. var
  111.   D: PPieDlg;         { Pointer to modeless dialog }
  112.   Time: Word;         { Local time unit counter }
  113.   Finished: Boolean;  { "Operation completed" flag }
  114. begin
  115.   Testing := true;    { Prevent app from ending }
  116.   D := PPieDlg(       { Create the dialog instance }
  117.     Application^.MakeWindow(New(PPieDlg,
  118.     Init(@Self, id_Dialog))));
  119.   D^.Start(endTime);  { Initialize custom control }
  120.   Time := 0;          { Initialize local time unit }
  121.   Finished := false;  { Initialize "operation completed" flag }
  122.   while (not Finished) and (D^.ContinueFlag) do
  123.   begin
  124.     D^.Update(Time);  { Update custom control position }
  125.     Delay(500);       { Insert operation to perform }
  126.     MessageBeep(0);   { Optional audible feedback }
  127.     Inc(Time);        { Count time units passed }
  128.     Finished := (Time > endTime);  { Ensures display of "100%" }
  129.   end;
  130.   if IsWindow(D^.HWindow) then
  131.     D^.CloseWindow;   { Close and dispose dialog }
  132.   Testing := false;   { Permit app to end }
  133. end;
  134.  
  135. { TPieDlg }
  136.  
  137. constructor TPieDlg.Init(AParent:PWindowsObject;ResourceID:Word);
  138. begin
  139.   TDialog.Init(AParent, PChar(ResourceID));
  140.   EnableKBHandler;
  141.   ContinueFlag := true;
  142.   BackBrush := CreateSolidBrush(RGB(16, 0, 16));
  143.   ForeBrush := CreateSolidBrush(RGB(255, 0, 0));
  144. end;
  145.  
  146. destructor TPieDlg.Done;
  147. begin
  148.   DeleteObject(BackBrush);
  149.   DeleteObject(ForeBrush);
  150.   TDialog.Done;
  151. end;
  152.  
  153. procedure TPieDlg.Start(EndTime: Word);
  154. begin
  155.   SendDlgItemMessage(HWindow, id_PieCtrl,pie_SetLimit,EndTime,0);
  156.   SendDlgItemMessage(HWindow, id_PieCtrl,pie_SetIndex,0,0);
  157.   Show(sw_ShowNormal);
  158.   SetFocus(HWindow);
  159.   ContinueFlag := true;
  160. end;
  161.  
  162. procedure TPieDlg.Update(Time: Word);
  163. var
  164.   Msg: TMsg;
  165. begin
  166.   SendDlgItemMessage(HWindow, id_PieCtrl, pie_SetIndex, Time, 0);
  167.   while PeekMessage(Msg, 0, 0, 0, pm_Remove) do
  168.   if not IsDialogMessage(HWindow, Msg) then
  169.   begin
  170.     TranslateMessage(Msg);
  171.     DispatchMessage(Msg);
  172.   end;
  173. end;
  174.  
  175. procedure TPieDlg.Ok(var Msg: TMessage);
  176. begin
  177. end;
  178.  
  179. procedure TPieDlg.Cancel(var Msg: TMessage);
  180. begin
  181.   ContinueFlag := false;
  182. end;
  183.  
  184. procedure TPieDlg.WMCtlColor(var Msg: TMessage);
  185. begin
  186.   case Msg.LParamHi of
  187.     pie_BackColor:
  188.       Msg.Result := BackBrush;
  189.     pie_ForeColor:
  190.       Msg.Result := ForeBrush;
  191.   else
  192.     DefWndProc(Msg);
  193.   end;
  194. end;
  195.  
  196. var
  197.   PieApp: TPieApp;
  198. begin
  199.   PieApp.Init('PieTest');
  200.   PieApp.Run;
  201.   PieApp.Done
  202. end.
  203.