Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Left side cannot be assigned to


Автор: Medved 5.5.2004, 23:17
Вообщем так:

Объявляю структуру настроек программы:
Код
 
TSettingRecord = packed record  //структура настроек
   colCursor : integer;          //цвет курсора
   colCursorText : integer;      //цвет текста курсора
 end;


Далее объявляю сам класс настроек:
Код

 TSetting = class //Класс настроек
 private
   FRegistry: TRegistry;
   FSetting: TSettingRecord;
 public
   property Setting: TSettingRecord  read FSetting write FSetting; //обратите сюда винмание

   constructor Create;
   destructor Destroy; override;

   procedure DefSetting();
   function LoadSetting(): word;
   function SaveSetting(ASetting: TSettingRecord): word;
   function ApplySetting(ASetting: TSettingRecord): word;
 end;


Внимание вопрос! Когда я в другом модуле пытаюсь присвоить значение любому полю, то выскакивает ошибка "Left side cannot be assigned to", например:
Код

var
 MySetting: TSetting;
begin
 MySetting := TSetting.Create;

 MySetting.Setting.colCursor  := clBlack; // Так не прокатывает
 
 with MySetting.Setting do colCursor  := clBlack; //А вот так все нормально


Что же я упустил из виду, может кто то мне подскажет?

Заранее благодарен.

Автор: Vit 5.5.2004, 23:44
По моему присвоение полей возможно только целиком... Связано по-моему с тем что даже при таком определении реально компиллятор идёт по пути вызывания GetSetting/SetSetting, которые требуют переменной целиком... Можно выкрутиться использованием дополнительного класса вместо записи.

Автор: Medved 6.5.2004, 00:01
Спасибо Вит.

Автор: p0s0l 6.5.2004, 14:31
Pegas, что-то я понять не могу, зачем так делать... У тебя ведь есть доступ на чтение и на запись к свойству - вынеси тогда эту запись простыми данными, без property:
Код
TSetting = class //Класс настроек
private
  FRegistry: TRegistry;
public
  Setting: TSettingRecord;

  constructor Create;
  destructor Destroy; override;

  procedure DefSetting();
  function LoadSetting(): word;
  function SaveSetting(ASetting: TSettingRecord): word;
  function ApplySetting(ASetting: TSettingRecord): word;
end;

Автор: Medved 6.5.2004, 22:58
Спасибо Посол, я знаю о такой возможности.
Саму проблему я решил сразу, преобразорвав запись в класс (что более универсально, особенно, если используешь типы, которые необходимо создавать и уничтожать в ручную), просто было непонятно, почему компилятор выдавал такую ошибку, но Вит уже мне это объяснил.
По повод вопроса насчет "почему property" - это просто назывется дальновидность. Мало ли как в будущем придется модифицировать данный класс.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)