我从今天才开始学的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'
------------------------------------------------------
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'
解决方案 »
- Delphi2010 Dll 调用和释放的问题,感激不尽!!!
- socket通讯问题
- delphi---checkbox+数据库的显示问题
- 请问BCB中"->"的输入有没有快捷方法?
- sql,各位大侠来看一下,,请大家帮忙!问题解决,发分!
- 求助!!关于checkbox控件的使用!!
- 修改Table数据时出现'Record/key deleted',是什么原因?
- 100分急求,在线等
- 请教IdBase64Encoder和IdBase64Decoder的用法?
- 求救:由于系统缓冲区空间不足或队列已满,不能执行套接字操作(10055)ON Api connet
- 如何在数据库中存入日期和时间数据
- 菜问题求解
我改了半天总算把问题改好了
现在把程序写出来:
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.