3
procedure RandSeed();
var datum: TDateTime;
var hodina,minuta,sekunda,milisekunda: Word;
begin
  DecodeTime(datum,hodina,minuta,sekunda,milisekunda);
  RandSeed := milisekunda;
end;

此代码不起作用。当我尝试编译它时,它说“无法分配左侧”。有谁知道为什么?谢谢。

编辑:我已经根据您的提示更改了我的代码,现在它可以工作了,非常感谢!

procedure RandSeed();
var hodina,minuta,sekunda,milisekunda: Word;
begin
  DecodeTime(now,hodina,minuta,sekunda,milisekunda);
  System.RandSeed := milisekunda;
end;
4

2 回答 2

7

要为RandSeed变量赋值,您必须像这样指定完整的限定名称,System.RandSeed以避免与您自己的过程发生冲突名称,RandSeed或者只是重命名您的过程。

于 2012-04-12T11:16:01.130 回答
3

两个问题:首先,正如 RRUZ 所提到的,您与预定义的System.RandSeed. 冲突是由于您试图从过程中返回值而引起的。(见下文。)

第二个原因是,正如我所说,您试图从过程中返回一个值。你需要一个函数。

function RandSeed: Word;
var 
  datum: TDateTime;
var 
  hodina,minuta,sekunda,milisekunda: Word;
begin
  DecodeTime(datum,hodina,minuta,sekunda,milisekunda);
  RandSeed := milisekunda;
  // Better (and more modern) would be
  // Result := milisekunda;
end;

如果您的意图是RandSeed用您自己的函数替换内部变量,这将起作用。如果您的意图只是使用您的函数为现有RandSeed变量赋值,请将您的过程更改为包含:

System.RandSeed := millisekunda;
于 2012-04-12T11:22:29.517 回答