我从今天才开始学的Delphi 在写一个程序的时候觉得好像有很基础的问题没有懂,请帮我看看这个程序哪里错了:
------------------------------------------------------
   unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Extctrls, ToolWin, ComCtrls;
  //自定义的常量部分
  const
  cColCount = 20;
  cRowCount = 20;
  cHeight = 20;
  cWidth = 25;type
  TForm1 = class(TForm)
    ToolBar1: TToolBar;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);    { Public declarations }
  private    { Private declarations }
  public  end;var
  Form1: TForm1;
  //自定义的函数部分
function Threaddraw(p:pointer):Longint;stdcall;      //错误就是出在这的
//错误信息在后面
//多线程画图程序的线程入口函数
function Threadcount(p:pointer):Longint;stdcall;
//多线程计数程序的线程入口函数
procedure PointSwap(var nPointA, nPointB:Tpoint);
//画图函数中的颜色点交换函数
implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
//画图函数中的颜色点交换函数。如下所示:
procedure PointSwap(var nPointA, nPointB: TPoint);
{交换两点的值}
  var
    Temp: TPoint;
  begin
    Temp.X :=nPointA.X;
    Temp.Y :=npointA.Y;
    nPointA.X :=nPointB.X;
    nPointA.Y :=nPointB.Y;
    nPointB.X :=Temp.X;
    nPointB.Y :=Temp.Y;
  end;
//多线程画图程序的线程入口函数,如下所示:
function Threaddraw(P:pointer):Longint;stdcall;
  var
    A: array[1 .. cColCount * cRowCount] of TPoint;
    I,J,K: Integer;
  begin
     ///////begin 得到一个顺序的坐标列表
     K:= 0;
     for I := 1 to cColCount do
       for J := 1 to cRowCount do begin
         inc(K);
         A[K].x :=I;
         A[K].y :=J;
       end;
       /////////End 得到一个顺序的坐标列表
       /////////Begin打乱坐标列表
       for I := 1 to cColCount * cRowCount do
        PointSwap(A[I],A[Succ(Random(cColCount * cRowCount))]);
       /////////End打乱坐标列表
       /////////Begin开始画了
       Form1.Canvas.Brush.Color:= Form1.Color;
       Form1.Canvas.FillRect(Rect(0,0,
       cColCount * cWidth,
       cRowCount * cHeight));
         for I :=1 to cColCount * cRowCount do begin
           Form1.Canvas.Brush.Color :=Random($ffffff);
           J :=pred(A[I].x) * cWidth;
           K :=Pred(A[I].y) * cHeight;
           Sleep(20);//这里控制时间间隔
           Form1.Canvas.FillRect(Rect(J,K,J + cWidth,K + cHeight));
         end;
         ///////end开始画了
     end;
//多线程计数程序的线程入口函数,如下所示:
function Threadcount(P:pointer):Longint;stdcall;
  var
    i:integer;
    DC:HDC;
    S:string;
    begin
      DC:=GetDC(Form1.Handle);
      for i:=0 to 1000000 do begin
      S:=Inttostr(i);
      Textout(DC,100,100,Pchar(s),length(s));
    end;
    ReleaseDC(Form1.Handle,DC);
    end;beginend;procedure TForm1.Button1Click(Sender: TObject);
  var
    hThread,Threadcount:Thandle;
    //定义一个句柄
    ThreadID:DWord;
begin
  //创建线程,同时线程函数被调用
hThread:=CreateThread(nil,
                  0,
                  @Threadcount,
                  nil,
                  0,
                  ThreadID);
if hTHread=0 then
messagebox(Handle,'线程建立失败',nil,MB_OK);end;procedure TForm1.Button2Click(Sender: TObject);
begin
Threadcount(nil);
//没有创建线程时,直接调用线程函数
end;procedure TForm1.Button3Click(Sender: TObject);
  var
    hThread,Threadcount:Thandle;//定义一个句柄
    ThreadID:DWord;
begin
  hThread:=CreateThread(nil,
                  0,
                  @Threadcount,
                  nil,
                  0,
                  ThreadID);
  if hTHread=0 then
  messagebox(Handle,'县城建立失败',nil,MB_OK);
end;procedure TForm1.Button4Click(Sender: TObject);
begin
Threaddraw(nil);
//没有创建线程时,直接调用线程函数
end;end.
---------------------------------------------------
错误信息如下:
I:\Delphi 源文件\xian\Unit1.pas(45): function Threadcount(p:pointer):Longint;stdcall;
I:\Delphi 源文件\xian\Unit1.pas(101): function Threadcount(P:pointer):Longint;stdcall;
I:\Delphi 源文件\xian\Unit1.pas(121):     hThread,Threadcount:Thandle;
I:\Delphi 源文件\xian\Unit1.pas(128):                   @Threadcount,
I:\Delphi 源文件\xian\Unit1.pas(139): Threadcount(nil);
I:\Delphi 源文件\xian\Unit1.pas(145):     hThread,Threadcount:Thandle;//定义一个句柄
I:\Delphi 源文件\xian\Unit1.pas(150):                   @Threadcount,
[Warning] Unit1.pas(99): Return value of function 'Threaddraw' might be undefined
[Warning] Unit1.pas(113): Return value of function 'Threadcount' might be undefined
[Error] Unit1.pas(119): Undeclared identifier: 'Button1Click'
[Error] Unit1.pas(119): ';' expected but '(' found
[Error] Unit1.pas(133): Undeclared identifier: 'Handle'
[Error] Unit1.pas(137): Undeclared identifier: 'Button2Click'
[Error] Unit1.pas(137): ';' expected but '(' found
[Error] Unit1.pas(143): Undeclared identifier: 'Button3Click'
[Error] Unit1.pas(143): ';' expected but '(' found
[Error] Unit1.pas(155): Undeclared identifier: 'Handle'
[Error] Unit1.pas(158): Undeclared identifier: 'Button4Click'
[Error] Unit1.pas(158): ';' expected but '(' found
[Error] Unit1.pas(43): Unsatisfied forward or external declaration: 'Threaddraw'
[Error] Unit1.pas(45): Unsatisfied forward or external declaration: 'Threadcount'
[Error] Unit1.pas(47): Unsatisfied forward or external declaration: 'PointSwap'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

