請問case...of...的選項列式問題 |
尚未結案
|
adie
一般會員 發表:2 回覆:3 積分:1 註冊:2004-04-14 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi adie,
Case 中只接受 Const 因此必須更改如下: procedure TForm1.Button1Click(Sender: TObject); const min = 0; max = 100; var v : integer; s : string; begin v := SpinEdit1.value; case v of min..max : s :='OK'; else s := 'NG'; end; ShowMessage(s); end; 若 Minimum 與 Maximum 必須一定是變數,可以考慮使用以下寫法: procedure TForm1.Button2Click(Sender: TObject); var v,min,max : integer; s : string; begin v := SpinEdit1.value; min := 0; max := 100; if v in [min..max] then s := 'OK' else s := 'NG'; ShowMessage(s); end;---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman |
adie
一般會員 發表:2 回覆:3 積分:1 註冊:2004-04-14 發送簡訊給我 |
Hi,Fishman
感謝你熱心的回答
第一種作法:
我之前有試過用常數const定義是可以在case中為作判斷,但因const的數字,是由資料庫中讀取出來的,所以在定義const之前,也是不知道數值是多少的。
第二種作法:
目前也只能用if來作判斷條件,但是在
begin
v := SpinEdit1.value;
min := 0;
max := 100;
if v in [min..max] then<-------max最大只能到255
s := 'OK'
else
s := 'NG';
ShowMessage(s);
有方法可以增大最大值的數值嗎?
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi adie, 你的 min & max 是否定義為 Byte?將它定義為其他型態即可!
Type Range Format -------- ----------------------- --------------- Shortint -128..127 signed 8-bit Smallint -32768..32767 signed 16-bit Longint -2147483648..2147483647 signed 32-bit Int64 -2^63..2^63-1 signed 64-bit Byte 0..255 unsigned 8-bit Word 0..65535 unsigned 16-bit Longword 0..4294967295 unsigned 32-bit---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman |
adie
一般會員 發表:2 回覆:3 積分:1 註冊:2004-04-14 發送簡訊給我 |
hi,Fishman
我的min,max : integer;
都是設integer,範圍是-2147483648~2147483647,儲存格式是signed 32-bit。
所以應該是夠大。
後來我直接在[mix..max]填入數值[0..300]他就顯示錯誤的訊息
Constant expression violates subrange bounds
好像是超出他子範圍的規則了,他的範圍我測是在[0..255]是都可的。
我查help是The base type can have no more than 256 possible values, and their ordinalities must fall between 0 and 255.
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
adie
一般會員 發表:2 回覆:3 積分:1 註冊:2004-04-14 發送簡訊給我 |
hi,fishman
再次感謝你的回答,以下這是我的程式碼 unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin; type
TForm1 = class(TForm)
Button1: TButton;
SpinEdit1: TSpinEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);
var
v,min,max : integer;
s : string;
begin
v := SpinEdit1.value;
min := 0;
max := 300;
if v in [min..max] then
s := 'OK'
else
s := 'NG';
ShowMessage(s);
end; end. 我輸入255,showmessage(s)應該是出現ok才對,因為在0..300之間,但是他s是輸出NG.
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
way888
初階會員 發表:32 回覆:76 積分:36 註冊:2005-05-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |