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

Вниз

Как сделать поле для записи.   Найти похожие ветки 

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

Наверх





Память: 0.47 MB
Время: 0.056 c
10-1096806739
Ivan K
2004-10-03 16:32
2005.09.25
Переменная может не иницилизироваться?


14-1125988244
ilya39
2005-09-06 10:30
2005.09.25
http://msdn.microsoft.com/library/rus/


14-1125295346
pavel_guzhanov
2005-08-29 10:02
2005.09.25
Книга Рихтера. Где можно найти?


3-1124003977
oslep
2005-08-14 11:19
2005.09.25
Множественный оператор SELECT для DataAdapter


4-1122556137
Ugrael
2005-07-28 17:08
2005.09.25
как обрабатывать wm_paint





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