发布一个控件:DBTREEVIEW。 (1分)

  • 主题发起人 主题发起人 荷塘新月
  • 开始时间 开始时间

荷塘新月

Unregistered / Unconfirmed
GUEST, unregistred user!
这个控件是根据 一生中最爱 大侠的DBTREEVIEW控件改写。 虽然改的不好,但是挺实用。希望大家能够喜欢。
要求表结构中至少有有两个字段,并且在DATASET中必需为第一个和第二个字段,且第一个字段为CHAR或者为VARCHAR类型。
例:在某个单位设置中用TREEVIEW分级显示。设置单位编号为6位,2位一级,可以这样做:
ADOQUERY1.CLOSE;
ADOQUERY1.SQL.TEXT:='SELECT DWBH,DWMC FROM DWMCB ORDER BY DWBH';
ADOQUERY1.OPEN;
HWKDBTREE1.DATASET:=ADOQUERY1;
HWKDBTREE1.ACTIVE:=TRUE;
如果想取选中的单位编号,直接取KEYSTRING就可以了。


unit hwkdbtree;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, ComCtrls,db,Graphics;

type
Thwkdbtree = class(TTreeView)
private
FActive:boolean;
FKeyNum:smallint; //每节的长度
FDataSet:TDataSet;
FKeyString:string;
KeyTree:TSTRINGLIST;
FFont:TFont;
procedure SetDataSource(InVal:TDataSet);
procedure SetActive(InVal:boolean);
procedure FillTree(tv1:ttreenode;bh,mch:string);
procedure ActiveTree;
procedure WMAfterClick(var msg:TWMMouse);message MK_LBUTTON;//处理鼠标点击消息
protected
public
constructor Create(AOwner: TComponent);override;
destructor Destroy;override;
function GetKey:string;//获取编号
published
property Active:boolean read FActive write setactive;
property KeyNum:smallint read FKeyNum write FKeyNum;
property DataSet:TDataSet read FDataSet Write SetDatasource;
property KeyString:string read GetKey Write FKeyString;
property Font:TFont read FFont write FFont;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Standard', [Thwkdbtree]);
end;

constructor THwkDBTree.Create(AOwner: TComponent);
begin
inherited;
keytree:=tstringlist.Create;
FActive:=false;
Fkeynum:=2;
FFont:=TFont.Create;
FFont.Name:='宋体';
FFont.Size:=10;
end;

destructor THwkDBTree.Destroy;
begin
keytree.Free;
FFont.Free;
inherited;
end;

procedure THwkDBTree.WMAfterClick(var msg:TWMMouse);
begin
if msg.Msg = MK_LBUTTON then GetKey();
inherited;
end;

procedure THwkDBTree.SetDataSource(InVal:TDataSet);
begin
if (InVal<>nil) and (FDataSet<>InVal) then
begin
FDataSet:=InVal;
if FActive=true then Activetree();
end;
end;

procedure THwkDBTree.FillTree(tv1:ttreenode;bh,mch:string);
begin
if tv1<>nil then self.Selected:=Items.AddChild(tv1,mch) else self.Selected:=Items.Add(tv1,mch);
keytree.Insert(self.Selected.AbsoluteIndex,bh);
end;

