TTreeView的使用
2007-05-31 19:39 | Filed Under Delphi |
先说一下我要达到的目的,一个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, TTreeNode, TTreeView相关日志
Delphi 2007 for Win32企业版安装方法
2007-05-30 19:06 | Filed Under Delphi |
安装前提是你已经下载了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的时候还是会提示文件缺失……
标签:Delphi相关日志
万通宝(W200)无线网卡在ubuntu 7.04的安装
2007-05-27 19:18 | Filed Under Linux |
首先鄙视MultiPort这种东西一百遍,当初真应该直接买PCMCIA的卡。
今天在参考了专门网和Ubuntu上的文章,终于成功驱动了这个破东西。
1. 下载驱动源码
由于驱动在svn上,首先安装subversion,然后从svn上获取最新驱动
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 make install
3. 下载并复制firemware
下载脚本是驱动源码包中现成的,运行即可:
sudo ./get_ezusb_fw
sudo cp orinoco_ezusb_fw /lib/firmware/`uname -r`/
4. 启用无线网卡
测试并启用网卡:
如果一切正常,这时候万通宝上的指示灯应该已经亮了,在网络设置中应该也能看见无线网卡的设置了,接下来让系统启动时自动加载驱动:
在文件末尾加入:
5. 安装network-manager-gnome
我使用的是xfce,如果Gnome可以直接忽略这一步。
安装步骤:
sudo /etc/init.d/dbus restart
这时候系统栏应该出现网络连接的图标,单击图标即可以查看目前可用的无线网络并可以选择连接了。
后记
成功驱动以后又折腾了半天,才发现在linux下目前好像无法让这块网卡支持WPA加密方式。
然后最不幸的是,只要一连接家里的无线网络,不管什么加密都会导致系统死机,是完全彻底的死机,ft了,白费劲了……
相关日志
物价飞涨的年代
2007-05-24 21:28 | Filed Under Life |
去买肉,惊闻前臀尖已经从上周的7.50¥涨价到9.50¥了……
于是第一次给家里买了鸡肉,果然没有猪肉香,厄
股市如虹,物价飞涨,眼瞅着就吃不起肉了
Firefox plugin:Google Browser Sync
2007-05-17 15:20 | Filed Under Software |
在LinuxApp@水木社区上一个讨论Linux/Windows之间书签同步的帖子里看见的这个插件,于是装上试用。
插件地址:http://www.google.com/tools/firefox/browsersync/index.html
安装后重新启动会自动运行设置向导,根据说明可以同步书签、历史、打开的标签或窗口,甚至是保存的Cookies和密码都可以同步。对于Cookies和密码这样的隐私数据,可以设置一个PIN码对其进行加密,此PIN码不会保存在Google服务器上。
在不同的机器上或者不同配置的Firefox之间同步时,只需要同样安装此插件即可(实际使用效果不错,删除操作也能同步过来~)。
当然,使用此插件的前提是需要拥有Google账号,现在这好像不是什么难事。
如果只是需要同步书签,更简单的解决办法是使用GMarks插件,同样利用了Google的服务,万能的狗狗啊……
相关日志


