Главная страница
    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.46 MB
Время: 0.044 c
2-1124172779
Гость22
2005-08-16 10:12
2005.09.25
Здравствуйте!


4-1122831037
Dust
2005-07-31 21:30
2005.09.25
как в делфи получить кол-во тактов процессора прошедших от старта


14-1125230779
ArtemESC
2005-08-28 16:06
2005.09.25
"Обновления для вашего компьютера готовы"???


14-1125300493
red_imp
2005-08-29 11:28
2005.09.25
Народ помогите где найти книгу


3-1123694565
Aleksandr.
2005-08-10 21:22
2005.09.25
Как снять ReadOnly с поля TADOQuery?





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