Delphi程式中動態生成控制項的方法及應用

2021-08-25 17:05:47 字數 3011 閱讀 7657

一、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[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:=seriesclass.create(self);

newseries.parentchart:=machinesburthencharts;

newseries.clear;

burthen:=machineburthen;

burthen:=round(burthen*100)/100; //只取小數點後兩位數字

newseries.add(burthen,'',newseries.seriescolor);

end;

end;

注:(1) machineburthen為一實型陣列,其值為對應裝置的利用率,已在另一函式中計算得到;

(2) machinesburthencharts為tchart控制項,在type段說明。

三、程式執行結果顯示

1、動態生成shape控制項,顯示零件排產計畫圖(略)

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...