各位高手,若干个panel,怎么自动排列,如何控制? ( 积分: 200 )

  • 主题发起人 主题发起人 rzqcjwrz
  • 开始时间 开始时间
R

rzqcjwrz

Unregistered / Unconfirmed
GUEST, unregistred user!
var
Newpanel:array[0..63] of panel;
i:integer;
begin

for i:=0 to ChanelNum-1do

Newpanel:=Tpanel.create(self);
......??????
按1*1/2*2/4*4/5*5/6*6/7*7/8*8的格式处理,怎样才能选中?
 
能否说的详细一点?
 
在海康的客户端,为了显示图像.
建立一个panel数组后,如何控制它,并且如何显示它,按照:1*1/2*2/4*4/5*5/6*6/7*7/8*8的格式处理
 
你已经Create出来了,再设置每个Panel的left,top, Width, Height不就好了,
 
要按照一定的格式排列,怎么排列
 
你按你要求的格式来设置好每个panel的高宽,比如你的格式是5*5,总的高和宽分别是100,如果不要求有间隔,哪你将第一个panel设置为高宽20。
 
怎么写出来,能示范一下吗?
 
给你一段代码吧。以前我做过的。
对于m*n=5*4的。
var
PanelW : array[0..19] of TPanel;
i,m,n,iWidth,iHeight : Integer;//5*4
begin

m:=5;n:=4;
iWidth:=父级控件的width div n;
iHeight:=父级控件的Height div m;
for i := 0 to m*n-1do

begin

PanelW:=TPanel.Create(self);
PanelW.Parent:=Self;//self为父级控件
PanelW.Width:=iWidth;
PanelW.Height:=iHeight;
PanelW.Visible:=True;
PanelW.Top:=(i div n)*iHeight;
PanelW.Left:=(i mod n)*iwidth;
PanelW.Caption:=inttostr(i);
end;
 
xingkong97:怎么选中每一个panel
 
选中?你的意思是说当点击该panel的时候,panel有些变化对不对?
 
选中?你的意思是说当点击该panel的时候,panel有些变化对不对?
 
选中panel,获得焦点,放大或缩小.
 
通道数:chanelnum赋值给M*N,M*N=chanelnum
如何得到panel的索引值,并且能放大/恢复原状态
 
明白了,你如果要实现这个功能的话,那么我告诉你你可以这么做,通过编程实现panel的放大和缩小。panel的索引值可以通过Tag实现。
 
怎么实现??我是一个初学者,请多多指教.
 
这个问题比较繁琐,不是一两句话能说清的。这样吧,我做一个例子,然后给你如何?
 
我的电子邮件:rzqcjwrz@126.com
rzqcjwrz@163.com
多谢!!!
 
var
PanelW : array[0..63] of TPanel;
i,n,k,x,m,iWidth,iHeight,chanelnum : Integer;//5*4
s,temp:string;
begin

chanelnum:=24;//通道数
if chanelnum <= 4 then

x:=4
else
if chanelnum<9 then

x:=9
else
if chanelnum<=16 then

x:=16
else
if chanelnum <= 25 then

x:=25
else
if chanelnum<=36 then

x:=36
else
if chanelnum<=49 then

x:=49
else
if chanelnum<=64 then

x:=8;

Str(Sqrt(x):5:0, Temp);

S :=temp;
k:=strtoint(s);
m:=k;
n:=k;
iWidth:=352 div n;
iHeight:=288 div m;
for i := 0 to m*n-1do

begin

PanelW:=TPanel.Create(self);
PanelW.Parent:=Self;//self为父级控件
PanelW.Width:=iWidth;
PanelW.Height:=iHeight;
PanelW.Visible:=True;
PanelW.Top:=(i div n)*iHeight;
PanelW.Left:=(i mod n)*iwidth;
PanelW.Caption:=inttostr(i);
end;

end;
 
程序如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
Currenti,iWidth,iHeight,M,N : Integer;
procedure panelClick(Sender: TObject);
{ Private declarations }
public
{ Public declarations }
end;


var
Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.panelClick(Sender: TObject);
begin

if Currenti=TPanel(Sender).Tag then

begin

TPanel(Sender).Width:=iWidth;
TPanel(Sender).Height:=iHeight;
TPanel(Sender).Top:=(Currenti div N)*iHeight;
TPanel(Sender).Left:=(Currenti mod N)*iwidth;
Exit;
end;


Currenti:=TPanel(Sender).Tag;
TPanel(Sender).Width:=352;
TPanel(Sender).Height:=288;
TPanel(Sender).Top:=0;
TPanel(Sender).Left:=0;
TPanel(Sender).BringToFront;
end;



procedure TForm1.FormCreate(Sender: TObject);
var
PanelW : array[0..63] of TPanel;
i,k,x,chanelnum : Integer;//5*4
s,temp:string;
begin

chanelnum:=24;//通道数
if chanelnum <= 4 then

x:=4
else
if chanelnum<9 then

x:=9
else
if chanelnum<=16 then

x:=16
else
if chanelnum <= 25 then

x:=25
else
if chanelnum<=36 then

x:=36
else
if chanelnum<=49 then

x:=49
else
if chanelnum<=64 then

x:=8;

Str(Sqrt(x):5:0, Temp);

S :=temp;
k:=strtoint(s);
M:=k;
N:=k;
iWidth:=352 div n;
iHeight:=288 div m;
for i := 0 to M*N-1do

begin

PanelW:=TPanel.Create(self);
PanelW.Parent:=Self;//self为父级控件
PanelW.Width:=iWidth;
PanelW.Height:=iHeight;
PanelW.Visible:=True;
PanelW.Top:=(i div N)*iHeight;
PanelW.Left:=(i mod N)*iwidth;
PanelW.Caption:=inttostr(i);
PanelW.OnDblClick:=panelClick;
PanelW.Tag:=i;
end;


end;


end.
 

Similar threads

I
回复
0
查看
843
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
662
import
I
后退
顶部