TTreeView的使用

先说一下我要达到的目的,一个Form分成两个Panel,左边放置TTreeView,右边根据TTreeView的不同选择切换不同的Frame或Form。

首先定义一个数据结构来保存每一个TTreeNode的数据,可以根据需要放更多的数据进去:

unit TreeNodeDataUnit;

interface

uses
  Classes;

type
  TreeNodeData = Record
    id: Int64;
    InstanceClass: TComponentClass;
  end;

implementation

end.

其中InstanceClass字段用来保存每个TTreeNode所对应的Frame或Form。

以如下定义为例:

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    TreeView1: TTreeView;
    procedure FormCreate(Sender: TObject);
    procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

开始创建TTreeView,在Form的OnCreate中创建:

procedure TForm1.FormCreate(Sender: TObject);
var
  items: TTreeNodes;
  mainNode, subNode: TTreeNode;
  nodeData: ^TreeNodeData;
begin

  items := TreeView1.Items;

  mainNode := items.Add(nil, 'Root');
  New(nodeData);
  nodeData^.id := 100;
  mainNode.Data := nodeData;

  subNode := items.AddChild(mainNode, 'Node1');
  New(nodeData);
  nodeData^.id := 100100;
  nodeData^.InstanceClass := TFrame1;
  subNode.Data := nodeData;

  subNode := items.AddChild(mainNode, 'Node2');
  New(nodeData);
  nodeData^.id := 100200;
  nodeData^.InstanceClass := TFrame2;
  subNode.Data := nodeData;

  TreeView1.FullExpand;
end;

响应TTreeView的OnChange事件,根据每个TTreeNode的Data定义显示不同的Frame或Form:

var
  currFrame: TForm;

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
  nodeData: ^TreeNodeData;

begin
  nodeData := Node.Data;
  //ShowMessage(intToStr(nodeData^.id));

  if (nodeData^.InstanceClass <> nil) then begin
    if (currFrame <> nil) and not (currFrame is nodeData^.InstanceClass) then begin
      currFrame.Free();
      currFrame := nil;
    end;
    if (currFrame = nil) then begin
      Application.CreateForm(nodeData^.InstanceClass, currFrame);
      currFrame.Parent := Panel2;
      currFrame.Align := alClient;
      currFrame.Show;
    end;
  end;

end;

这样当需要添加新的Node时只需要更改很少的代码。

PS:相比于在Design视图上点来点去,还是更喜欢自己写代码来实现……

标签:, ,

相关日志

Delphi 2007 for Win32企业版安装方法

安装前提是你已经下载了Delphi 2007 for Win32的ISO。
Delphi 2007安装程序根据不同的序列号(许可文件)来判断安装版本,一般ISO中自带的许可文件是专业版的。
企业版和专业版的许可文件下载:delphi2007_slip.zip

C++ Builder 2007的企业版许可文件(slip file for C++ Builder 2007):cb2007_ent.zip

新装方法:
1、下载D2007。
2、删除D2007中的delphi2007.slip文件,将这里下载的d2007_Ent.slip直接拷入目录内(建议使用UltraISO编辑镜像)。
3、完成后就可以运行setup.exe文件开始安装了!安装过程中需要联网下载文件,请保持联网状态。
4、安装完成后用D2007Tweaks移除协议检测。
5、现在可以开始爽了!
6、查看Source目录里是否为六个目录,对照下面的Runtime Packages表格,查看企业版所包含的几个文是否装上(dbxasa30.dll、dbxase30.dll、dbxdb230.dll 、dbxinf30.dll、dbxmss30.dll、dbxora30.dll、dsnap100.bpl、dsnapcon100.bpl、 dsnapent100.bpl、dss100.bpl、webdsnap100.bpl、websnap1 00.bpl这些文件分布在System32及Bin目录内),以上两点满足就已经算是企业版了!

如果安装时提示“Invalid Serial Number”,有两种可能:
1、将文件解压缩到硬盘上安装了,推荐用Daemon虚拟光驱安装
2、原先已经安装过Delphi 2007,这时候应该先将原有信息删除:

