home *** CD-ROM | disk | FTP | other *** search
/ PC World Plus! (NZ) 2001 June / HDC50.iso / Runimage / Delphi50 / Help / Examples / Prgrsbar / PG1.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-08-11  |  4.0 KB  |  141 lines

  1. unit Pg1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, ComCtrls, ExtCtrls, Pg2;
  8.  
  9. const
  10.   WM_ThreadDoneMsg = WM_User + 8;
  11.  
  12. type
  13.   TForm1 = class(TForm)
  14.     ProgressBar1: TProgressBar;
  15.     ProgressBar2: TProgressBar;
  16.     Button1: TButton;
  17.     Button2: TButton;
  18.     TrackBar1: TTrackBar;
  19.     TrackBar2: TTrackBar;
  20.     Bevel1: TBevel;
  21.     Bevel2: TBevel;
  22.     Label1: TLabel;
  23.     Label2: TLabel;
  24.     Button3: TButton;
  25.     Button4: TButton;
  26.     procedure Button1Click(Sender: TObject);
  27.     procedure Button2Click(Sender: TObject);
  28.     procedure Button3Click(Sender: TObject);
  29.     procedure Button4Click(Sender: TObject);
  30.     procedure FormCreate(Sender: TObject);
  31.     procedure TrackBar1Change(Sender: TObject);
  32.     procedure TrackBar2Change(Sender: TObject);
  33.     procedure FormDestroy(Sender: TObject);
  34.   private
  35.     { Private declarations }
  36.     MyThread1 : TMyThread; // thread number 1
  37.     MyThread2 : TMyThread; // thread number 2
  38.     Thread1Active : boolean; // used to test if thread 1 is active
  39.     Thread2Active : boolean; // used to test if thread 2 is active
  40.     procedure ThreadDone(var AMessage : TMessage); message WM_ThreadDoneMsg; // Message to be sent back from thread when its done
  41.   public
  42.     { Public declarations }
  43.   end;
  44.  
  45. var
  46.   Form1: TForm1;
  47.  
  48. implementation
  49.  
  50. {$R *.DFM}
  51.  
  52. procedure TForm1.Button1Click(Sender: TObject); // Create Thread 1
  53. { The thread will destroy iteself when it is done executing because FreeOnTerminate is set to true.
  54. The first paramter is the priority, and the second is the progressbar to update.
  55. }
  56. begin
  57.    if (MyThread1 = nil) or (Thread1Active = false) then // make sure its not already running
  58.    begin
  59.      MyThread1 := TMyThread.CreateIt(TrackBar1.Position, ProgressBar1);
  60.      Thread1Active := true;
  61.    end
  62.    else
  63.      ShowMessage('Thread still executing');
  64. end;
  65.  
  66. procedure TForm1.Button2Click(Sender: TObject); // Create Thread 2
  67. begin
  68.    if (MyThread2 = nil) or (Thread2Active = false) then  // make sure its not already running
  69.    begin
  70.      MyThread2 := TMyThread.CreateIt(TrackBar2.Position, ProgressBar2);
  71.      Thread2Active := true;
  72.    end
  73.    else
  74.      ShowMessage('Thread still executing');
  75. end;
  76.  
  77. procedure TForm1.Button3Click(Sender: TObject); // Terminate Thread 1
  78. begin
  79.   if (MyThread1 <> nil) and (Thread1Active = true) then  // check to see if it is running
  80.     MyThread1.Terminate
  81.   else
  82.    ShowMessage('Thread not started');
  83. end;
  84.  
  85. procedure TForm1.Button4Click(Sender: TObject); // Terminate Thread 2
  86. begin
  87.   if (MyThread2 <> nil) and (Thread2Active = true) then  // check to see if it is running
  88.     MyThread2.Terminate
  89.   else
  90.     ShowMessage('Thread not started');
  91. end;
  92.  
  93. procedure TForm1.ThreadDone(var AMessage: TMessage); // keep track of when and which thread is done executing
  94. begin
  95.   if ((MyThread1 <> nil) and (MyThread1.ThreadID = cardinal(AMessage.WParam))) then
  96.   begin
  97.       Thread1Active := false;
  98.   end;
  99.   if ((MyThread2 <> nil) and (MyThread2.ThreadID = cardinal(AMessage.WParam))) then
  100.   begin
  101.       Thread2Active := false;
  102.   end;
  103. end;
  104.  
  105.  
  106. procedure TForm1.FormCreate(Sender: TObject); // initialize to zero
  107. begin
  108.   Thread1Active := false;
  109.   Thread2Active := false;
  110. end;
  111.  
  112.  
  113. procedure TForm1.TrackBar1Change(Sender: TObject); // set Thread 1 Priority
  114. begin
  115.   if (MyThread1 <> nil) and (Thread1Active = true) then
  116.      MyThread1.priority := TThreadPriority(TrackBar1.Position);
  117. end;
  118.  
  119. procedure TForm1.TrackBar2Change(Sender: TObject); // set Thread 2 Priority
  120. begin
  121.   if (MyThread2 <> nil) and (Thread2Active = true) then
  122.     MyThread2.priority := TThreadPriority(TrackBar2.Position);
  123. end;
  124.  
  125.  
  126. procedure TForm1.FormDestroy(Sender: TObject); // Terminate any threads still running
  127. begin
  128.    if (MyThread1 <> nil) and (Thread1Active = true) then
  129.    begin
  130.      MyThread1.Terminate;
  131.      MyThread1.WaitFor;  // wait for it to terminate
  132.    end;
  133.    if (MyThread2 <> nil) and (Thread2Active = true) then
  134.    begin
  135.      MyThread2.Terminate;
  136.      MyThread2.WaitFor;
  137.    end;
  138. end;
  139.  
  140. end.
  141.