procedure TForm1.Button1Click(Sender: TObject);
var
i,j,oLeft,oTop:integer;
begin
//终止窗体刷新
oLeft:=0;
oTop:=0;
for i:=1 to 25 do
begin
for j:=1 to 25 do
begin
p[i,j]:=Tpanel.Create(self);
p[i,j].Parent:=self;
p[i,j].BevelOuter:=bvNone;
p[i,j].Height:=5;
p[i,j].Width:=5;
p[i,j].Left:=oLeft+(j-1)*5;
p[i,j].Top:=oTop+(i-1)*5;
p[i,j].Color:=rgb(i*10,j*10,255);
// p[i,j].onclick:=pclick(i,j);
end;
end;
//刷新窗体
end;上述代码画的时候,闪得很厉害,如果在创建 panel 终止窗体刷新,等创建完了让它刷新,再全部显示在窗体中?还有,谁写一个 p[i,j] 的 onclick 事件代码,只要求点击后显示出i,j的值。
var
i,j,oLeft,oTop:integer;
begin
//终止窗体刷新
oLeft:=0;
oTop:=0;
for i:=1 to 25 do
begin
for j:=1 to 25 do
begin
p[i,j]:=Tpanel.Create(self);
p[i,j].Parent:=self;
p[i,j].BevelOuter:=bvNone;
p[i,j].Height:=5;
p[i,j].Width:=5;
p[i,j].Left:=oLeft+(j-1)*5;
p[i,j].Top:=oTop+(i-1)*5;
p[i,j].Color:=rgb(i*10,j*10,255);
// p[i,j].onclick:=pclick(i,j);
end;
end;
//刷新窗体
end;上述代码画的时候,闪得很厉害,如果在创建 panel 终止窗体刷新,等创建完了让它刷新,再全部显示在窗体中?还有,谁写一个 p[i,j] 的 onclick 事件代码,只要求点击后显示出i,j的值。
self.canvas.unlock;
大概這樣吧
public
p:array[1..25,1..25] of TPanel;
private
...........
public
...........
end;procedure TForm1.Button1Click(Sender: TObject);
var
i,j,oLeft,oTop:integer;
p : array[1..25, 1..25] of TPanel;
begin
//终止窗体刷新
oLeft:=0;
oTop:=0;
for i:=1 to 25 do
begin
for j:=1 to 25 do
begin
p[i,j]:=Tpanel.Create(self);
p[i,j].BevelOuter:=bvNone;
p[i,j].Height:=5;
p[i,j].Name := 'row' + inttostr(i) + 'col' + inttostr(j);
p[i,j].Caption := '';
p[i,j].Width:=5;
p[i,j].Left:=oLeft+(j-1)*5;
p[i,j].Top:=oTop+(i-1)*5;
p[i,j].Color:=rgb(i*10,j*10,255);
p[i,j].onclick:= pclick;
p[i,j].Parent:=self;
end;
end;
//刷新窗体
end;procedure TForm1.pclick(Sender: TObject);
begin
showMessage(TPanel(Sender).Name);
end;
BOOL LockWindowUpdate(
HWND hWndLock // handle of window to lock
);
刷完了
LockWindowUpdate(0);
再将doublebuffer设成true