請問FROM與FROM之間的函數如何共用 |
答題得分者是:jimmy_wei
|
marklue
一般會員 發表:33 回覆:55 積分:17 註冊:2005-02-09 發送簡訊給我 |
|
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
|
wyndog
資深會員 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
假設 FormA 是 Unit1; FormB 是 Unit2;
你要用的 Procedure or Function 叫 ShareMe STEP 1: 保持良好的習慣,新增一個 unit 讓這二個 form 用
這個 Unit 自己取名字就行啦,這裡先叫它 Share.pas STEP 2: Share.pas 大致上長這樣:
unit Share; interface procedure ShareMe; // Interface,只做函數宣告 implementation procedure ShareMe; // 詳細的程式碼寫在 implementation begin .............. end; end.STEP 3: 因為 FormA & FormB 都要用 故分別在他們的 uses 裡加上 Share STEP 4: 這樣就可以直接呼叫 ShareMe 了 |
marklue
一般會員 發表:33 回覆:55 積分:17 註冊:2005-02-09 發送簡訊給我 |
jimmy_wei前輩您好: 謝謝您的回覆
您的意思是這樣嗎?
因為小弟初接觸視窗程式,很多都很模糊 FROMA(F_MAIN) public
function ScreenCenter(w:integer;h:integer;l:integer;t:integer):integer; function TF_Main.ScreenCenter(w,h,l,t:integer):integer;
var
OldWidth,OldHeight:integer;
begin;
OldWidth := GetSystemMetrics(SM_CXSCREEN);
OldHeight := GetSystemMetrics(SM_CYSCREEN);
l:=(OldWidth - w)div 2;
t:=(OldHeight - h)div 2;
end; FROMB F_Main.ScreenCenter(self.Width,self.Height,self.Left,self.Top); 這樣值好像傳不回來
不知道錯在哪裡? 我是要做一段讓FROM可以置於螢幕中的程式
|
marklue
一般會員 發表:33 回覆:55 積分:17 註冊:2005-02-09 發送簡訊給我 |
|
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
marklue你好... 1.別叫我前輩,聽起來怪怪怪,真不習慣
2.如果你只是想把form置中,可以把Position設成poScreenCenter即可
3.我看不出來你的程式想要回傳的是什麼值 FROMA(F_MAIN)
public function ScreenCenter (w:integer;h:integer;l:integer;t:integer):integer; function TF_Main.ScreenCenter(w,h,l,t:integer):integer; var OldWidth,OldHeight:integer; begin; OldWidth := GetSystemMetrics(SM_CXSCREEN); OldHeight := GetSystemMetrics(SM_CYSCREEN); l:=(OldWidth - w)div 2; t:=(OldHeight - h)div 2; Result:= 你要回傳的值 //--沒有這一行什麼都不會回傳呀 end; FROMB F_Main.ScreenCenter(self.Width,self.Height,self.Left,self.Top); 如果要我寫我會這樣寫 unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure ScreenCenter(Form: TForm); end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var MyForm: TForm; begin MyForm:= TForm.Create(Self); MyForm.Show; ScreenCenter(MyForm); end; procedure TForm1.ScreenCenter(Form: TForm); begin Form.Left:= Round((GetSystemMetrics(SM_CXSCREEN)-Form.Width)/2); Form.Top:= Round((GetSystemMetrics(SM_CYSCREEN)-Form.Height)/2); end; end. 你參考看看吧發表人 - jimmy_wei 於 2005/03/23 16:46:59 |
marklue
一般會員 發表:33 回覆:55 積分:17 註冊:2005-02-09 發送簡訊給我 |
|
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
marklue你好:
我有寫了一小段程式給你,再上一篇後面我加上去的
如果你要一次回傳兩個或多個可以用指標的方法 ex
procedure TForm1.Scre(var a, b, c, d: Integer); begin a:= 1; b:= 2; c:= 3; d:= 4; end; procedure TForm1.Button2Click(Sender: TObject); var a, b, c, d: Integer; begin Scre(a, b, c, d); ShowMessage(IntToStr(a) ' ' IntToStr(b) ' ' IntToStr(c) ' ' IntToStr(d)); end; |
wyndog
資深會員 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
|
marklue
一般會員 發表:33 回覆:55 積分:17 註冊:2005-02-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |