Текущий архив: 2005.09.25;
Скачать: CL | DM;
Вниз
Как сделать поле для записи. Найти похожие ветки
← →
Валя (2005-08-18 14:11) [0]Как сделать, что бы, например, можно было записать OpenedReference[a].Saved:=True; при использовании следующего класса.
type
TOpenFileStruc = record
FullName:string;
ShortName:string;
Saved:boolean;
Year:string;
end;
TOpenedFiles = class(TObject)
private
FOpenedFiles: array of TOpenFileStruc;
function GetItem(Index: Integer): TOpenFileStruc;
procedure SetItem(Index: integer; Value: TOpenFileStruc);
public
property OpenedFiles[Index: Integer]: TOpenFileStruc read GetItem write SetItem; default;
end;
implementation
////////////////////////////////////////////////////////////////////////////////
function TOpenedFiles.GetItem(Index: Integer): TOpenFileStruc;
begin
Result := FOpenedFiles[Index];
end;
////////////////////////////////////////////////////////////////////////////////
procedure TOpenedFiles.SetItem(Index: integer; Value: TOpenFileStruc);
begin
FOpenedFiles[index] := Value;
end;
← →
Digitman © (2005-08-18 14:20) [1]а в чем проблема ?
так и пиши
OpenedFiles[такой-то].Saved:=True
где OpenedFiles: TOpenedFiles;
в целом же не есть гуд (если не сказать - неправильно) именовать св-во класса так же как сам класс
TOpenedFiles = class(TObject)
private
FOpenedFiles: array of TOpenFileStruc;
function GetItem(Index: Integer): TOpenFileStruc;
procedure SetItem(Index: integer; Value: TOpenFileStruc);
public
property Items[Index: Integer]: TOpenFileStruc read GetItem write SetItem; default;
end;
← →
Валя (2005-08-18 14:24) [2]Спасибо, переделаю.
Но компилятор пишет: "[Error] Main.pas(549): Left side cannot be assigned to"
← →
Ega23 © (2005-08-18 14:28) [3]2 Digitman © (18.08.05 14:20) [1]
procedure SetItem(Index: integer; Value: TOpenFileStruc);
и
property Items[Index: Integer]: TOpenFileStruc read GetItem write SetItem; default;
Разве так можно? Разве у SetItem не один параметр должен быть?
← →
Валя (2005-08-18 14:35) [4]Ega23 © (18.08.05 14:28) [3]
Нет, SeItem должен знать index и сам элемент, который он по этому индеку поставит. Так помоему.
← →
Digitman © (2005-08-18 14:36) [5]
> Валя
сделай проще :
type
POpenFileStruc = ^TOpenFileStruc;
TOpenFileStruc = packed record
FullName:string;
ShortName:string;
Saved:boolean;
Year:string;
end;
TOpenedFiles = class(TObject)
private
FOpenedFiles: array of TOpenFileStruc;
function GetItem(Index: Integer): POpenFileStruc;
procedure SetItem(Index: integer; Value: POpenFileStruc);
public
property Items[Index: Integer]: POpenFileStruc read GetItem write SetItem; default;
end;
..
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
TOpenedFiles.Create[0].Saved := True;
end;
{ TOpenedFiles }
function TOpenedFiles.GetItem(Index: Integer): POpenFileStruc;
begin
Result := @FOpenedFiles[Index];
end;
procedure TOpenedFiles.SetItem(Index: integer; Value: POpenFileStruc);
begin
FOpenedFiles[index] := Value^;
end;
> Ega23 © (18.08.05 14:28) [3]
> Разве у SetItem не один параметр должен быть?
нет, не один.
1-й - индекс, 2-й - параметр-значение элемента с указанным индексом
← →
Валя (2005-08-18 14:43) [6]Как-то мудрено =)
У меня, в принципе, в классе много чего еще и Add, и Delete, и IndexOf и т.д. и все надо переписать на работу с указателями, как вы предлагаете? При чтении @, а при записи ^
← →
Ega23 © (2005-08-18 14:45) [7]Сделай TOpenFileStruct не рекордом, а классом. Вместо array of используй TObjectList.
Проблем быть не должно.
← →
Digitman © (2005-08-18 14:50) [8]
> Валя (18.08.05 14:43) [6]
> Как-то мудрено
что "мудрено"-то ?
работу с указателями первый раз видишь что ли ?
> У меня, в принципе, в классе много чего еще и Add, и Delete,
> и IndexOf и т.д
при реализации моего предложения - да ... что вовсе не представляет никаких проблем
если же иначе - см. [7], он прав.
← →
Валя (2005-08-18 14:52) [9]Спасибо, будем работать и расти над собой =)
Страницы: 1 вся ветка
Текущий архив: 2005.09.25;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.055 c