函式可以傳入1個數值再回傳3個數值嗎? |
尚未結案
|
moko
一般會員 發表:31 回覆:34 積分:13 註冊:2002-09-20 發送簡訊給我 |
|
delphiwww
資深會員 發表:145 回覆:363 積分:368 註冊:2002-03-13 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hello moko 您好 try this :
function TForm1.GetNumber(InNumber: integer): Variant; begin Result := VarArrayOf([InNumber 1, InNumber 2, InNumber 3]); end; // // // // procedure TForm1.Button1Click(Sender: TObject); var d : variant; begin d := GetNumber(100); ShowMessage(VarToStr(d[0])); ShowMessage(VarToStr(d[1])); ShowMessage(VarToStr(d[2])); end;我不是高手, 高手是正在銀幕前微笑的人. 發表人 - miles 於 2002/12/18 14:34:02
------
我不是高手, 高手是正在銀幕前微笑的人. |
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
如果這三個數值常常會被使用到的話
可以建立一結構,這樣子也變數可讀性也比較高
像是請假時數種類可以宣告成一個type
例:
implementation type holiType=record ss:Integer; ff:Integer; leave :Integer; end; function bb(itype:Integer):holiType; var i:holiType ; begin i.ss:=0; i.ff :=1; i.leave :=3; Result:=i; end; procedure TForm1.Button1Click(Sender: TObject); var m: holiType; begin m := bb(0); self.Caption := IntToStr(m.leave); end;=============================================================================== 提醒您,貼錯文章可立即傳訊通知該版版主/站長/副站長協助處理,不要放著不管喔 |
moko
一般會員 發表:31 回覆:34 積分:13 註冊:2002-09-20 發送簡訊給我 |
謝謝delphiwww,Miles,ddy的幫忙,可是我看不懂耶...太高深了,我想說明一下我想像的樣子,再請你們幫忙看看可否行的通好嗎?副程式大概的長相:< class="code">
if 請假 < 1 then begin
if 請假 =0.5 then
ss=...
ff=...
leave=...
else if 請假 =0.25 then
ss=...
ff=...
leave=...
else if 請假 > 1 then begin
分1.整數部分
......
......
2.小數部分-->又跑回到if 時數 < 1 那邊繼續算
最後回傳最終的結果給主程式 主程式大概的長相:
while not q2.eof do begin
if 病假 then
病假的副程式(判斷ss,ff,leave的值)
else if 事假 then
begin
事假的副程式(判斷ss,ff,leave的值)
end;
q2.next;
end;
edit1.text:=ss;
edit2.text:=ff;
edit3.text:=leave;
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hi moko 您好:
用delphiwww的方法即可, 寫一Procedure, 但比較不解的是用一個while迴圈跑後, Edit1.2.3的值最後只會顯示最後一筆的值
Procedure ProName(InData : Double; var ss, ff, leave : String); var MInt : integer; MReal : Double; begin MInt := Trunc(InData); MReal := InData - Trunc(InData); //整數部分處理 MInt的值 //小數部分 if MReal = 0.5 then begin ss := ??; //String type ff := ??; //String type Leave := ?? //String type end; if MReal = 0.25 then begin ss := ??; //String type ff := ??; //String type Leave := ?? //String type end; end; // // // 主程式 while not q2.eof do begin if 病假 then ProName(請假時數, Edit1.Text, Edit2.Text, Edit3.Text); else if 事假 then begin 事假的副程式(判斷ss,ff,leave的值) <-- 參考如上 end; q2.next; end;我不是高手, 高手是正在銀幕前微笑的人.
------
我不是高手, 高手是正在銀幕前微笑的人. |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
引言: ProName(請假時數, Edit1.Text, Edit2.Text, Edit3.Text); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 不能這樣用 !! Edit.Text 是一個方法,不是一個變數 方法用 var 來傳 , 效果是意料之外的 !!真是抱歉, 一時不查, 改成以下方式 var a, b, c : String; ProName(請假時數, a, b, c); Edit1.Text := a; Edit2.Text := b; Edit3.Text := c; 抱歉抱歉 也感謝syntax兄的指正 我不是高手, 高手是正在銀幕前微笑的人. 發表人 - miles 於 2002/12/19 09:44:38
------
我不是高手, 高手是正在銀幕前微笑的人. |
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
小弟也來插個花,見笑了...^^
以前也寫過薪資系統,由於每家公司計算遲到的扣款都不一樣,
看著excel大大的X,靈機一動來跟excel來個大和解... 1.開個excel檔當作系統設定值,設定formula讀取限定的cell值,計算薪資時僵遲到的分鐘數拋到該限定的cell,再去讀取計算結果,這麼一來就可以不管客戶要怎麼計算遲到扣錢,在excel裡面寫iif(a,b,c)類似這種的formula。 2.請假也用同樣的方式,若是複雜一點,則用運excel裡面的lookup函數。 3.結合lookup函數,還可以讀取所得稅的級距。 4.缺點:速度不若由程式控制那麼快就是,卻也是個偷懶的好辦法 ^ ^ 我不是來鬧場的,真的這樣做過,雖然被客服部門唸個半死
"沒事搞這種玩意,害我要去學excel"
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |