Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.31;
Скачать: CL | DM;

Вниз

Проблемы с организацией класса.   Найти похожие ветки 

 
AlexanderMS ©   (2006-12-11 18:46) [0]

Нужна возможность следующим образом использовать свойства моего класса:

Вопрос.Варианты_ответа[2].Текст := "Вариант 2";
Вопрос.Варианты_ответа[2].Верный := true;
Вопрос.Варианты_ответа.Удалить(1);


Есть сходство с этим примером:

Memo1.Lines[1] := "текст";
Memo1.Lines.Delete(1);


Но здесь Lines[1] - свойство типа string, а не какая-нибудь запись (структура). А как сделать, чтобы была запись? Просто если объявить свойство как структуру, то при попытке использовать присваивание полю записи пишется следующее:

[Error] Unit1.pas(60): Left side cannot be assigned to.

Я знаю, почему так, но не могу сделать иначе. Посоветуйте, пожалуйста, как можно, как лучше и как нужно сделать.


 
Anatoly Podgoretsky ©   (2006-12-11 18:51) [1]

> AlexanderMS  (11.12.2006 18:46:00)  [0]

Tmp := MemberStr
...
MemberStr := Tmp


 
AlexanderMS ©   (2006-12-11 18:58) [2]


> Tmp := MemberStr
> ...
> MemberStr := Tmp


Да, но это не очень удобно.

Удобно так:

Если ..., то Вопрос.Варианты_ответа[2].Верный := true;

А не так:

Если ..., то
begin
 Temp := Вопрос.Варианты_ответа[2]
 Temp.Верный := true;
 Вопрос.Варианты_ответа[2] := Temp
end;


(прошу прощения за "чистоту языка".)

Да нагружено уж больно.


 
Anatoly Podgoretsky ©   (2006-12-11 19:04) [3]

> AlexanderMS  (11.12.2006 18:58:02)  [2]

А чего ты хочешь, отдельные свойства структуры не определил и как ты пытаешься записать в несуществующее.
Хочешь работать с отдельными свойствами структуры, опубликуй их.


 
Джо ©   (2006-12-11 19:06) [4]

Как вариант, сделай из структуры — класс.


 
Джо ©   (2006-12-11 19:09) [5]

Еще один вариант — из свойства сделать поле. Но это не очень.


 
Anatoly Podgoretsky ©   (2006-12-11 19:13) [6]

> Джо  (11.12.2006 19:09:05)  [5]

Так у него психологические проблемы.


 
umbra ©   (2006-12-11 19:28) [7]

если все держится на наследнике TStrings, то в нем ведь к каждой строке можно прицепить некий объект (метод TStrings.AddObject).


 
AndreyRu   (2006-12-12 01:10) [8]

type
  TQuestStrs = array of string; /// Здесь можно сделать любой тип!
  TQuestClass = class
  private
    fStrings = TQuestStrs;
  public
    procedure Add(val : string);
    procedure Clear;
    procedure Delete(idx : integer);
    procedure ValidVal(idx : integer; YouVal : string) : boolean;
  end;

...
...
//----------------------------------------------------------------------
procedure TQuestStrs.Add(val : string);
 begin
   SetLength(fStrings, Length(fStrings)+1);
   fStrings[Length(fStrings)-1] := val;
 end;
//----------------------------------------------------------------------
procedure TQuestStrs.Clear;
 begin
   SetLength(fStrings, 0);
 end;
//----------------------------------------------------------------------
procedure TQuestStrs.ValidVal(idx : integer; YouVal : string) : boolean;
 begin
    Result := False;
    if Length(fStrings)-1 < idx then
      exit;
    if AnsiUpperCase(fStrings[idx]) = AnsiUpperCase(YouVal) then
      Result := true;
 end;
//----------------------------------------------------------------------
procedure TQuestStrs.Delete(idx : integer);
 var
   i : integer;
 begin
    if Length(fStrings)-1 < idx then
      exit;
    if Length(fStrings)-1 = idx then
      SetLength(fStrings, Length(fStrings)-1)
    else
      begin
        for i := Length(fStrings)-1 downto idx do
          fStrings[i-1] := fStrings[i];
        SetLength(fStrings, Length(fStrings)-1);
      end;
end;
//----------------------------------------------------------------------



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

Текущий архив: 2006.12.31;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.033 c
15-1165809672
Думкин
2006-12-11 07:01
2006.12.31
Мастера Бо, Бориса Новгородова - С Днем.


15-1166028114
Ученик чародея
2006-12-13 19:41
2006.12.31
DOS, Линукс, терминальное решение.


15-1165390566
MsGuns
2006-12-06 10:36
2006.12.31
Господа офицеры !


15-1165499974
MsGuns
2006-12-07 16:59
2006.12.31
Переименование конференции


2-1165750746
arturich
2006-12-10 14:39
2006.12.31
TWebBrowser