Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2013, 21:55   #11
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Аватар, неа. Не помогло. Ведет в никуда. Раньше TNodeData читалось нормально.

Я TNodeData.P прочитать не могу.
Человек_Борща вне форума Ответить с цитированием
Старый 09.04.2013, 22:37   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Нормально записывается и нормально читается и не надо злоупотреблять ^
Код:
type
  TNodeDataKind = (dtType1,dtType2,dtType3);

  TNodeData = class(TObject)
  public
    Kind: TNodeDataKind; // See above
    P: Pointer; // Ptr to object
    constructor Create(aKind: TNodeDataKind; aPtr: Pointer); overload;
  end;

constructor TNodeData.Create(aKind: TNodeDataKind; aPtr: Pointer);
begin
  Kind := aKind;
  P := aPtr;
end;

procedure TForm1.Button1Click(Sender: TObject);
var xItem: TListItem;
begin
  xItem:=ListView1.Items.Add;
  xItem.Caption:='1';
  xItem.Data:=TNodeData.Create(dtType1,Label1);

  xItem:=ListView1.Items.Add;
  xItem.Caption:='2';
  xItem.Data:=TNodeData.Create(dtType2,Edit1);

  xItem:=ListView1.Items.Add;
  xItem.Caption:='3';
  xItem.Data:=TNodeData.Create(dtType3,Memo1);
end;

procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem; Change: TItemChange);
var P: Pointer;
begin
  Label2.Caption:='';
  Label3.Caption:='';
  if Item=nil then Exit;
  Label2.Caption:=Item.Caption;
  p:=Item.Data;
  if p=nil then Exit;
  Label3.Caption:=TObject(TNodeData(p).P).ClassName;
  case TNodeData(p).Kind of
  dtType1: Label3.Caption:=Label3.Caption+Format(' Label1.Caption=%s',[TLabel(TNodeData(p).P).Caption]);
  dtType2: Label3.Caption:=Label3.Caption+Format(' Edit1.Text=%s',[TEdit(TNodeData(p).P).Text]);
  dtType3: Label3.Caption:=Label3.Caption+Format(' Memo1.Text=%s',[TMemo(TNodeData(p).P).Text]);
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var i: Integer;
begin
  for i:=0 to ListView1.Items.Count-1 do
    if ListView1.Items.Item[i].Data<>nil then begin
      TNodeData(ListView1.Items.Item[i].Data).Free;
      ListView1.Items.Item[i].Data:=nil;
    end;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.04.2013, 00:39   #13
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

есть более прямой способ, юзать не рекорд а класс
eval вне форума Ответить с цитированием
Старый 10.04.2013, 01:05   #14
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

eval, уже =) Рекорды это нечто :|
Аватар,
Код:
 Label3.Caption:=TObject(TNodeData(p).P).ClassName;
Единственное приведение типов, которое я не пробовал

Выручили.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование record в record Anton911 Общие вопросы Delphi 7 03.05.2012 08:49
Record SasukeUciha Паскаль, Turbo Pascal, PascalABC.NET 0 16.10.2011 12:01
В чём различие записей Record от Packed Record? Terran Общие вопросы Delphi 7 08.06.2010 17:14
Record / Packed Record Alex Cones Общие вопросы Delphi 7 11.11.2009 10:43
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39