AS:與主題啓動通信中接聽長得太。總的結果是一樣http://pastebin.ca/2426760
procedure TForm1.CreateButton(VAR Button: TButton; CONST L: Integer; CONST T: Integer);
也就是說Pascal語言的基礎知識,如何將參數傳遞給過程/函數。
http://docwiki.embarcadero.com/RADStudio/XE4/en/Parameters_(Delphi)
其實,我不認爲這是與參數
按鈕=零,這意味着「Button1的」和「將Button2」的值的任何問題都不會發送,但是
http://pastebin.ca/2427238
Kudoes比爾爲察覺THI秒。使用單獨的屬性來定位控件既效率低下,又容易出現複製粘貼錯誤。
使用第二個鏈接:
procedure TForm1.CreateButton(out Button: TButton; const L: Integer; const T: Integer);
begin
Button:= TButton.Create(Self);
Button.Parent:= Self;
Button.SetBounds(L, T, 100, 50);
end;
其實你是做什麼用的指針到新創建的按鈕? 在你的代碼中,你只需要鬆開它們!
procedure TForm1.FormCreate(Sender: TObject);
Var
Button1, Button2: TButton;
begin
...
end;
在這個代碼中,這些指針會丟失!如果你確實需要這些值 - 在程序之外傳遞它們。如果你不 - 不問他們 - http://en.wikipedia.org/wiki/YAGNIhttp://en.wikipedia.org/wiki/KISS_principle
Procedure TForm1.CreateButton(const L, T: Integer);
begin
With TButton.Create(Self) do begin
Parent := Self;
SetBounds(L, T, 100, 50);
Caption := 'Caption at ' + IntToStr(T);
Name := 'Name at ' + IntToStr(L);
End;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
B1.CreateButton(100, 50); //Sending properties
B2.CreateButton(200, 40); //Sending properties
end;
我們的B1,B2 ......
你聲稱要在表格上的2個按鈕,但你的代碼顯示您嘗試在第二張表格上製作三條表格和一個按鈕,並在第三張表格上單擊一個按鈕。那麼你真的想要什麼?你是否檢查過B1和B2表單是否是在嘗試添加按鈕時創建的?
也許你真的想
procedure TForm1.FormCreate(Sender: TObject);
begin
SELF.CreateButton(100, 50); //Sending properties
SELF.CreateButton(200, 40); //Sending properties
end;
然後一起去DRY原則,並保持所有的變量在一個地方。
http://docwiki.embarcadero.com/Libraries/XE2/en/System.Types.TPoint
Procedure TForm1.CreateButtons(const a: array of TPoint);
Var p: TPoint;
Begin
for p in a do
CreateButton(p.x, p.y);
End;
type TPointDynArray = array of TPoint;
procedure TForm1.FormCreate(Sender: TObject);
begin
CreateButtons(TPointDynArray.Create(
Point(100,50), Point(200, 40)));
end;
榮譽給Delphi array initialization
之後,您可以隨時添加更多的座標數組,並保持一致。 好,打倒這個德爾福7個異能會 - 有些冗餘 - 編碼像
const BtnCnt = 2;
BtnLocations : array [1..BtnCnt] of TSize = (
(cx: 100, cy: 50), (cx: 200, cy: 40)
);
Procedure TForm1.CreateButtons(const a: array of TSize);
Var i: integer;
Begin
for i := Low(a) to High(a) do
with a[i] do
CreateButton(cx, cy);
End;
procedure TForm1.FormCreate(Sender: TObject);
begin
CreateButtons(BtnLocations);
end;
不過,雖然德爾福5和Delphi的7是偉大的版本,他們是非常不合時宜的。我絕對建議你要麼upgradeing德爾福XE或更近,或側邁向CodeTyphon
TForm1 = class(TForm) //Declaring the procedure
procedure CreateButton(Button: TButton; L: Integer; T: Integer);
聲明,在窗體類的出版部分中的一個通用的過程也不是一個很好的風格。你最好在PRIVATE部分聲明它們。堅持「最低可見度」將有助於使相互依賴性得到控制。否則一年之內你的計劃就會變成意大利麪條混亂,你不能在不破壞其他一切的情況下改變任何東西。我現在正在做一個擁有10多年曆史的項目,我看到「一切都是公開的」後果非常明顯。這是一個很大的痛苦!
你是什麼意思「不工作」?什麼時候 ?哪些錯誤?沒有人可以跳進你的頭,用你的眼睛看。請閱讀http://www.catb.org/~esr/faqs/smart-questions.html –
在CreateButton中有兩個Button.Height ...將第二個更改爲Button.Top:= T; – Bill
我是sry,我的意思是沒有創建按鈕1,2 –