TTreeViewItem 및 사용자 정의 클래스 (TRoom)의 객체가있는 TList를 다른 객체에 추가하려고합니다. 델파이 2007에는 포인터 타입의 'Data'필드가 있는데 여기에는 TValue로 대체되었습니다. 사용법에 관해서는 알지 못합니다. 나는 그것이 당분간 사용자 지정 형식을 처리 할 수 없다는 것을 언급하면서 인터넷을 검색했습니다.TControl을 사용하여 모든 유형의 객체를 연결하는 방법은 무엇입니까?
해킹 클래스를 만드는 경우를 제외하고는 누군가 달성 할 수있는 방법을 고안 할 수 있습니까?
예를 들어, 다음과 같은 형태의 코드가 제대로 실행해야합니다 : -
당신은 TControl의에 개체를 "연결"하려면unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs,
FMX.TreeView, FMX.Layouts, FMX.Edit;
type
TRoom = class
ID : WORD;
Name : String;
end;
TForm1 = class(TForm)
TreeView1: TTreeView;
TreeViewItem1: TTreeViewItem;
Button1: TButton;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
var
List : TList;
begin
// Get The List From TreeViewItem1
// pani's Solution - List := TList (TreeViewItem1.TagObject);
Edit1.Text := TRoom (List.First).Name;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Room : TRoom;
List : TList;
begin
List := TList.Create;
Room := TRoom.Create;
Room.ID := 5;
Room.Name := IntToStr (5);
List.Add (Room);
// Add The List To TreeViewItem1
// pani's Solution - TreeViewItem1.TagObject := List;
end;
end.
'TValue'는 변형 타입입니다. 'Data.AsObject'를 사용하십시오. –
이 작동하지 않습니다. 컴파일러 오류'호환되지 않는 타입 ... '이 타입 캐스트가없고'잘못된 타입 변환 '이 없습니다. –
@JerryDodge 해킹 클래스는 컨트롤의 스타일을 비활성화하여 수동 스타일 지정이 필요하며 업데이트가 필요합니다. –