動態生成控制項方法的應用

2021-05-28 02:50:17 字數 3234 閱讀 7344

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