if you got Invalid Serial Number message during install
delete folders
%ALL_USERS%\Application Data\CodeGear
%ALL_USERS%\Application Data\{AB3EC276-D261-4943-A921-1CC1C6799AED}
then run setup again

安装了企业版以后使用dbExpress连接Oracle就不会报缺少DLL了,但是实际发现连接MySql的时候还是会提示文件缺失……

标签:

相关日志

万通宝(W200)无线网卡在ubuntu 7.04的安装

首先鄙视MultiPort这种东西一百遍,当初真应该直接买PCMCIA的卡。

今天在参考了专门网Ubuntu上的文章,终于成功驱动了这个破东西。

1. 下载驱动源码
由于驱动在svn上,首先安装subversion,然后从svn上获取最新驱动

sudo apt-get install subversion
svn co https://orinoco.svn.sourceforge.net/svnroot/orinoco/branches/usb

或者可以直接在本站下载:orinoco_usb.zip

2. 编译安装

For 2.6.20-15-generic download SVN rev 1276. In order to compile, edit lines 4287, 4288 of orinoco.c replacing dev->dev.parent with dev->class_dev.dev

如果是从本站下载的直接跳到下一步;
如果是从svn获取,以当前版本的驱动(1276),查找4287行和4288行,将dev->dev.parent修改为dev->class_dev.dev

如果尚未安装编译环境:

sudo apt-get install build-essential

编译并安装:

sudo make
sudo make install

3. 下载并复制firemware
下载脚本是驱动源码包中现成的,运行即可:

cd firmware
sudo ./get_ezusb_fw
sudo cp orinoco_ezusb_fw /lib/firmware/`uname -r`/

4. 启用无线网卡

测试并启用网卡:

sudo modprobe -v orinoco_usb

如果一切正常,这时候万通宝上的指示灯应该已经亮了,在网络设置中应该也能看见无线网卡的设置了,接下来让系统启动时自动加载驱动:

sudo vim /etc/modules

在文件末尾加入:

orinoco_usb

5. 安装network-manager-gnome

我使用的是xfce,如果Gnome可以直接忽略这一步。
安装步骤:

sudo apt-get install network-manager-gnome network-manager
sudo /etc/init.d/dbus restart

这时候系统栏应该出现网络连接的图标,单击图标即可以查看目前可用的无线网络并可以选择连接了。

后记
成功驱动以后又折腾了半天,才发现在linux下目前好像无法让这块网卡支持WPA加密方式。
然后最不幸的是,只要一连接家里的无线网络,不管什么加密都会导致系统死机,是完全彻底的死机,ft了,白费劲了……

标签:, , ,

相关日志

物价飞涨的年代

去买肉,惊闻前臀尖已经从上周的7.50¥涨价到9.50¥了……
于是第一次给家里买了鸡肉,果然没有猪肉香,厄

股市如虹,物价飞涨,眼瞅着就吃不起肉了

Firefox plugin:Google Browser Sync

在LinuxApp@水木社区上一个讨论Linux/Windows之间书签同步的帖子里看见的这个插件,于是装上试用。

插件地址:http://www.google.com/tools/firefox/browsersync/index.html

安装后重新启动会自动运行设置向导,根据说明可以同步书签、历史、打开的标签或窗口,甚至是保存的Cookies和密码都可以同步。对于Cookies和密码这样的隐私数据,可以设置一个PIN码对其进行加密,此PIN码不会保存在Google服务器上

在不同的机器上或者不同配置的Firefox之间同步时,只需要同样安装此插件即可(实际使用效果不错,删除操作也能同步过来~)。

当然,使用此插件的前提是需要拥有Google账号,现在这好像不是什么难事。

如果只是需要同步书签,更简单的解决办法是使用GMarks插件,同样利用了Google的服务,万能的狗狗啊……

google_browser_sync.JPG

标签:,

相关日志
Page 1 of 3123»

京ICP备05059555号