線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1524
推到 Plurk!
推到 Facebook!

請問FROM與FROM之間的函數如何共用

答題得分者是:jimmy_wei
marklue
一般會員


發表:33
回覆:55
積分:17
註冊:2005-02-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-23 14:40:35 IP:203.73.xxx.xxx 未訂閱
各位先進大家好: 請問我如果有一段程式(需要傳值),如果在FROMA使用,當FROMA呼叫FROMB時,在FROMB也要使用這段程式,那我需要用PROCEDURE或是FUNCTION做,在FROMA與FROMB各需要做怎樣的宣告,謝謝!
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-23 15:01:19 IP:210.68.xxx.xxx 未訂閱
如果你不是MDI FORM那只要    Unit1.PAS    
FORMA    type
  TFormA = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    SS_ID: String;   //<--把變數放在這
  end;    FORMB    interface    uses
  Unit1;    
然後在程式裡你就可以 FORMA.SS_ID 來使用了
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-23 15:05:33 IP:60.248.xxx.xxx 未訂閱
假設 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-23 15:50:30 IP:203.73.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-23 16:08:18 IP:203.73.xxx.xxx 未訂閱
wyndog前輩您好: 感謝您給我這麼好的觀念,您的意思是不是說把相同類型的副程式放再同一個.PAS檔(這是不是稱為函式庫?),方便將來運用。 謝謝!
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-03-23 16:26:12 IP:210.68.xxx.xxx 未訂閱
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-03-23 16:50:28 IP:203.73.xxx.xxx 未訂閱
jimmy_wei 您好: 1.謝謝您!原來置中這麼簡單,我本來是傳入FROM的寬.高,用解析度的寬高減掉,在除以2,商再傳回來... 2.您指的 Result:= 你要回傳的值 如果我傳入4個引數(w,h,l,t),其中兩個要回傳(l,t) 請問Result:=後面要怎樣輸入?
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-03-23 17:06:00 IP:210.68.xxx.xxx 未訂閱
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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-03-23 17:12:50 IP:60.248.xxx.xxx 未訂閱
引言: 您的意思是不是說把相同類型的副程式放再同一個.PAS檔(這是不是稱為函式庫?),方便將來運用。
對,這樣就可以重複應用了
marklue
一般會員


發表:33
回覆:55
積分:17
註冊:2005-02-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-03-23 18:34:16 IP:203.73.xxx.xxx 未訂閱
jimmy_wei您好: 謝謝您講這麼詳細,這樣我比較有概念了! 謝謝!
系統時間:2024-07-01 5:42:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!