Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Ошибка Invalid typecast


Автор: WaterProof 25.3.2007, 15:18
Могу ли я хранить в свойстве Node.DATA указатели на какую-либо ячейку массива?
И если можно хранить, то как потом обращаться к этой ячейке?
Я использую такой код:
Код

iteminfo := Node.Data^; // пробовал и без ^, не получается
Pagecontrol.ActivePage := TTabsheet(ItemInfo.tabSheet);

В свойстве Tabsheet хранится указатель на какой нибудь табшит, TItemInfo - запись из tabshett, richedit:pointer.
Есть массив mas:TMas, где TMas - массив TItemInfo.
Мне как раз нужно связать свойство DATA с ячейкой такого массива.....

Автор: VICTAR 25.3.2007, 15:43
Что-нибудь типа этого?
Код

PItemInfo = ^TItemInfo;
TItemInfo = record
   tabSheet: TTabsheet;
   RichEdit: TRichEdit;
end;
...
TMas: array of PItemInfo;
...
TreeView1.Items[0].Data:=TMas[0];

Автор: WaterProof 25.3.2007, 15:45
Если я правильно поянл, то да...

Автор: VICTAR 25.3.2007, 15:45
Хотя врядли так будет работать...

Автор: WaterProof 25.3.2007, 15:46
Кроче говоря, можно к примеру привязать к DATA указатель на табшит, и тогда в pagecontrol можно переключаться на табшит, указанный в DATA. 
Мне нужно засунуть туда два указателя... То есть свзяать Node с Tabsheet, и ричедитом...

Автор: VICTAR 25.3.2007, 15:49
Не, работает smile

Цитата

Кроче говоря, можно к примеру привязать к DATA указатель на табшит, и тогда в pagecontrol можно переключаться на табшит, указанный в DATA. 
Мне нужно засунуть туда два указателя... То есть свзяать Node с Tabsheet, и ричедитом...


Попробуй объяснить еще разок...

Автор: WaterProof 25.3.2007, 15:56
Я понимаю, что работает, но собственно, как обращаться к свойствам ячейки массива, через свйоство DATA??  smile  Вот это для меня ваще лес дремучий....

Добавлено через 9 минут и 45 секунд

Поехали. 
К примеру, связываем Data и tabshett:
Node.data := tabshett;
Используем:
PageControl.activePage :=TTabsheet(Node.DATA);
В pagecontrol отображается табшит, связанный с нодом.
Что требуется мне: я создаю структуру TItemInfo:
Код

type
 TItemInfo = record
          tabSheet, RichEdit:pointer;

В свойствах я буду хранить указатели на ричедит и табшит(табшит понятно для чего, а на ричедит - чтобы впоследствии, проходя обычным циклом по дереву, я мог бы сохранить текст этого ричедита в файл, соотв. пути в дереве).
Вот такую структуру я должен привязать к КАЖДОМУ из нодов. Для этого я просто делаю обычный или динамический массив, и ПЫТАЮСЬ прикрепить указатели на ячейки массива к свойству DATA.... и вот тут возникают вышеописанные проблемы.....
Фуууух...

Автор: VICTAR 25.3.2007, 16:17
Может тебе http://forum.vingrad.ru/index.php?showtopic=141556 поможет.
Объясни, что ты хочешь сделать. Чтобы у тебя не создавалось одинаковым вкладок на PageControl?

Добавлено через 5 минут и 15 секунд
Так?
Код

PItemInfo = ^TItemInfo;
TItemInfo = record
   tabSheet: TTabsheet;
   RichEdit: TRichEdit;
end;

var
  MainForm  : TMainForm;
  TMas      : array of PItemInfo;
...
procedure TMainForm.TreeView1Change(Sender: TObject; Node: TTreeNode);
var Ts        : TTabsheet;
    RE        : TRichedit;
    iteminfo  : TItemInfo;
    S         : string;
    ANode     : TTreeNode;
    Count     : integer;
begin
if (Node.Data<>nil) then
 begin
  iteminfo := TIteminfo(Node.Data^);
  Pagecontrol.ActivePage := TTabsheet(ItemInfo.tabSheet);
 end
  else
 begin
   Anode := Node;
   S:=ANode.Text;
   while (Anode <> nil)and(ANode.Parent<>nil) do
    begin
     ANode := ANode.Parent;
     S:=S+'\'+ANode.Text;
    end;
   Ts := TTabsheet.Create(Self);
   ts.Caption := Node.Text;
   ts.PageControl := pagecontrol;
   re := TRichedit.Create(mainform);
   re.Parent := ts;
   re.Align := alClient;
   ItemInfo.tabSheet := ts;
   itemInfo.RichEdit := re;
   SetLength(TMas,length(TMas)+1);
   GetMem(TMas[length(TMas)-1], SizeOf(PItemInfo));
   TMas[length(TMas)-1]^:=itemInfo;
   Node.Data:=TMas[length(TMas)-1];
   //Pagecontrol.ActivePage := TTabsheet(ItemInfo.tabSheet);
   //richedit1.hide;
   //re.Lines.LoadFromFile(path+s+'\data.xdf');
 end;
end;


Автор: WaterProof 25.3.2007, 16:36
Я попробую... И по моему это то, что мне нужно... 

Нет - динаковые вкладки могут быть и скорее всего там будут. Дело не в них... Мне нужен контроль над табшитом и ричедитом(который в этом табшите), чтобы я мог просто получить доступ к ричедиту(нужно для сохранения текста), имея сам нод.  


Работает. СПАСИБО ОГРОМНОЕ!!!! СПАСИБО, VICTAR!!

Автор: VICTAR 25.3.2007, 16:38
Не за что  smile 

Автор: MetalFan 26.3.2007, 08:34
VICTAR, а зачем в том коде изврат с указателями и GetMem?

Автор: VICTAR 26.3.2007, 14:33
MetalFan, да честно говоря хз  smile . Просто я долго не мог понять что надо автору... ПС если хочешь - поправь меня, сделай как должно быть в идеале  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)