Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.12.11;
Скачать: [xml.tar.bz2];

Вниз

как правильно обратиться к полю?   Найти похожие ветки 

 
brother_home   (2011-08-29 09:55) [0]

Приветствую!
есть:
 TPlayer = record
   No: byte;
   Name: string;
   ...
 end;

TM = class(TObject)
 private
   FActivePlayer: byte;
   ...
   function GetActivePlayer: TPlayer;
  ...
 public
   ...
   Player: array [1..MaxPlayers] of TPlayer;
   ...
   property ActivePlayer: TPlayer read GetActivePlayer write ???
   ...
 end;

function TM.GetActivePlayer: TPlayer;
begin
 if FActivePlayer in [1..6] then
   result:= Player[FActivePlayer]
 else
   result:= PlayerNull;
end;

данная конструкция позволяет только читать поля активного игрока,
а как реализовать запись, например:
ActivePlayer.Name = "Игрок1";
пока пишу так:
if FActivePlayer in [1..6] then Player[FActivePlayer].Name = "Игрок1";


 
brother_home   (2011-08-29 10:15) [1]

может ссылку?


 
Медвежонок Пятачок ©   (2011-08-29 10:32) [2]

гетактивплеер.нэйм = "";


 
Медвежонок Пятачок ©   (2011-08-29 10:35) [3]

ну и проверить что оно не плеернул


 
brother_home   (2011-08-29 11:13) [4]


> гетактивплеер.нэйм = "";

так write не описан, значит будет тока реад онли...


 
Медвежонок Пятачок ©   (2011-08-29 11:19) [5]

с дерева упал?


 
Медвежонок Пятачок ©   (2011-08-29 11:22) [6]

райт не прописан гетактивплееру.
но мы-то меняем не активплеера а его нэйм, уже имея в руках самого TPlayer


 
Медвежонок Пятачок ©   (2011-08-29 11:26) [7]

И при присвоении значений возвращенному рекорду, код твоего дурацкого TM = class(TObject)
уже никаким боком не участвует.


 
Медвежонок Пятачок ©   (2011-08-29 11:27) [8]

... присвоении значений полям рекорда конечно.


 
brother_home   (2011-08-29 11:27) [9]


> гетактивплеер.нэйм = "";

ошибка: Left side cannot assigned to


 
brother_home   (2011-08-29 11:30) [10]

я вопрос не зря задал...


 
Медвежонок Пятачок ©   (2011-08-29 11:31) [11]

Ты не свойству присваивай.


 
brother_home   (2011-08-29 11:33) [12]

а к чему присваивать? можно подробнее?


 
Медвежонок Пятачок ©   (2011-08-29 11:36) [13]

PPlayer = ^TPlayer;
...
function GetActivePlayer: PPlayer;
...

p := TM.Create;
p.GetActivePlayer.Name := "Dunduk";


 
brother_home   (2011-08-29 11:42) [14]

спасибо переделал, так правильно?:
   property ActivePlayer: PPlayer read GetActivePlayer;
...
function TManager.GetActivePlayer: PPlayer;
begin
 if FActivePlayer in [1..6] then
   result:= @Player[FActivePlayer]
 else
   result:= @PlayerNull;
end;


 
brother_home   (2011-08-29 11:43) [15]

только я так и не понял, почему когда функция GetActivePlayer возвращает сам объект, то ошибка, а если указатель, то все норм?


 
И. Павел ©   (2011-08-29 11:47) [16]

Если разделить получение GetActivePlayer от изменения Name - компилятор не заметит подвоха :)
procedure TForm1.Button1Click(Sender: TObject);
var player: TPlayer;
   OTM: TM;
begin
 ...
 player := OTM.GetActivePlayer;
 player.Name := "";
end;


 
Медвежонок Пятачок ©   (2011-08-29 11:47) [17]

Потому что рекорд это не объект.
И при геетактивплеер : TPlayer приходит копия рекорда.
И какой смысл присваивать ее полям что-то, если они дальше этой копии не уйдут и более того, сама копия умрет при выходе из зоны видимости.


 
Медвежонок Пятачок ©   (2011-08-29 11:49) [18]

procedure TForm1.Button1Click(Sender: TObject);
var player: TPlayer;
  OTM: TM;
begin
...
player := OTM.GetActivePlayer;
player.Name := "";
end;


смотри выше.
все твои изменения будут жить недолго да еще и не там где ты хочешь.


 
brother_home   (2011-08-29 11:58) [19]


> И при геетактивплеер : TPlayer приходит копия рекорда.
> И какой смысл присваивать ее полям что-то, если они дальше
> этой копии не уйдут и более того, сама копия умрет при выходе
> из зоны видимости.

это я понял те по ссылке мы получаем не копию а как бы сам объект и тогда все гуд?


 
И. Павел ©   (2011-08-29 12:04) [20]

> это я понял те по ссылке мы получаем не копию а как бы сам
> объект и тогда все гуд?

Адрес получаем, и работаем с объектом по этому адресу. И тогда все гуд.


 
brother_home   (2011-08-29 12:08) [21]

спасибо всем!


 
Anatoly Podgoretsky ©   (2011-08-29 12:09) [22]


> Ты не свойству присваивай.

Можно и свойству, но его надо иметь.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.12.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.005 c
15-1313511154
Псарь
2011-08-16 20:12
2011.12.11
Delphi XE2


2-1314125935
Puw
2011-08-23 22:58
2011.12.11
Остановить закрытие чужого окна


15-1313853077
RGV
2011-08-20 19:11
2011.12.11
HP pavilion dv6-6160er


15-1313561619
vrem
2011-08-17 10:13
2011.12.11
shadow copy - как?


6-1247681286
_alex__
2009-07-15 22:08
2011.12.11
Взаимодействие со службой по TCP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский