写了一个多线程,但是老出错不知道哪里出错了,实在找不出,请教大家,希望大家帮个忙!谢谢!!
窗体上有两个控件,一个是BUTTON,一个是PANEL,分别为他们命名为
btnMultipleThreads , pnlBarHost ; 
一共有两个单元,主单元为ThreadsEgForm , 内一个单元为WaitThread以下代码为:
(单元ThreadsEgForm 代码 )unit ThreadsEgForm;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;type
  TForm1 = class(TForm)
    btnMultipleThreads: TButton;
    pnlBarHost: TPanel;
    procedure btnMultipleThreadsClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementationuses WaitThread  ;{$R *.dfm}procedure TForm1.btnMultipleThreadsClick(Sender: TObject);
var
  WaitThread : TWaitThread ;
  Bar : TProgressBar ;                            //这里出错
begin
  Bar := TProgressBar.Create(Self);                  //这里出错
  Bar.Smooth := True ;                                  //这里出错
  Bar.Left := Random(pnlBarHost.Width - Bar.Width) ;   //这里出错
  Bar.Top := Random(pnlBarHost.Height - Bar.Height) ;
  Bar.Parent := pnlBarHost ;
  WaitThread := TWaitThread.Create(Random(20000) + 1000 , Bar) ;
  WaitThread.Resume ;end;
end.//下个单元代码
(单元WaitThread代码)
unit WaitThread;interfaceuses
  Classes , Windows, ComCtrls;type
  TWaitThread = class(TThread)
  private
    FDelayMS : Cardinal ;
    FBar : TProgressBar ;
    FNewBarPos : Integer ;
    procedure InitBar ;
    procedure UpdateBar ;
    procedure KillBar ;  protected
    procedure Execute; override;  public
    constructor Create(DelayMS : Cardinal ; Bar : TProgressBar) ;
  end;implementation
{ WaitThread }const
DelayChunk = 100 ;constructor TWaitThread.Create(DelayMS : Cardinal; Bar : TProgressBar) ;
begin
inherited Create(True) ;
FreeOnTerminate := True ;
FDelayMS := DelayMS ;
FBar := Bar ;
end ;procedure TWaitThread.Execute;
var
 I : Integer ;
begin
Synchronize(InitBar) ;
for I := 1 to FDelayMS div DelayChunk do
begin
Sleep(DelayChunk) ;
FNewBarPos := I ;
Synchronize(UpdateBar) ;
if Terminated then
Break
end ;
Beep(250 + Random(100) , 50) ;
Synchronize(KillBar) ;
end ;procedure TWaitThread.InitBar ;
Begin
if Assigned(FBar) then
begin
FBar.Min := 0 ;
FBar.Max := FDelayMS div DelayChunk ;
FBar.Position := FBar.Min
end
end ;procedure TWaitThread.UpdateBar ;
begin
if Assigned(FBar) then
FBar.Position := FNewBarPos ;
end ;procedure TWaitThread.KillBar ;
begin
FBar.Free
end ;
initialization
Randomize
end.
最后一个错误提示为:
[Fatal Error] ThreadsEg.dpr[6]:Could not compile used unit 'ThreadsEgForm.pas'怎么改呀?大家帮个忙吧???
谢谢了

解决方案 »

  1.   

    代码没有问题了。在主窗体上放置个ProgressBar,以后或者删除或者留着都ok。
      

  2.   

    代码上讲确实看不出哪里有问题,
    建议使用楼上的方法试试,同时可以在uses中加入ComCtrls;看看如何
      

  3.   

    我已经在uses中加入ComCtrls了!!
    照sxtdxvb(Delphi被卖,何去何从?C#转型中...(QQ:479543842)) 说我在在主窗体上放置个ProgressBar,然后就能运行,以后删掉照样能运行!!!谢谢你!问题解决!
    不过我不明白这是为什么呀???可以说说理由吗???
      

  4.   

    因为TProgressBar包含在ComCtrls单元中,你没有引用ComCtrls单元,所以会提示TProgressBar没定义,加一个TProgressBar控件后会自动引用ComCtrls单元,再删除TProgressBar此单元的引用还会存在,和手动加上此单元的效果是一样的。