先看效果圖:
{————————————華麗的分割線開始了—————
單位?unit 1;
連接
使用
Windows,?消息?SysUtils?變種?班級?圖形,?控件,?表格,
對話?StdCtrls,?ExtCtrls
類型
TForm1?=?類別(t表單)
scrBox1:?TScrollBox
pnl1:?TPanel
btn1:?t按鈕;
edt2:?TEdit
lbl1:?TLabel
程序?btn1Click(發件人:?to object);
程序?FormCreate(發件人:?to object);
程序?SCR box 1調整大小(發件人:?to object);
程序?scrBox1MouseWheelDown(發件人:?to object;?Shift:?TShiftState
?MousePos:?TPoint?var?處理:?布爾);
程序?scrBox1MouseWheelUp(發件人:?to object;?Shift:?TShiftState
?MousePos:?TPoint?var?處理:?布爾);
私人的
btn:?t按鈕;
FList:?TList?//定義壹個TList變量來加載按鈕。
{?私人?申報?}
程序?SetPosition
程序?btnClick(發件人:?to object);
公眾的
{?公共?申報?}
結束;
定義變量
Form1:?t form 1;
履行
{$R?*.dfm}
{調整位置}
程序?TForm1。SetPosition
定義變量
intLeft,?intTop:?整數;
intCount:?整數;
開始
intLeft?:=?20;
intTop?:=?20;
為了什麽?intCount?:=?0?去哪?fList。數數?-?1?做
開始
btn?:=?FList。items[int count];
如果?intLeft?+?btn。寬度?& gt?scrBox1。寬度?然後
開始
?intLeft?:=?20;
?intTop?:=?intTop?+?btn。身高?+?20;
結束;
btn。向左?:=?intLeft
btn。Top?:=?intTop
intLeft?:=?intLeft?+?btn。寬度?+?20;
結束;
結束;
-單擊按鈕開始創建。
程序?TForm1.btn1Click(發送方:?to object);
定義變量
intCount:?整數;
開始
如果?StrToIntDef(edt2。文字,?1)?& gt?1000?然後
開始
如果?MessageBox(句柄,PChar)按鍵輸入太多,電腦會卡!!!+#10#13+'是否要繼續?' ),?提示',?MB_ICONINFORMATION?+?MB_YESNO)?=?mrNo?然後
?退出;
結束;
{如果FList已經有對象,請先釋放它}
如果?已分配(FList)?然後
為了什麽?intCount?:=?0?去哪?FList。數數?-?1?做
?to object(FList[int count])。免費;
FList。清晰;?//釋放後,清除指針,即nil(這行代碼很重要,否則會出錯!)
{默認情況下創建按鈕}
為了什麽?intCount?:=?1?去哪?StrToIntDef(edt2。文字,?1)?做
開始
btn?:=?t按鈕。創建(無);?//創建壹個控件(當參數為self時,不需要手動釋放,關閉窗體後會自動釋放)。
FList。添加(BTN);?//將創建的按鈕放入FList。
SetPosition?//調整位置
btn。父母?:=?SCR box 1;?//顯示在ScrollBox上(這行代碼很關鍵,沒有它就不會顯示)
btn。標題?:=?按鈕'+?int tostr(int count);
btn。OnClick?:=?btnClick?//動態創建按鈕的click事件。
結束;
scrBox1。SetFocus
結束;
給點,妳就貼完了。。。
{————————————華麗的分割線兩端————
PS: 1。至於以上FList變量的功能和用法,請自行查找;
2.我沒有用動態數組,用的TList類更靈活;
3.我演示的按鈕可以隨著窗口和位置的變化而變化,妳自己試試;
4.您可以創建任何按鈕,但不要輸入太多按鈕。如果電腦配置不正確,就會卡死。
我用Delphi2007,只要妳不用Delphi?XE(2),其他都應該沒問題;
6.不懂再問;
7.代碼貼出來了,發現沒得分。我很沮喪。搞什麽鬼!提問不給分,白費勁。
需要完整代碼,請加50分!!!