Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2011, 03:05   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Восклицание Left side cannot be assigned to в Record

Доброго времени суток!

Пишу свой класс.

Код:
...
type
  TTaskData = record
....
  end;
  PTaskData = ^TTaskData;
...
  TTasksList = class(TObjectList)
  private
...
    function GetTask(Indx: integer): TTask;
    function GetTaskData(Indx:Integer):TTaskData;
...
  public
..
    property Tasks[Indx: integer]: TTask read GetTask;
    property TasksData[Indx:integer]: TTaskData read GetTaskData;
..


..

function TTasksList.GetTask(Indx: integer): TTask;
begin
    Result := (Items[Indx] as TTask);
end;

function TTasksList.GetTaskData(Indx: Integer): TTaskData;
begin
Result:=Tasks[Indx].TaskData;
end;
нужно чтобы GetTaskData могло также писать в возвращаемую структуру... собственно как?

Код:
var
  i: integer;
begin
  for i := 0 to Count - 1 do
  begin
    if TasksData[i].ActiveTask then
    begin
    TasksData[i].ActiveTask:=false;
Цитата:
[DCC Error] TasksManagerClass.pas(1574): E2064 Left side cannot be assigned to
Помогите пожалуйста=) Голова уже не варит...

Последний раз редактировалось Человек_Борща; 25.09.2011 в 03:10.
Человек_Борща вне форума Ответить с цитированием
Старый 25.09.2011, 04:07   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Что-нибудь типа такого?
Код:
    procedure SetTaskData(Indx:Integer; Value: boolean);
...
  public
..
    property TasksData[Indx:integer]: TTaskData read GetTaskData write SetTaskData;
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 25.09.2011, 04:18   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Нет не вариант.
GetTaskData - возвращает тип record(и все чтовнутри него).

GetTaskData аналог:
GetTask[i].TaskData, который позволяет делать:

Чтение из record:
Код:
<ParamOne>:=GetTask[i].TaskData.<ParamTwo>;
и запись в record
Код:
GetTask[i].TaskData.<ParamTwo>:=<ParamOne>;

Хотелось бы иметь что-то такое:
Код:
<ParamOne>:=GetTaskData[i].<ParamTwo>;
Код:
GetTaskData[i].<ParamTwo>:=<ParamOne>;
Как реализовать это, до меня просто не доходит.

Последний раз редактировалось Человек_Борща; 25.09.2011 в 04:23.
Человек_Борща вне форума Ответить с цитированием
Старый 25.09.2011, 10:34   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

имхо, TinMan дело говорит.

посмотрите:
TasksData[i].ActiveTask:=false;

смотрим TasksData:
Цитата:
Код:
property TasksData[Indx:integer]: TTaskData read GetTaskData;
т.е. оттуда можно только ЧИТАТЬ! писать в TaskData вы не разрешили.
как разрешить - предложил TinMan
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.09.2011, 10:55   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В GetTaskData не к свойству обращайтесь (TasksData[i]) при записи. а непосредственно к массиву, где-то он же описан в компоненте (Tasks)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 25.09.2011 в 11:14.
Аватар вне форума Ответить с цитированием
Старый 25.09.2011, 15:16   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Serge_Bliznykov, я знаю что там только чтение. Былабы запись, тема вообще не существовала.
последовал совету TinMan'а.
Код:
 property TasksData[Indx:integer]: TTaskData read GetTaskData write SetTaskData;
...
procedure TTasksList.SetTaskData(Indx: Integer; aNewData: TTaskData);
begin
//Tasks[indx] возвращаетмне TTask под заданным номером indx, откуда есть деступ ко всему в TTask 
Tasks[indx].TaskData:=aNewData;
end;
Ошибка таже..

Чего я хочу добиться....
Код:
var
 s:string;
 b:boolean;
 i:integer;
 w:word;
 dw:DWORD;
 cI:integer;
 {
 и ещё over 9000 др. типов
}
begin
 for cI:=0 to Count -1 do
 begin
 GetTaskData[cI].tdS:=s;
 GetTaskData[cI].tdB:=b;
 GetTaskData[cI].tdI:=i;
 GetTaskData[cI].tdw:=w;
 GetTaskData[cI].tddw:=dw;
 end;
end;

в TTaskData = record
все что угодно..

не писать же мне для всех типов свой SetTaskData

Последний раз редактировалось Человек_Борща; 25.09.2011 в 15:27.
Человек_Борща вне форума Ответить с цитированием
Старый 25.09.2011, 15:58   #7
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
не писать же мне для всех типов свой SetTaskData
выдержка из справочной системы делфи:
Код:
type
  TRectangle = class
  private
    FCoordinates: array[0..3] of Longint;
    function GetCoordinate(Index: Integer): Longint;
    procedure SetCoordinate(Index: Integer; Value: Longint);
  public
    property Left: Longint index 0 read GetCoordinate write SetCoordinate;
    property Top: Longint index 1 read GetCoordinate write SetCoordinate;

    property Right: Longint index 2 read GetCoordinate write SetCoordinate;
    property Bottom: Longint index 3 read GetCoordinate write SetCoordinate;
    property Coordinates[Index: Integer]: Longint read GetCoordinate write SetCoordinate;
    ...
  end;
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 25.09.2011, 16:27   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

можно пожалуйста чуть, подробнее?
Что я должен тут увидеть?
Человек_Борща вне форума Ответить с цитированием
Старый 25.09.2011, 16:50   #9
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

в чём суть вопроса? нужно создать возможность записи отдельного поля записи через один метод или запись в элемент массива?
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 25.09.2011, 17:05   #10
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Запись <> класс.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Left side cannot be assigned to... _-Re@l-_ Общие вопросы Delphi 2 24.03.2011 15:07
IE8. не работает padding-left, margine-left dimonnnn HTML и CSS 7 13.08.2010 19:33
assigned(some) sunnmas Общие вопросы Delphi 3 05.08.2009 15:26
Ошибка Left Side cannot be assigned to.. DM_bite Помощь студентам 1 18.09.2008 21:01