Главная страница
    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.46 MB
Время: 0.038 c
14-1125863274
Кэш третьего уровня
2005-09-04 23:47
2005.09.25
сетевое администрирование


14-1125419302
Иксик
2005-08-30 20:28
2005.09.25
Золотой фонд советского кино


8-1115518446
zero-g
2005-05-08 06:14
2005.09.25
Изменения размера BMP


1-1125406065
vecna
2005-08-30 16:47
2005.09.25
TThread + TTimer


3-1123076033
redlord
2005-08-03 17:33
2005.09.25
как записать кавычку в строчное поле таблици через SQL запрос





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