简单问题,EncodeDate函数(20分)

  • 主题发起人 主题发起人 wangfu
  • 开始时间 开始时间
W

wangfu

Unregistered / Unconfirmed
GUEST, unregistred user!
函数原形:
EncodeDate(Year, Month, Day: Word): TDateTime;
参数Word类型
MyDate := EncodeDate(StrToWord(Edit1.Text),StrToWord(Edit2.Text),StrToWord(Edit3.Text));
Edit4.Text := DateToStr(MyDate);
如果改成
MyDate := EncodeDate(StrToInt(Edit1.Text),StrToInt(Edit2.Text),StrToInt(Edit3.Text));
Edit4.Text := DateToStr(MyDate);
即可
Why?
 
你从哪找的StrToWord函数?自己搞的吗?
对于形参,Delphi会自己处理所有整数类型的转换,integer作为word传递时,会自动取低2字节的
作为word,byte则自动取最后一字节(integer4字节)
如 Aproc(b:byte)
var i:integer;
Aproc(i)在 i:=123, i:=123+123*256,i:=123+123*256+1*256*256会是一样的结果,传递进去都是123
 
to Kang:d6中有你说的这个函数.在IdTrivialFTPBase.pas单元中.d6自带的indy控件中包括的单元.
function StrToWord(const Value: String): Word;
谢谢上次你为我解决问题.
to wangfu,不好意思,借贵宝地用一下.
 
我怀疑是错用,d6我没有。
y:=StrToWord(Edit1.Text);
m:=StrToWord(Edit2.Text);
d:=StrToWord(Edit3.Text));
跟踪一下y,m,d三个值转换得对不对?
 
uses IdTrivialFTPBase;
当edit1.text=1时,y=49
当edit2.text=2时,m=50
当edit3.text=a时,d=97
我用这样一段代码时
procedure TForm1.Button1Click(Sender: TObject);
var
i:word;
begin
i:=strtoword(edit1.text);
label1.caption:=wordtostr(i);
end;
当edit1.text=两个字母,或数字以上时,后面的第3,第4位....都会被忽略掉.
只取前两位.
谢谢Pipi.大侠上次为我解答问题.
 
按jbas所说,StrToWord只是转接转换ascii码
即 '1' 的 ascii 为 49
'2' 的 ascii 为 50
'a' 的 ascii 为 97
 
真是那样还不如没有这个函数
 
我的意思是“如果jbas所说的真的话”,我没有d6,所以不懂
 
定义成Word而不定义为integer的目的何在呢?
 
听课。
不好意思,借问各位大侠,本不想灌水,但不灌又收不到EMAIL通知,各位请教教,谢。
 
年月日都是正整数,word能表示到65535年,65536年的时候估计不用我们编程序了
另外word只需要两字节,而integer要四字节
定义为word一可以避免出现-1这样的年月日,二也比integer节约
 
可以按Kang这样理解,不过实际上所谓节约,也是没有的事情
因为堆栈是32位,一个参数不管是1、2还是4字节,都是push一次,占4个字节
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
769
import
I
后退
顶部