我想在一个按钮中调用几个其它按钮执行函数,可是它们看起来是同时执行的,会出错。也就是说,并不是等一个按钮的全过程执行完,再接下去执行下一个的。应该如何实现呢?
比如这样是不行的:
procedure TForm1.Button10Click(Sender: TObject);
begin
Button6.Click;
Button7.Click;
Button8.Click;
end;当然我也可以用笨办法把具体函数都粘过来,但有没有简单的办法呢?
比如这样是不行的:
procedure TForm1.Button10Click(Sender: TObject);
begin
Button6.Click;
Button7.Click;
Button8.Click;
end;当然我也可以用笨办法把具体函数都粘过来,但有没有简单的办法呢?
6执行完执行Button7.Click;
7执行完执行Button8.Click;
就因为你有先后执行的顺序
所以才那样的啊procedure TForm1.Button10Click(Sender: TObject);
begin
Button6.Click;
end;procedure TForm1.Button6Click(Sender: TObject);
begin
........................... Button7.Click;
end;procedure TForm1.Button7Click(Sender: TObject);
begin
........................... Button8.Click;
end;
WaitForSingleObject
OpenMutexReleaseMutex
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
ADOQuery1: TADOQuery;
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
p : PChar;
end;var
Form1: TForm1;
MutexHandle: THandle;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);//分配空间
var
d : DWORD;
begin
WaitForSingleObject(MutexHandle, INFINITE);
d := GetTickCount();
while (GetTickCount()-d) < 2000 do
Application.ProcessMessages;
GetMem(p,sizeof(pchar));
ReleaseMutex(MutexHandle);end;procedure TForm1.Button2Click(Sender: TObject);//给分配的空间赋值
begin
WaitForSingleObject(MutexHandle, INFINITE);
StrCopy(p,pchar('abc'));
ShowMessage(p);
ReleaseMutex(MutexHandle);
end;procedure TForm1.Button3Click(Sender: TObject);//释放
begin
WaitForSingleObject(MutexHandle, INFINITE);
FreeMem(p);
ReleaseMutex(MutexHandle);
CloseHandle(MutexHandle)
end;procedure TForm1.Button4Click(Sender: TObject);//上面的三个按钮都不可以直接点击,让他们顺序执行通过点击这个按钮来完成
begin
if MutexHandle<>DWORD(-1) then
CloseHandle(MutexHandle);
//生成一个互斥对象
MutexHandle := CreateMutex(nil, False, 'MyMutex');
Button1.Click;
Button2.Click;
Button3.Click;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
MutexHandle :=DWORD(-1);
end;end.
如果按钮里有showmessage这样的我测试了下,不对!
那按wudi_1982的做去