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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.144 c
3-1161253972
просто_человек
2006-10-19 14:32
2006.12.31
Помогите с растановкой приоритетов


2-1165818559
Сергей Ю
2006-12-11 09:29
2006.12.31
Работа с socket-ами и sql в одном приложении=многопоточность?


2-1165934770
Ezorcist
2006-12-12 17:46
2006.12.31
как запихнуть картинку в файл ресурсов?


2-1165616226
XfroSt
2006-12-09 01:17
2006.12.31
Как установить курсор в нужное место в МЕМО (строка,символ) ?


15-1165766364
vidiv
2006-12-10 18:59
2006.12.31
Как в ASPLinux поставить KDE?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский