Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.30;
Скачать: CL | DM;

Вниз

Вариантная запись   Найти похожие ветки 

 
хаас   (2008-03-01 07:38) [0]

Сделать вариантную запись со 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;


 
begin...end ©   (2008-03-01 09:24) [1]

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 fieldList is 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 pointers to these types.

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


 
sniknik ©   (2008-03-01 09:31) [2]

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


 
хаас   (2008-03-01 09:53) [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 10:20) [4]

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

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

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


 
korneley ©   (2008-03-01 10:25) [5]

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



Страницы: 1 вся ветка

Текущий архив: 2008.03.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
3-1194513654
dolmat
2007-11-08 12:20
2008.03.30
Отключить пользователей от базы


3-1194512166
zorik
2007-11-08 11:56
2008.03.30
Корректное отключение (подключение) TIBDatabase


2-1204372920
lana
2008-03-01 15:02
2008.03.30
Преобразование текста в таблицу.


2-1204470582
igroman
2008-03-02 18:09
2008.03.30
Печать с Memo


2-1204286904
TStas
2008-02-29 15:08
2008.03.30
Что возвращает WinExec?