Форум: "Начинающим";
Текущий архив: 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.043 c