home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2002 September
/
Chip_2002-09_cd1.bin
/
zkuste
/
delphi
/
kolekce
/
d56
/
XMLCOMP.ZIP
/
DnXmlComponentChooserForm.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2002-06-11
|
3KB
|
102 lines
unit DnXmlComponentChooserForm;
interface
{$I DnXml.inc}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, {$IFDEF DNXML_D6} DesignIntf {$ELSE} DsgnIntf {$ENDIF};
type
{$ifdef DNXML_D6}
IFormDesigner = IDesigner;
{$endif}
TfmDnXmlComponentChooser = class(TForm)
TreeView1: TTreeView;
procedure FormShow(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure TreeView1DblClick(Sender: TObject);
private
FDesigner: IFormDesigner;
FSelected: TComponent;
procedure GetStrProc(const S: String);
public
procedure UpdateContents;
property Designer: IFormDesigner read FDesigner write FDesigner;
property Selected: TComponent read FSelected write FSelected;
end;
implementation
{$R *.DFM}
uses
TypInfo;
procedure TfmDnXmlComponentChooser.FormShow(Sender: TObject);
begin
UpdateContents;
end;
procedure TfmDnXmlComponentChooser.GetStrProc(const S: String);
var comp: TComponent;
node: TTreeNode;
procedure _Recurse(aNode: TTreeNode; aComponent: TComponent);
var subnode: TTreeNode;
iComp: Integer;
subcomp: TComponent;
begin
for iComp := 0 to aComponent.ComponentCount - 1 do
begin
subcomp := aComponent.Components[iComp];
subnode := TreeView1.Items.AddChild(aNode, subcomp.ClassName);
subnode.Data := subcomp;
if Selected = subcomp then
subnode.Selected := True;
_Recurse(subnode, subcomp);
end;
end;
begin
comp := Designer.GetComponent(S);
node := TreeView1.Items.AddChild(nil, S + ': ' + comp.ClassName);
node.Data := comp;
if Selected = comp then
node.Selected := True;
_Recurse(node, comp);
end;
procedure TfmDnXmlComponentChooser.UpdateContents;
var typedata: PTypeData;
begin
TreeView1.Items.BeginUpdate;
try
typedata := GetTypeData(TypeInfo(TComponent));
Designer.GetObjectNames(typedata, GetStrProc);
finally
TreeView1.Items.EndUpdate;
end;
end;
procedure TfmDnXmlComponentChooser.FormKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if Key = VK_ESCAPE then
ModalResult := mrCancel;
end;
procedure TfmDnXmlComponentChooser.TreeView1DblClick(Sender: TObject);
begin
if TreeView1.Selected <> nil then
begin
FSelected := TreeView1.Selected.Data;
ModalResult := mrOk;
end;
end;
end.