一、delphi中生成控制項的兩種方法
---- 1、 form(表單)設計中生成控制項
---- 在進行form設計時,直接在控制項工具箱選擇所需控制項,再設定其屬性與響應事件,這種方法比較常見。
---- 2、 程式中動態生成控制項
---- 有時候,我們需要在程式執行時動態生成控制項,這樣做有兩大優點:一是可以增加程式的靈活性;二是如果生成控制項的多少與程式中間執行結果相關,顯然方法一是無法的實現的,必須用程式中動態生成方法。
---- (1) 定義控制項型別
varbutton1:tbutton;
---- (2) 生成控制項
button1:=tbutton. create(self);
button1.parent:=self;
//一般將其父控制項設定為self,如果不設定parent的值,
則控制項不會在螢幕
//顯示出來
---- (3) 設定其它屬性及定義相關事件響應函式,如caption,left,top,height,width,visible,enabled,hint和onclick事件響應函式等。
二、動態生成控制項方法的應用
---- 在開發生產排程與管理系統中,需要動態生成排產計畫圖,以甘特圖表示,應用shape控制項來顯示零件的加工狀況(每道工序的加工開始時間與結束時間)是非常適合的。應用chart控制項,對加工裝置利用率以三維直方圖顯示,非常直觀。現分別將在程式中動態生成shape控制項和chart控制項的過程加以說明。
---- 1、動態生成shape控制項顯示排產計畫圖(甘特圖)
procedure tcreatemulticharts.proccreatecharts;
vari,j,rows,columns,rowspace,chartsheight:integer;
shapechart:array of array of tshape;
begin
rows:=16; //shape控制項陣列行數
columns:=8; // shape控制項陣列列數
rowspace:=20; // shape控制項行間距
chartsheight:=20; // shape控制項高度
setlength(shapechart,rows,columns);
//設定shapechart陣列大小
for i:=0 to rows do
for j:=0 to columns do
begin
shapechart[i][j]:=tshape.create(self);
with shapechart[i,j] do
begin
parent:=self; //此行必不可少,
否則shape控制項在螢幕顯示不出
shape:=strectangle; // shape控制項形狀為矩形
top:=45+i*(rowspace+chartsheight);
left:=round(180+q[i,j].starttime);
//因q[i,j].starttime為實數,故需進行四捨五入取整
width:=round(q[i,j].value)
height:=chartsheight;
brush.color:=randomcolor;
//自定義函式,說明附後
brush.style:=bssolid; //設定填充方式
enabled:=true;
end;
end;
end;
---- 注:
---- (1)q為一記錄型二維陣列,定義如下:
type
tempdata=record
value:real;
starttime:real;
end;
q:array of array of tempdata
---- 並且在另一過程已對q的分量進行賦值。
---- (2)為了區分不同的零件,shape以不同顏色顯示,此時,呼叫了函式randomcolor。該函式為:
function tcreatemulticharts.randomcolor;
varred,green,blue:byte;
begin
red:=random(255);
green:=random(255);
blue:=random(255);
result:=red or (green shl 8) or (blue shl 16);
end;
---- 2、動態生成charts控制項的chartseries元件,顯示裝置利用率
procedure tformmultimachinesburthen.
showmachineburthencharts;
vari:integer;
burthen:real;
seriesclass:tchartseriesclass;
newseries:array of tchartseries;
begin
setlength(newseries,createmulticharts.rows);
machinesburthencharts.height:=200;
machinesburthencharts.width:=550;
for i:=0 to createmulticharts.rows do
begin
seriesclass:=tbarseries; //設定形狀為三維條形圖
newseries[i]:=seriesclass.create(self);
newseries[i].parentchart:=machinesburthencharts;
newseries[i].clear;
burthen:=machineburthen[i];
burthen:=round(burthen*100)/100; //只取小數點後兩位數字
newseries[i].add(burthen,'',newseries[i].seriescolor);
end;
end;
---- 注:
---- (1) machineburthen[i]為一實型陣列,其值為對應裝置的利用率,已在另一函式中計算得到;
---- (2) machinesburthencharts為tchart控制項,在type段說明。
delphi程式中動態生成控制項的方法
程式中動態生成控制項的方法分為三步,首先,定義生成的控制項型別,再用create函式生成控制項,最後對控制項的相關屬性賦值。以tbutton控制項為例,步驟如下 a.定義控制項型別 var button1 tbutton b.生成控制項 button1 tbutton.create self but...
android動態生成控制項
方法 呼叫布局容器的addview,addview需傳入的引數就是你想放置的view 這裡給出乙個例子 final linearlayout layout new linearlayout this layout.setorientation linearlayout.vertical setcon...
Unity UGUI動態生成控制項
一 首先你得先清楚recttransform元件的一些程式控制 1.先得到ugui控制項上面的recttransform元件 recttransform rtr gameobject.getcomponent 2.設定top和bottom值 rtr.offsetmax new vector2 rtr...