Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 27th, 2012  |  syntax: None  |  size: 2.34 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Delphi - Synchronize Thread with Frame
  2. Interface := TInterface.Create(self);
  3.     with handlingInterface do begin
  4.       Parent := Form1;
  5.       Left := 0; Top := 35;
  6.       Width := 570; Height := 250;
  7.     end;
  8.        
  9. var
  10. Form1: TForm1;
  11.        
  12. unit Unit6;
  13.  
  14. interface
  15.  
  16. uses
  17.     Classes, ComCtrls;
  18.  
  19. type
  20.     TProgressBarThread = class(TThread)
  21.     private
  22.         { Private declarations }
  23.         FProgressBar: TProgressBar;
  24.         procedure MoveProgress;
  25.     protected
  26.         procedure Execute; override;
  27.     public
  28.         procedure SetProgressBar(ProgressBar: TProgressBar);
  29.     end;
  30.  
  31. implementation
  32.  
  33. { ProgressBarThread }
  34. procedure TProgressBarThread.Execute;
  35. begin
  36.     { Place thread code here }
  37.     Synchronize(MoveProgress);
  38.  
  39. end;
  40.  
  41. procedure TProgressBarThread.MoveProgress;
  42. begin
  43.     FProgressBar.StepIt;
  44. end;
  45.  
  46. procedure TProgressBarThread.SetProgressBar(ProgressBar: TProgressBar);
  47. begin
  48.     FProgressBar := ProgressBar;
  49. end;
  50.  
  51. end.
  52.        
  53. var
  54.     PBT: TProgressBarThread;
  55. begin
  56.     PBT := TProgressBarThread.Create(True);
  57.     PBT.FreeOnTerminate := True;
  58.     PBT.SetProgressBar(ProgressBar1);
  59.     PBT.Start;
  60. //  PBT.Resume;
  61. end;
  62.        
  63. unit Unit2;
  64.  
  65. interface
  66.  
  67. uses
  68.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  69.   Dialogs, StdCtrls, ComCtrls;
  70.  
  71. const
  72.   WM_PROGRESS_MESSAGE = WM_USER + 99;
  73.  
  74. type
  75.   TProgressThread = class(TThread)
  76.   private
  77.     FWindowHandle: HWND;
  78.   protected
  79.     procedure Execute; override;
  80.   public
  81.     property WindowHandle: HWND read FWindowHandle write FWindowHandle;
  82.   end;
  83.  
  84.   TFrame2 = class(TFrame)
  85.     ProgressBar1: TProgressBar;
  86.     Button1: TButton;
  87.     procedure Button1Click(Sender: TObject);
  88.   private
  89.     procedure OnProgressMessage(var Msg: TMessage); message WM_PROGRESS_MESSAGE;
  90.   public
  91.   end;
  92.  
  93. implementation
  94.  
  95. {$R *.dfm}
  96.  
  97. { TFrame2 }
  98.  
  99. procedure TFrame2.Button1Click(Sender: TObject);
  100. var
  101.   lThread: TProgressThread;
  102. begin
  103.   lThread := TProgressThread.Create(True);
  104.   lThread.FreeOnTerminate := True;
  105.   lThread.WindowHandle := Self.Handle;
  106.   lThread.Start;
  107. end;
  108.  
  109. procedure TFrame2.OnProgressMessage(var Msg: TMessage);
  110. begin
  111.   ProgressBar1.Position := Msg.WParam;
  112. end;
  113.  
  114.  
  115. { TProgressThread }
  116.  
  117. procedure TProgressThread.Execute;
  118. var
  119.   lProgressCount: Integer;
  120. begin
  121.   inherited;
  122.  
  123.   for lProgressCount := 0 to 100 do
  124.   begin
  125.     PostMessage(FWindowHandle, WM_PROGRESS_MESSAGE, lProgressCount, 0);
  126.     Sleep(15);
  127.   end;
  128. end;
  129.  
  130. end.