解决方案 »

  1.   

    楼主学delphi才一天,就开始搞多线程了,真是天才,不敢指教
      

  2.   

    多数是些语法错误,建议先看看ObjectPascal的语法,从一个最简单的例子开始.
      

  3.   

    谢谢楼上给位的提醒
    我改了半天总算把问题改好了
    现在把程序写出来:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, ToolWin, ComCtrls;
      //自定义的常量部分
      const
      cColCount = 20;
      cRowCount = 20;
      cHeight = 20;
      cWidth = 25;type
      TForm1 = class(TForm)
        ToolBar1: TToolBar;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;    procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private    { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      //自定义的函数部分
    function Threaddraw(P:pointer):Longint;stdcall;
    //多线程画图程序的线程入口函数
    function Threadcount(P:pointer):Longint;stdcall;
    //多线程计数程序的线程入口函数
    procedure PointSwap(var nPointA, nPointB:Tpoint);
    //画图函数中的颜色点交换函数
    implementation
    {$R *.dfm}
    //画图函数中的颜色点交换函数。如下所示:
    procedure PointSwap(var nPointA, nPointB: TPoint);
    {交换两点的值}
      var
        Temp: TPoint;
      begin
        Temp.X :=nPointA.X;
        Temp.Y :=npointA.Y;
        nPointA.X :=nPointB.X;
        nPointA.Y :=nPointB.Y;
        nPointB.X :=Temp.X;
        nPointB.Y :=Temp.Y;
      end;
    //多线程画图程序的线程入口函数,如下所示:
    function Threaddraw(P:pointer):Longint;stdcall;
      var
        A: array[1 .. cColCount * cRowCount] of TPoint;
        I,J,K: Integer;
      begin
         ///////begin 得到一个顺序的坐标列表
         K:= 0;
         for I := 1 to cColCount do
           for J := 1 to cRowCount do begin
             inc(K);
             A[K].x :=I;
             A[K].y :=J;
           end;
           /////////End 得到一个顺序的坐标列表
           /////////Begin打乱坐标列表
           for I := 1 to cColCount * cRowCount do
            PointSwap(A[I],A[Succ(Random(cColCount * cRowCount))]);
           /////////End打乱坐标列表
           /////////Begin开始画了
           Form1.Canvas.Brush.Color:= Form1.Color;
           Form1.Canvas.FillRect(Rect(0,0,
           cColCount * cWidth,
           cRowCount * cHeight));
             for I :=1 to cColCount * cRowCount do begin
               Form1.Canvas.Brush.Color :=Random($ffffff);
               J :=pred(A[I].x) * cWidth;
               K :=Pred(A[I].y) * cHeight;
               Sleep(20);//这里控制时间间隔
               Form1.Canvas.FillRect(Rect(J,K,J + cWidth,K + cHeight));
             end;
             ///////end开始画了
         end;
    //多线程计数程序的线程入口函数,如下所示:
    function Threadcount(P:pointer):Longint;stdcall;
      var
        i:integer;
        DC:HDC;
        S:string;
        begin
          DC:=GetDC(Form1.Handle);
          for i:=0 to 1000000 do begin
          S:=Inttostr(i);
          Textout(DC,100,100,Pchar(s),length(s));
        end;
        ReleaseDC(Form1.Handle,DC);
        end;
    procedure TForm1.Button1Click(Sender: TObject);
      var
        hThread,Threadcount:Thandle;
        //定义一个句柄
        ThreadID:DWord;
    begin
      //创建线程,同时线程函数被调用
    hThread:=CreateThread(nil,
                      0,
                      @Threadcount,
                      nil,
                      0,
                      ThreadID);
    if hTHread=0 then
    messagebox(Handle,'线程建立失败',nil,MB_OK);end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    Threadcount(nil);
    //没有创建线程时,直接调用线程函数
    end;procedure TForm1.Button3Click(Sender: TObject);
      var
        hThread,Threadcount:Thandle;//定义一个句柄
        ThreadID:DWord;
    begin
      hThread:=CreateThread(nil,
                      0,
                      @Threadcount,
                      nil,
                      0,
                      ThreadID);
      if hTHread=0 then
      messagebox(Handle,'县城建立失败',nil,MB_OK);
    end;procedure TForm1.Button4Click(Sender: TObject);
    begin
    Threaddraw(nil);
    //没有创建线程时,直接调用线程函数
    end;procedure TForm1.FormCreate(Sender: TObject);
    beginend;end.
      

  4.   

    从今天才开始学的Delphi 就写那么大的一个程序,历害