0

これは少し紛らわしいですが、説明するために最善を尽くします。詳細が必要な場合はお尋ねください。

TPlayersまず、 Like so..というクラスがあります。

TPlayers = class
   Private
      p : array[1..20] of TStringList;
      function GetPlayer(i:integer): TStringList;

    Public
      Property player[i : integer] : TStringList read GetPlayer;

           constructor Create;   virtual;
    implementation

    uses
    main;
    {constructor}
       constructor TPlayers.Create;
       begin
         p[1] := TStringList.Create;
         p[2] := TStringList.Create;
         p[3] := TStringList.Create;
         p[4] := TStringList.Create;
         p[5] := TStringList.Create;
         p[6] := TStringList.Create;
       end;

     function TPlayers.GetPlayer(i: integer): TStringList;
    begin
      Result := p[i];
    end;

FTherePlayers := TPlayers.Create次に、クラスを作成する必要があります。初めてそのように文字列リストに追加します

FTherePlayers.Player[strtoint(name2)].Add('posx='+inttostr(posL.x));

または変数を取り出して

FTherePlayers.Player[1].Add('posx=15');

これは問題ないようですが、次はそのように更新しようとします

FTherePlayers.Player[strtoint(ID)].Values['posx='] := xpos;

または変数を取り出して

FTherePlayers.Player[1].Values['posx='] := 12; 

しかし、変更後にその値を確認すると、まだ15と表示されているため、そうすると

showmessage(fthereplayers.player[1].Values['posx']);

15 を返しますが、12 である必要があります。なぜ変更されないのでしょうか? ありがとうグレン

4

1 に答える 1

5

Nameプロパティのインデックス値の末尾に余分な等号がありValuesます。等号なしで名前と値のペアの名前部分のみを使用する必要があります。したがって、コードで次の行を置き換えるだけです。

// here is an extra equals sign in 'posx=' index value
FTherePlayers.Player[1].Values['posx='] := 12;
FTherePlayers.Player[strtoint(ID)].Values['posx='] := xpos;

これとともに:

FTherePlayers.Player[1].Values['posx'] := 12; 
FTherePlayers.Player[strtoint(ID)].Values['posx'] := xpos;
于 2012-11-15T12:42:29.110 に答える