Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вариантная запись [D7]


хаас ©   (2008-03-01 07:38:00) 

Сделать вариантную запись со string - это не реально?

 TText1 = record
   str1: string;
   wrd1: Word;
   str2: string;
 end;

 TText2 = record
   str3: string;
   str4: string;
 end;

 TRecord1 = record
   String1: string;
   DWord1: DWord;
   case Integer of
     1: (text1: TText1);
     2: (text2: TText2);
 end;


korneley   (2008-03-01 10:25:00) [1]

И что, транслятор пропустил такое? А именно описание TRecord1? Но даже если заменить у TText1 и TText2 string на string[...] (см.  [1], [2]) не понятно, что же хотелось получить. На одну область памяти отображаются или 2 строки, или 2 строки и ворд (!) междуними (!!!) Каша какая-то...


sniknik   (2008-03-01 10:20:00) [2]

> Насколько в таком случае будет бред, если делать указатель в записях?
полный бред.
имхо, нет такой задачи чтобы это пригодилось...

ну сделал ты, 2 переменные указатели расположенные по одному адресу (case). и какой в этом смысл, присвоил указатель на одну структуру, а обращаешься к другой, а там у тебя ворд, совместиться со ссылкой на обьект (стринг)... AV гарантированы.

вообще лучше решать задачу, чем мучится над неверным путем решения... в чем задача то состоит?


хаас   (2008-03-01 09:53:00) [3]

Короткие - слишком короткие.

Я так понял, что можно делать указатель на нужную запись со строками. Но в таком случае боюсь что у меня получится бред полный.

Весь каркас у меня сосотоит таким образом:

TText1 = record
  str1: string;
  wrd1: Word;
  str2: string;
end;

TText2 = record
  str3: string;
  str4: string;
end;

TRecord1 = record
  String1: string;
  DWord1: DWord;
  case Integer of
    1: (text1: TText1);
    2: (text2: TText2);
end;

=================================

 TRecords = array of TRecord1;

 PItemRec = ^TItemRec;
 TItemRec = record
   str1: string;
   int1: Integer;
   ...
   Records: TRecords;
 end;


А потом где-то делается так:

 New(_PItemRec);
 with _PItemRec^ do
 begin
  ...
  SetLength(Records, ...);
  for i := Low(Records) to High(Records) do
    Records[i].str1 := '....'
    ...
 end;
  TreeView1.Items.AddChildObject(.., .., _PItemRec);


Насколько в таком случае будет бред, если делать указатель в записях?


sniknik   (2008-03-01 09:31:00) [4]

> The types must not be longstrings
сделай короткими...


begin...end   (2008-03-01 09:24:00) [5]

Each variant is a semicolon-delimited list of declarations resembling the fieldList: type constructions in the main part of the record type. That is, a variant has the form

fieldList1: type1;
...
fieldListn: typen;

where each fieldListis a valid identifier or comma-delimited list of identifiers, each type denotes a type, and the final semicolon is optional. The types must not be long strings, dynamic arrays, variants (that is, Variant types), or interfaces, nor can they be structured types that contain long strings, dynamic arrays, variants, or interfaces; but they can be pointersto these types.

(c) Delphi Help, "Variant parts in records"


Наверх

Титульная страница Поиск, карта сайта Написать письмо