Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.06 c
4-1118237025
bckfvjd
2005-06-08 17:23
2005.09.25
Установка шрифта


1-1125925860
Гена
2005-09-05 17:11
2005.09.25
Вопрос про savedialog


2-1124199768
Гость22
2005-08-16 17:42
2005.09.25
Как не дать закрыть форму?


4-1122547571
MisterR
2005-07-28 14:46
2005.09.25
Работа с платой в PCI


3-1124099993
DimonNew
2005-08-15 13:59
2005.09.25
Обработка ошибок БД