procedure THwkDBTree.ActiveTree;
var p1:ttreenode;
currentlen,parentlen:smallint;
s:string;
begin
try
if fDataSet.Active=false then fDataSet.Open;
parentlen:=0;
self.Items.Clear;
self.Items.BeginUpdate;
fDataSet.First;
while not fDataSet.Eof do
begin
s:=trim(fDataSet.Fields[0].AsString);
currentlen:=length(s);
p1:=self.Selected;
if p1<>nil then parentlen:=length(keytree.Strings[self.Selected.AbsoluteIndex]);
while (currentlen<=parentlen) do
begin
currentlen:=currentlen+Fkeynum;
p1:=p1.Parent;
end;
filltree(p1,s,trim(fDataSet.Fields[1].AsString));
fDataSet.Next;
end;
self.Items.EndUpdate;
self.FullCollapse;
if self.Items.Count>0 then self.Selected:=self.Items[0];
self.Selected.Expand(true);
self.Refresh;
except
on e:exception do
begin
self.Items.EndUpdate;
messagebox(handle,pchar('数据处理失败!'+#13+#13+e.Message),'错误信息',16);
end;
end;
end;

procedure THwkDBTree.SetActive(InVal:Boolean);
begin
FActive:=inval;
self.Items.Clear;
if InVal=false then exit;
if FDataSet=nil then
begin
FActive:=false;
exit;
end;
activetree;
end;

function THwkDBTree.getkey:string;
begin
result:='';
if self.Items.Count>0 then
result:=keytree.strings[self.Selected.AbsoluteIndex];
end;

end.
 
嘻嘻,居然没有人回复,看来这个控件做的不好。
 
杩欎笢瑗跨敤璧锋潵鏈
 
凤舞九天:
你写的什么?乱码!一个也看不懂!
 
这东西用起来很方便,多谢
前辈学java用什么,jbuilder还是.net
 
别用“前辈”这个词,看起来很不舒服的。其实学什么都应该从基本的入手。至于JB,还没有安装。安装的是SUN的J2EE,用的是JAVACREATOR3.0 PRO,挺好的。
 
不管用不用的着,先收藏,将来一定用的上!
支持大哥,我不用“您”,也不用“前辈”,用“大哥”应该没有问题吧!
 
可惜,我连安装都不会
 
楼上的:
KeyLife富翁笔记
作者?: TTPig
标题?: delphi中控件的安装和删除
关键字: 控件安装
分类?: 开发经验
密级?: 公开
(评分: , 回复: 0, 阅读: 233) ??
控件安装
基本安装
1、对于单个控件,Componet-->install component..-->PAS或DCU文件-->install;
2、对于带*.dpk文件的控件包,File-->Open(下拉列表框中选*.dpk)-->install即可;
3、对于带*.bpl文件的控件包,Install Packages-->Add-->bpl文件名即可;
4、如果以上Install按钮为失效的话,试试Compile按钮;
5、是run time lib则在option下的packages下的runtimepackes加之。
如果编译时提示文件找不到的话,一般是控件的安装目录不在Delphi的Lib目录中,有两种方法可以解决:
1、反安装的源文件拷入到Delphi的Lib目录下;
2、或者Tools-->Environment Options中把控件源代码路径加入到Delphi的Lib目录中即可。
注意:所安装的控件是否与你所用的Delphi版本相适应。

RxLib的安装
首先在Delphi 5 的 IDE 中将以前版本的 Rxlib 反安装掉,删除 RXCTL5.BPL、RXDB5.BPL、 RXBDE5.BPL、DCLRX5.BPL、 DCLRXDB5.BPL 和DCLRXBD5.BPL。
打开 Rx 的运行包 RXCTL5.DPK,在 Package 窗口中按 Compile 按钮编译 RXCTL5.DPK ,然后用同样方法编译另两个运行包RXDB5.DPK 和 RXBDE5.DPK ,将编译后的三个 BPL 文件放到搜索路径中,如 WINDOWS/SYSTEM等。
在编译完运行包后你必须将 RX 的设计期包安装到 IDE 环境中。
打开 Rx 的设计期包 DCLRX5.DPK,在 Package 窗口中按 Compile 按钮编译,然后按 Install按钮将设计期包注册到组件面板中。用同样的方法安装 DCLRXDB5.DPK 和 DCLRXBD5.DPK。
注意:不要在 Delphi IDE 中保存包资源(package sources)!

帮助文件的安装
单击 Delphi 中的 Help 菜单下的 Customize 菜单项,这时会弹出 OpenHelp 对话框,选择在 Index 页下,打开 Edit 菜单下的 Add Files 菜单,添加你要加入的帮助菜单,这样你就可以在 Delphi 的 IDE 下使用该帮助文件了。

控件删除
在Component/Install Packages中删除。
选Component/configure Palette…
有pages和components两个区域
双击components区域,选中要删除得控件,下面有得Delete按钮
但系统提供的控件只能Hide,不能delete。
打开控件所在的包文件(*.dpk),从中删除控件那个文件,再重新编译该包即可
如果是整个控件包都要删除的话,project->Option->Packages,删掉那个packages,That would be ok~

 
来自:荷塘新月, 时间:2004-4-11 14:21:18, ID:2552016
嘻嘻,居然没有人回复,看来这个控件做的不好。

[red]不是大哥的控件不好,是大哥出的血太少[/red],哈哈

现在DFW上的人都想蹭分,也有人是只将代码copy就走了,没有留下脚印,阅读的人还是不少哦
 
暂时没地方用,但谢谢老兄!
 
接受答案了.
 
后退
顶部