VirtualTreeview 如何显示数据库数据

shengtian 2012-02-16 09:55:39
第一次用 VirtualTreeview ,不知道怎么显示数据,有高手帮下忙吗?最好是写个delphi6的demo我研究下,谢谢了啊。

数据,列1 是大类,列2是中类,列3 是最终子节点

列1 列2 列3
a1 b1 c1
a1 b1 c2
a1 b2 c3
a1 b2 c4
a2 b3 c5
a3 b4 c6
a3 b5 c7

想要显示的效果
VirtualTreeview 显示
a1
b1
c1
c2
b2
c3
c4
a2
b3
c5
a3
b4
c6
b5
c7
...全文
639 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
rznice 2012-07-20
  • 打赏
  • 举报
回复
看看那个回复里面是什么内容。。
shengtian 2012-03-04
  • 打赏
  • 举报
回复
感谢 JQ_ii_QC 的帮助,如果需要分急用,我可以转些给你。
感谢 case5166 的支持
也感谢两位星级高手对本贴的关注,祝大家愉快。
shengtian 2012-03-02
  • 打赏
  • 举报
回复
to:mwy654321
心态正,说的就都是金玉良言,心态不正,别人自然难以接受。不多说了,你想想自己发帖时的心态吧。
haitao 2012-03-02
  • 打赏
  • 举报
回复
这个嘛,不能苟求
能帮得更多,当然更好,但是不能都要求帮更多
能指个方向,也比不指要好一点吧
我看见佛 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 shengtian 的回复:]
to: mwy654321

“如果用 OnIniNode 事件,不分组大约 5 秒左右加载完成,分组要 50 秒,我怀疑是我分组的问题。但我都是一次把所有数据都取出来,再分的组,不知道什么原因,因为时间原因,我没有仔细分析。用传统方法分组,大约 15 秒左右加载完成。我自己觉得可以忍受了,没有再改”
这说的还不够清楚?你没看到呢,还是故意忽略呢?

我就不明白你发帖是为了什……
[/Quote]支持shengtian

(圣天) ----------------------自己走过了,为别人铺路,如果大家在帮别人时,明知道核心的答案,却不愿意完整说出来,只搭个边,那还有什么意义呢?

让别人似懂非懂

mwy654321至少也三十岁了吧!!!
无条件为你 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 shengtian 的回复:]
我觉得我找资料找的辛苦才发的代码。这年头好人怎么这么难做?
[/Quote]

我当年学习的时候连资料都找不到,那不是更辛苦?自愿的事情,兴趣所在。

VirtualTreeview为什么不好掌握?因为属性太多,不同的属性组合在一起产生不同的效果,而且某些属性还决定事件是否有效。这样一来,学习的周期加长!
无条件为你 2012-03-01
  • 打赏
  • 举报
回复

你可以说你自己刚接触水平低,可是如果别人说你水平低你却不愿意听,这是什么意思?假谦虚?


[Quote=引用 23 楼 mwy654321 的回复:]
你什么都会,为什么不给别人提供点帮助呢?你看看你的回帖,有对别人有用的吗?……
[/Quote]

我的第一个加贴指出了一般的应用。23楼的回贴指出了你的一个小bug。就难道不是帮助?

shengtian 2012-03-01
  • 打赏
  • 举报
回复
to: mwy654321

“如果用 OnIniNode 事件,不分组大约 5 秒左右加载完成,分组要 50 秒,我怀疑是我分组的问题。但我都是一次把所有数据都取出来,再分的组,不知道什么原因,因为时间原因,我没有仔细分析。用传统方法分组,大约 15 秒左右加载完成。我自己觉得可以忍受了,没有再改”
这说的还不够清楚?你没看到呢,还是故意忽略呢?

我就不明白你发帖是为了什么?显示自己水平高?你愿意帮助都高兴,不愿意帮助也没什么,你在这里说三道四的有意思?
你没看见我开篇就说第一次用这个控件么?你自己都说了,要想学个差不多要一个月时间研究,我研究这两天的水平,能入你法眼吗?看不上你可以不看,有人逼你?你会不代表别人都会,不会又想用的人,都很着急的,你理解别人的心情吗?虽然我的代码乱,写的不好,但给刚刚接触的人快速使用这个控件提供一个参考,不好吗?你什么都会,为什么不给别人提供点帮助呢?你看看你的回帖,有对别人有用的吗?

说明下:因为 JQ_ii_QC 对我的帮助,想尽快结贴给分,所以代码没有整理,也没有除错,仅仅能够运行,刚才看到还有和控件无关的线程中的代码也贴上了, 如果代码没有参考价值,大家可以回帖说明,我删除,不占用论坛资源。

我觉得我找资料找的辛苦才发的代码。这年头好人怎么这么难做?
haitao 2012-02-29
  • 打赏
  • 举报
回复
缺省的做法savetofile/stream,都是保存的是整棵树
但是,几万、几十万个节点,里面很多是长文本,全部保存是比较慢的,因为最终保存时是经过流压缩的

所以,希望修改过后,只保存涉及的那部分(一般都是增加当年当月的新文章),以第一级节点作为各部分的根,这样,每次的保存只是全部的几十分之一了

加载时,也能反过来,分别读取每个第一级节点下的子节点,组合到一棵大树里
shengtian 2012-02-29
  • 打赏
  • 举报
回复
to:sz_haitao
我水平有限,不是很理解你说的保存一年是什么意思,我理解为你要保存的是整棵树吧,我都是在加载的时候分层,那样,就只保存单个节点中的数据就好了。

忘记了,还有个把树中内容保存到文件中,也比较有用,我只用到其中的一个,我把我找到的例子的全部源代码贴出来,有需要的可以看看。

procedure TGeneralForm.SaveButtonClick(Sender: TObject);

const
HTMLHead = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">'#13#10 +
'<html>'#13#10 +
' <head>'#13#10 +
' <meta http-equiv="Content-Type" content="text/html; charset=utf-8">'#13#10 +
' <title>Virtual Treeview export</title>'#13#10 +
' </head>'#13#10 +
'<body>'#13#10;

var
S: string;
WS: WideString;
Data: Pointer;
DataSize: Cardinal;
TargetName: string;

begin
with SaveDialog do
begin
if Execute then
begin
TargetName := FileName;
case FilterIndex of
1: // HTML
begin
if Pos('.', TargetName) = 0 then
TargetName := TargetName + '.html';
S := HTMLHead + VST2.ContentToHTML(tstVisible) + '</body></html>';
Data := PChar(S);
DataSize := Length(S);
end;
2: // Unicode UTF-16 text file
begin
TargetName := ChangeFileExt(TargetName, '.uni');
WS := VST2.ContentToUnicode(tstVisible, #9);
Data := PWideChar(WS);
DataSize := 2 * Length(WS);
end;
3: // Rich text UTF-16 file
begin
TargetName := ChangeFileExt(TargetName, '.rtf');
S := VST2.ContentToRTF(tstVisible);
Data := PChar(S);
DataSize := Length(S);
end;
4: // Comma separated values ANSI text file
begin
TargetName := ChangeFileExt(TargetName, '.csv');
S := VST2.ContentToText(tstVisible, ListSeparator);
Data := PChar(S);
DataSize := Length(S);
end;
else
// Plain text file
TargetName := ChangeFileExt(TargetName, '.txt');
S := VST2.ContentToText(tstVisible, #9);
Data := PChar(S);
DataSize := Length(S);
end;

with TFileStream.Create(TargetName, fmCreate) do
try
WriteBuffer(Data^, DataSize);
finally
Free;
end;
end;
end;
end;
shengtian 2012-02-29
  • 打赏
  • 举报
回复
to: mwy654321
VirtualTreeview的强大,毋庸置疑,不过,你能给演示演示,也不错,就是刚下来,只有一个可执行程序,感觉像病毒。

最近比较忙,没有上网,现在把我研究的结果和大家通报下,方便新手学习,避免走弯路和浪费时间。

我用到的功能粗略的研究了下,以下是我测试的结果,可能和高手的结果不同,请不要鄙视。

首先说一下速度问题,只有一列数字分组或者不分组,都很快,但是,我用的是十几个字段,并且好几个字段是很多汉字的,一共有 5 万多条记录。如果用 OnIniNode 事件,不分组大约 5 秒左右加载完成,分组要 50 秒,我怀疑是我分组的问题。但我都是一次把所有数据都取出来,再分的组,不知道什么原因,因为时间原因,我没有仔细分析。用传统方法分组,大约 15 秒左右加载完成。我自己觉得可以忍受了,没有再改,下面是我用到的功能的代码,点击列头排序我没有用到,但是感觉有用,也贴上了,代码比较乱,有问题可以问我,等几天再结贴。有不正确的或者补充的功能,请帖出来。


1、数据加载,没有分组的,需要分组,可以自己加条件,这个主要是为了说明怎么用传统方法加载数据,为了明晰清楚,所以,只有一个字段。
(1)、设集合指针
PFAName_Rec = ^TFAName_re;

TFAName_re = record
FAName: string; //方案名称
(2)、开始加载
p_tree.Clear;
p_tree.NodeDataSize := SizeOf(TFAName_re);

p_tree.BeginUpdate;
RootNode := p_tree.AddChild(nil);
Data := p_tree.GetNodeData(RootNode);

while not Form_main.ADOQTest.Eof do
begin
if stop_thread then
exit;

Data.FAName := Form_main.ADOQTest.FieldByName('FAName').AsString;
Form_main.ADOQTest.Next;
end;
p_tree.EndUpdate;

2、显示事件,加载数据后,要显示必须在这个事件中加入显示的代码
procedure TForm_485.FA_TreeGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
var
Data : PFAName_Rec;
begin
Data := Sender.GetNodeData(Node);

case Column of
0:
begin
if Data^.FAName <> '' then
CellText := Data^.FAName;
end;
end;
end;

3、显示图标,虽然没什么大用,但是很美观
procedure TForm_485.Wait_Send_TreeGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
var Ghosted: Boolean; var ImageIndex: Integer);
var
wait_send_rec : P_wait_send_Rec;
begin
if Column <> 2 then
exit;
wait_send_rec := Sender.GetNodeData(Node);

ImageIndex := wait_send_rec.is_send - 1;
end;

4、相邻行不同颜色
procedure TForm_485.Wait_Send_TreeBeforeItemErase(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect;
var ItemColor: TColor; var EraseAction: TItemEraseAction);
begin
if Odd(Node.Index) then
begin
// ItemColor := $FFEEEE;

ItemColor := $00F7F7F7;
EraseAction := eaColor;
end;
end;

5、拖放,没什么大用的功能,某些地方很有用,用按钮或菜单实现一样。
拖放需要加载 ActiveX 单元才行,否则会报错
(1)、 源控件事件
procedure TForm_485.All_item_TreeMouseDown(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
if All_item_Tree.FocusedNode = nil then
exit;
if All_item_Tree.FocusedNode.ChildCount > 0 then
exit;
All_item_Tree.BeginDrag(False);
end;
end;
(2)、目标事件1
procedure TForm_485.Wait_Send_TreeDragOver(Sender: TBaseVirtualTree;
Source: TObject; Shift: TShiftState; State: TDragState; Pt: TPoint;
Mode: TDropMode; var Effect: Integer; var Accept: Boolean);
begin
if (Source = All_item_Tree) or (Source = Wait_Send_Tree) or (Source =
Often_item_Tree) or (Source = FA_Tree) then
begin
Accept := true;
end;
end;
(3)、目标事件2
procedure TForm_485.Wait_Send_TreeDragDrop(Sender: TBaseVirtualTree;
Source: TObject; DataObject: IDataObject; Formats: TFormatArray;
Shift: TShiftState; Pt: TPoint; var Effect: Integer; Mode: TDropMode);
var
Data : PFAName_Rec;
begin
cur_send_Meter_addr := trim(Edit8.Text);
cur_send_Meter_count := 1;

if (Source = All_item_Tree) then
begin
r(All_item_Tree);
end;

if (Source = Often_item_Tree) then
begin
r(Often_item_Tree);
end;

if (Source = Wait_Send_Tree) then
begin
move_item(Shift, Effect, Mode);
end;

if (Source = FA_Tree) then
begin
if FA_Tree.FocusedNode = nil then
exit;

Data := FA_Tree.GetNodeData(FA_Tree.FocusedNode);

get_FA_item(Data.FAName, Wait_Send_Tree);
end;
end;

6、编辑数据,这个我感觉很实用
(1)、事件1
procedure TForm_485.Wait_Send_TreeEditing(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean);
begin
if Column in [4..8] then
Allowed := true;
end;
(2)、事件2
procedure TForm_485.Wait_Send_TreeDragAllowed(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean);
begin
Allowed := Odd(Node.Index);
end;
(3)、事件3
procedure TForm_485.Wait_Send_TreeNewText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; NewText: WideString);
var
wait_send_rec : P_wait_send_Rec;
str_meter_addr : string;
begin
wait_send_rec := Sender.GetNodeData(Node);

case Column of
4:
begin
if trim(wait_send_rec.str_czy) = trim(NewText) then
exit;
if length(trim(NewText)) <> 12 then
exit;

wait_send_rec.metter_addr := NewText;

if CheckBox3.Checked then
begin
//保存到数据库
post_item_mrz('BiaoDZ', wait_send_rec.GuiYBS, NewText);
end;

end;
end;
end;

7、显示提示,作用不大,有胜于无的功能
procedure TForm_485.Wait_Send_TreeGetHint(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex;
var LineBreakStyle: TVTTooltipLineBreakStyle; var HintText: WideString);
begin
case Column of
0: HintText := '第一列提示';
2: HintText := '第三列提示';
3: HintText := '第四列提示';
end;
end;

8、点击列头排序,个人感觉非常有用的功能,但是我的程序中没有用到,所以,把我找到的代码贴上了,供大家参考。
procedure TfrmMain.vCustomerTreeHeaderClick(Sender: TVTHeader;
Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
if Button = mbLeft then
with Sender do
begin
if SortColumn <> Column then
SortColumn := Column;
if SortDirection = sdAscending then
SortDirection := sdDescending
else SortDirection := sdAscending;
vCustomerTree.SortTree(Column,SortDirection,true);
// BIG NOTE ! ... the "DoInit" variable MUST be set to true,
// otherwise you are ONLY sorting on nodes that have already
// been initialised - this can cause some interesting sorts !
end;
end;

9、查找数据,我的代码比较多,看着可能不清晰,这是别人写的例子,应该容易理解点,我在前面调用了2个方法,第一个是取消原来的选择,第二个是收起节点,主要为了找到节点后展开找到的节点。这个例子中没有对找到的节点进行处理的代码,例如,选择找到的节点,展开找到的节点等。自己加吧,不难的。
(1)、之前的方法
All_item_Tree.ClearSelection;
All_item_Tree.FullCollapse();

(2)、调用方式
PNode := FindChild(Controltree,Controltree.RootNode,EMPID);
(3)、递归的查找方法
function FindChild(Sender: TBaseVirtualTree; hParent: PVirtualNode; EMPID: integer): PVirtualNode;
var
llhChild: PVirtualNode;
Data: PEntry;
begin
Result := nil;

llhChild := hParent.FirstChild; //获取hParent的第一个子节点
while Assigned(llhChild) do begin
Data := Sender.GetNodeData(llhChild);
if (Data.Kind = nkEmployee) and (Data.ID = EMPID) then begin
Result := llhChild;
Exit;
end;

{对llhChild节点进行处理}
Result := FindChild(Sender, llhChild, EMPID);
if Result <> nil then Exit;
llhChild := llhChild.NextSibling;
end;

end;

10、MoveTo 使用方法,可以在不同的两个树中拖动,好像必须两棵树的结构一致,我只使用了在同一颗树中移动的功能。这个方法在拖动(DragDrop)事件中调用,按 Ctrl 是复制,其他是移动

procedure TForm.move_item(Shift: TShiftState; var Effect: Integer; var Mode:
TDropMode);
procedure DetermineEffect;
begin
if Shift <> [] then
begin

if (Shift = [ssAlt]) or (Shift = [ssCtrl, ssAlt]) then
Effect := DROPEFFECT_LINK
else if Shift = [ssCtrl] then
Effect := DROPEFFECT_COPY
else
Effect := DROPEFFECT_MOVE;
end;
end;

var
Attachmode : TVTNodeAttachMode;
Nodes : TNodeArray;
i : integer;
begin

case Mode of
dmAbove:
AttachMode := amInsertBefore;
// dmOnNode:
// AttachMode := amAddChildLast;
dmOnNode:
AttachMode := amInsertAfter;
dmBelow:
AttachMode := amInsertAfter;
else
AttachMode := amNowhere;
end;

DetermineEffect;
Nodes := Wait_Send_Tree.GetSortedSelection(True);
if Effect = DROPEFFECT_COPY then
begin
for I := 0 to High(Nodes) do
Wait_Send_Tree.CopyTo(Nodes[I], Wait_Send_Tree.DropTargetNode,
AttachMode, False);
end
else
for I := 0 to High(Nodes) do
Wait_Send_Tree.MoveTo(Nodes[I], Wait_Send_Tree.DropTargetNode,
AttachMode, False);

// Wait_Send_Tree.mo
end;
无条件为你 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 sz_haitao 的回复:]
缺省的做法savetofile/stream,都是保存的是整棵树
但是,几万、几十万个节点,里面很多是长文本,全部保存是比较慢的,因为最终保存时是经过流压缩的

所以,希望修改过后,只保存涉及的那部分(一般都是增加当年当月的新文章),以第一级节点作为各部分的根,这样,每次的保存只是全部的几十分之一了

加载时,也能反过来,分别读取每个第一级节点下的子节点,组合到一棵大树里
[/Quote]

你说的方法确实可以极大提速,但以楼主的道行,目前还达不到这种水平。还需要修炼。
楼主的代码我看了下,乱!像p_tree.AddChild(nil)这样添加结点的方法我一般不用!再比如下面的代码
if Data^.FAName <> '' then CellText := Data^.FAName;
其中 if Data^.FAName <> '' then 应该去掉,要不然如果为空,则显示node,这是bug
无条件为你 2012-02-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 shengtian 的回复:]
to : mwy654321
1、 您都两颗星了,怎么弄这么无聊的东西啊?没有源码,你让人家看什么?
2、 我就是能显示就好,关键是速度,简单应用应该不难,按照原始方式添加节点,我已经弄明白了,现在正在研究用 iniNode 和 iniChildNode 这两个事件显示。
[/Quote]

我在网址下面已经说了,目的是让你知道该控件的强大功能而已。你不识字?
haitao 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 mwy654321 的回复:]
楼主,我对VirtualTreeview非常熟悉。你要想显示数据库中记录的话,要先定义一个结构。处理OnInitNode事件。

总之你要全部搞熟悉,至少一个月。相当复杂的。简单的应用你一天可以搞定,但产生一些异常你又解决不了了。
[/Quote]

我以前写过一个工具,以它存储几十年的报纸内容,按年、月、期、文章分4层
但是,每次新加文章了,保存时需要保存整个树(几十年)的内容
如果能按年分多个文件保存,加载时再加载到一起 就好了:这样,每次最多是保存一年的内容
可惜当时没找到这样做的方法
我看见佛 2012-02-20
  • 打赏
  • 举报
回复
我也安装了学习下,iniNode初始化学点数据,GetText上面显示节点数据呀。

不过我不知道查找节点是怎么查找的呢?
shengtian 2012-02-18
  • 打赏
  • 举报
回复
to : mwy654321
1、 您都两颗星了,怎么弄这么无聊的东西啊?没有源码,你让人家看什么?
2、 我就是能显示就好,关键是速度,简单应用应该不难,按照原始方式添加节点,我已经弄明白了,现在正在研究用 iniNode 和 iniChildNode 这两个事件显示。
无条件为你 2012-02-17
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/mwy654321/3997390

我写的一个小作品,从这里你可以看到该控件的强大功能。
无条件为你 2012-02-17
  • 打赏
  • 举报
回复
楼主,我对VirtualTreeview非常熟悉。你要想显示数据库中记录的话,要先定义一个结构。处理OnInitNode事件。

总之你要全部搞熟悉,至少一个月。相当复杂的。简单的应用你一天可以搞定,但产生一些异常你又解决不了了。
shengtian 2012-02-17
  • 打赏
  • 举报
回复
非常感谢 JQ_ii_QC ,不但为我下载了 VirtualTreeview Demo,还帮我找了例程,我现在正在研究怎么显示数据,我研究好了,打算贴在这里供大家参考。
我看见佛 2012-02-17
  • 打赏
  • 举报
回复
晕,广告,楼主别下了
加载更多回复(11)

中文名称:Delphi 7完美经典

http://www.huachu.com.cn/photo/2003/BB04672130c.jpg

出版社 : 中国铁道出版社
作者  : 江义华/
出版日期: 2003年7月
综合评价:
国标编号:ISBN 7-113-05241-X/TP.931
条形码 :9787113052416
字数  :989千字  
印张  :41.75
印数  :1-5000   
页数  :654
开本  :787*1092 1/16
版别版次:2003年7月第一版第一次印刷
内容简介:
本书特色
层次清晰、语言通俗、语法简练、以实用性为第一位。
深入剖析了Object Pascal程序语言,包括指针、数据结构以及有关Override 和Overload函数的语法等。
对面向对象的观点详述了Delphi VCL组件的属性、方法及事件,且在数据设计方面辅以应用的范例。
实例配有光盘,快速引导您踏入Delphi程序开发领域。
适合想要深入了解Delphi程序设计的专业设计师,对一开始就想打好Delphi程序设计基础的初学者也非常适用。

目录 :
第0章 认识Delphi

0-1 前言
0-2 Delphi简介
0-3 进入Delphi7
0-4 退出Delphi

第1章 常用的窗口工具

1-1 窗体(Form)
1-2 代码编辑器(Code Editor)
1-3 代码浏览器(Code Explorer)
1-4 组件面板(Componet Palette)
1-5 对象检视器(Object Inspector)
1-6 快捷工具栏(Speed Menu)
1-7 项目管理器(Project Manager)
1-8 桌面工具栏(Desktops Tollbar)
1-9 图像编辑器(Image Editor)
1-10 对象浏览器(Object TreeView)
1-11 关联选项卡(Digram Page)

第2章 常用的菜单

2-1 File菜单
2-2 Edit菜单
2-3 Search菜单
2-4 View菜单
2-5 Project菜单
2-6 Run菜单
2-7 Tools菜单
2-8 Windows菜单

第3章 集成开发环境的改变

3-1 Delphi集成开民环境介绍
3-2 操作菜单方面的改进
3-2-1 外面方面的改变
3-2-2 内容方面的改变
3-3 对象检视器方面的改进
3-4 组件面板的改进
3-5 代码编辑器的改进
3-6 设计陈列室的改进
3-7 编译信息的显示
3-8 调试器方面的改进
3-8-1 Watch List改进
3-8-2 Debugger选项的改进
3-8-3 Run Parameters对话框的改进

第4章 Delphi Object Pascal的初步印象

4-1 面向对象程序概论
4-1-1 类
4-1-2 对象
4-1-3 继承
4-1-4 封装
4-1-5 信息
4-2 Delphi项目结构及窗体的建立
4-2-1 GUI模式的项目
4-2-2 Console模式的项目
4-3 Object Pascal程序结构
4-3-1 项目程序(Program)的结构
4-3-2 单元程序(Unit)的结构
4-4 如何完成一个简单的窗体程序

第5章 简单的常用指令介绍

5-1 TLabel类对象
5-1-1 Caption属性
5-2 TButton类对象
5-2-1 Caption属笥
5-2-2 OnClick事件
5-3 TEdit类对象
5-4 TCanvas类对象
5-5 Showmessage函数
5-6 InputBox函数
5-7 MessageDlg函灵敏

第6章 Delphi与Object Pascal程序的基本概念

6-1 Object Pascal Program程序结构与Delphi项目结构的关系
6-1-1 标头(Heading)
6-1-2 Uses子句
6-1-3 编译指令(Compiler directive)
6-1-4 源代码区(begin end)
6-2 Unit程序结构与窗体的关系
6-2-1 Unit代码结构
6-2-2 语句(Statement)
6-2-3 Unit间Use的状况
6-3 数据类型与定义变量
6-3-1 数据类型概论
6-3-2 不需要使用type声明的数据类型
6-3-3 必须使用type声明的数据类型
6-3-4 定义变量
6-3-5 变量的作用域
6-3-6 定义常量
6-3-7 变量的类型转换(Typecast)
6-4 Object Pascal的运算符(Operator)
6-4-1 设置运算符(assign Operator)
6-4-2 算数运算符(Arithmetic Operator)
6-4-3 关系运算符(Relational Operator)
6-4-4 布尔运算符
6-4-5 集合运算符
6-4-6 字符串运算符
6-4-7 位逻辑运算符
6-4-8 运算符优先级
6-5 流程控制
6-5-1 语句的基本概念
6-5-2 表达式语句(Expression-Statement)
6-5-3 流程控制语句
6-5-4 可视化程序与嵌套程序
6-6 数组与指针
6-6-1 数组类型
6-6-2 指针类型
6-6-3 浅谈指针与数据结构
6-7 程序与函数(Procedures and Functions)
6-7-1 函数的意义与优点
6-7-2 函数的分类与效用
6-7-3 自定义函数使用方法概述
6-7-4 函数的声明、定义及其实现
6-7-5 参数传递方式
6-7-6 声明修饰字
6-7-7 常用的内建函数

第7章 Object Pascal面向对象设计

7-1 类和对象
7-1-1 类(Class)与对象(Object)的基本概念
7-1-2 对象的构造与类的关系
7-2 类的声明与对象的定义
7-2-1 类的声明与对象的实现
7-2-2 对象的构造与析构
7-3 类成员的封装等级与可见度
7-3-1 封装的意义
7-3-2 Object Pascal类成员的封装等级
7-3-3 以实例说明类成员封装等级的可见度
7-3-4 开头不加保留字的类成员
7-3-5 成员封装等级的变更法则
7-4 类成员的定义与实现
7-4-1 字段(Field)与对象引用(Object Reference)的实现
7-4-2 方法(Method)
7-4-3 属性(Property)
7-5 类的继承
7-5-1 继承的意义与优点
7-5-2 子类成员的存在方式
7-6 成员函数的Override及 Overload
7-6-1 Override 适用的情况——Virtual与 Dynamic的成员函数
7-6-2 Override成员函数的定义语法
7-6-3 Virtual成员函数与动态绑定(Dynamic Binding)
7-6-4 覆盖(Overriding)与隐藏(Hiding)的差别
7-6-5 Override与OVerload的差别
7-7 Abstract成员函数与多态(Polymorphic)
7-7-1 一般纯虚函数的多态实现概念
7-7-2 纯虚函数的定义语法及实现
7-8 Self、AS、is、Sender、Parent、owner、inerited
7-8-1 Self变量
7-8-2 AS运算符
7-8-3 is运算符
7-8-4 Sender
7-8-5 Parent
7-8-6 owner
7-8-7 inerited保留字
7-9 静态成员方法——Class Methods

第8章 异常处理

8-1 异常处理存在的目的
8-2 Object Pascal异常的种类
8-2-1 Delphi内建的异常类
8-2-2 自定义异常类
8-3 触发异常的方法
8-3-1 由程序系统自动触发
8-3-2 使用Raise指令触发
8-4 处理异常情况
8-4-1 try…finally…end语法说明
8-4-2 ty…except…end语法说明

第9章 Delphi用户接口设计详述

9-1 基本概念
9-2 TForm的属性
9-2-1 由TComponent继承而来的属性
9-2-2 由TControl继承而来的属性
9-2-3 由TWinControl继承而来的属性
9-2-4 由TScrollingWindControl继承而来的属性
9-2-5 由TCustomForm继承而来的属性
9-3 TForm的方法
9-3-1 由TObject继承而来的属性
9-3-2 由TPersistent继承而来的属性
9-3-3 由TComponent继承而来的属性
9-3-4 由TControl继承而来的属性
9-3-5 由WinControl继承而来的属性
9-3-6 由TScrollingWinControl继承而来的属性
9-3-7 由TCustomForm继承而来的属性
9-3-8 由TForm继承而来的属性
9-4 TForm的事件
9-4-1 由TControl继承而来的属性
9-4-2 由TWinControl继承而来的属性
9-4-3 由TCustomForm继承而来的属性
9-5 TLabel的类成员
9-5-1 TLabel的属性
9-5-2 TLabel的方法

第10章 标准组件介绍及实作范例

10-1 Frames组件
10-2 MainMenu组件
10-3 PopuMenu组件
10-4 Label组件
10-5 Edit组件
10-6 Memo组件
10-7 Button组件
10-8 CheckBox组件
10-9 RadioButton组件
10-10 ListBox组件
10-11 ComboBox组件
10-12 ScrollBar组件
10-13 GroupBox组件
10-14 RadioGroup组件
10-15 Panel组件
10-16 ActionList组件

第11章 TApplication与TScreen类介绍及应用

11-1 TApplication类
11-1-1 TApplication类对象常用的属性
11-1-2 TApplication类对象常用的方法
11-2 TScreen类

第12章 高级组件介绍

12-1 Additional选项卡中的常用组件
12-1-1 TBitBtn组件
12-1-2 TMaskEdit组件
12-1-3 TImage组件
12-1-4 TShape组件
12-2 Win32选项卡中的常用组件
12-2-1 TPageControl组件
12-2-2 TImageList组件
12-2-3 TRichEdit组件
12-2-4 TDateTimePicker组件
12-2-5 TStatusBar组件
12-3 System选项卡中的常用组件
12-3-1 TTimer组件
12-4 Dialogs选项卡中的常用组件
12-4-1 TOpenDialog组件
12-4-2 FTontDialog组件
12-4-3 TColorDialog组件

第13章 封装Delphi7开发的应用程序

13-1 安装Borland的InstallShiled程序
13-2 利用InstallShield封装 Delphi7开发的程序
13-2-1 InstallShield环境界面简介
13-2-2 封装一个简单的Delphi项目

第14章 数据概念及SQL指令介绍

14-1 数据基本概念
14-1-1 数据结构
14-1-2 开放数据连接协议(ODBC)
14-1-3 SQL Explorer
14-2 结构化查询语言SQL
14-2-1 CREATE语句
14-2-2 ALTER TABLE语句
14-2-3 DROP语句
14-2-4 SELECT语句
14-2-5 INSERT、UPDATE语句
14-2-6 DELETE语句
14-3 SQL指令高级使用
14-3-1 UNION运算
14-3-2 JOIN运算
14-3-3 特殊运算符
14-3-4 子查询(Sub Query)

第15章 Delphi数据程序基础

15-1 Delphi各种数据连接设置
15-1-1 建立dBase、Paradox连接
15-1-2 建立Access连接
15-1-3 建立MSSQL连接
15-1-4 建立MySQL连接
15-2 Delphi的Database Desktop使用方法
15-2-1 字段定义
15-2-2 输入数据
15-2-3 设置BDE数据别名与连接数据

第16章 Delphi数据程序设计——使用BDE组件

16-1 TDataSet组件
16-1-1 TDataSet组件常用的属性
16-1-2 TDataSet组件常用的方法
16-1-3 TDataSet组件常用的事件
16-2 TTable组件
16-2-1 TTable组件常用的属性
16-2-2 TTable组件常用的方法
16-3 TQuery组件
16-3-1 TQuery组件常用的属性
16-3-2 TQuery组件常用的方法
16-4 TDataModule组件
16-5 TDatabase组件
16-5-1 TDatabase组件常用的属性
16-5-2 TDatabase组件常用的方法
16-5-3 TDatabase组件常用的事件
16-6 综合范例
16-6-1 员工管理系统——使用TTable组件
16-6-2 员工管理系统——使用TQuery组件
16-6-3 订单管理系统——使用TTable组件
16-6-4 订单系统——使用TQuery组件

第17章 数据程序设计——使用Delphi组件

17-1 TADOConnection组件
17-1-1 TADOConnection组件常用的属性
17-1-2 TADOConnection组件常用的方法
17-1-3 TADOConnection组件常用的事件
17-2 TADOCommand组件
17-2-1 TADOCommand组件常用的属性
17-2-2 TADOCommand组件常用的方法
17-3 TADODataSet组件
17-3-1 TADODataSet组件常用的属性
17-3-2 TADODataSet组件常用的方法
17-3-3 TADODataSet组件常用的事件
17-4 TADOTable组件
17-4-1 TADOTable组件常用的属性
17-4-2 TADOTable组件常用的方法
17-5 TADOQuery组件
17-6 综合范例
17-6-1 客户管理系统——使用TADODataSet组件
17-6-2 客户管理系统——使用TADOTable组件
17-6-3 客户管理系统——使用TADOQuery组件
17-6-4 订单管理系统——使用TADOTable组件
17-6-5 订单系统——使用TADOQuery组件

第18章 数据感知组件

18-1 TDBText组件
18-2 TDBEdit组件
18-3 TDBMemo组件
18-4 TDBImage组件
18-5 TDBListBox组件
18-6 TDBComboBox组件
18-7 TDBLookupListBox与TDBLookupComboBox组件
18-8 TDBNavigator组件
18-9 TDBGrid组件

第19章 设计Delphi数据报表

19-1 设计报表的基本观念
19-1-1 报表的组成
19-1-2 报表的主体组件——TquickRep
19-1-3 建立第一个报表程序
19-2 QuickReport中可打印出组件
19-2-1 TQR系列组件介绍
19-2-2 TQRDB系列组件介绍
19-3 综合范例
19-3-1 一般表达报表范例
19-3-2 标签式报表范例
19-3-3 主/明细报表范例
19-3-4 一般表达式附图片报表范例
19-3-5 分组式报表范例——打印多色报表
19-3-6 报表输出及输出范例

附录 Kylix程序安装及转换

http://lib.verycd.com/2005/02/07/0000038314.html
目录 : 第0章 认识Delphi 0-1 前言 0-2 Delphi简介 0-3 进入Delphi7 0-4 退出Delphi 第1章 常用的窗口工具 1-1 窗体(Form) 1-2 代码编辑器(Code Editor) 1-3 代码浏览器(Code Explorer) 1-4 组件面板(Componet Palette) 1-5 对象检视器(Object Inspector) 1-6 快捷工具栏(Speed Menu) 1-7 项目管理器(Project Manager) 1-8 桌面工具栏(Desktops Tollbar) 1-9 图像编辑器(Image Editor) 1-10 对象浏览器(Object TreeView) 1-11 关联选项卡(Digram Page) 第2章 常用的菜单 2-1 File菜单 2-2 Edit菜单 2-3 Search菜单 2-4 View菜单 2-5 Project菜单 2-6 Run菜单 2-7 Tools菜单 2-8 Windows菜单 第3章 集成开发环境的改变 3-1 Delphi集成开民环境介绍 3-2 操作菜单方面的改进 3-2-1 外面方面的改变 3-2-2 内容方面的改变 3-3 对象检视器方面的改进 3-4 组件面板的改进 3-5 代码编辑器的改进 3-6 设计陈列室的改进 3-7 编译信息的显示 3-8 调试器方面的改进 3-8-1 Watch List改进 3-8-2 Debugger选项的改进 3-8-3 Run Parameters对话框的改进 第4章 Delphi Object Pascal的初步印象 4-1 面向对象程序概论 4-1-1 类 4-1-2 对象 4-1-3 继承 4-1-4 封装 4-1-5 信息 4-2 Delphi项目结构及窗体的建立 4-2-1 GUI模式的项目 4-2-2 Console模式的项目 4-3 Object Pascal程序结构 4-3-1 项目程序(Program)的结构 4-3-2 单元程序(Unit)的结构 4-4 如何完成一个简单的窗体程序 第5章 简单的常用指令介绍 5-1 TLabel类对象 5-1-1 Caption属性 5-2 TButton类对象 5-2-1 Caption属笥 5-2-2 OnClick事件 5-3 TEdit类对象 5-4 TCanvas类对象 5-5 Showmessage函数 5-6 InputBox函数 5-7 MessageDlg函灵敏 第6章 Delphi与Object Pascal程序的基本概念 6-1 Object Pascal Program程序结构与Delphi项目结构的关系 6-1-1 标头(Heading) 6-1-2 Uses子句 6-1-3 编译指令(Compiler directive) 6-1-4 源代码区(begin end) 6-2 Unit程序结构与窗体的关系 6-2-1 Unit代码结构 6-2-2 语句(Statement) 6-2-3 Unit间Use的状况 6-3 数据类型与定义变量 6-3-1 数据类型概论 6-3-2 不需要使用type声明的数据类型 6-3-3 必须使用type声明的数据类型 6-3-4 定义变量 6-3-5 变量的作用域 6-3-6 定义常量 6-3-7 变量的类型转换(Typecast) 6-4 Object Pascal的运算符(Operator) 6-4-1 设置运算符(assign Operator) 6-4-2 算数运算符(Arithmetic Operator) 6-4-3 关系运算符(Relational Operator) 6-4-4 布尔运算符 6-4-5 集合运算符 6-4-6 字符串运算符 6-4-7 位逻辑运算符 6-4-8 运算符优先级 6-5 流程控制 6-5-1 语句的基本概念 6-5-2 表达式语句(Expression-Statement) 6-5-3 流程控制语句 6-5-4 可视化程序与嵌套程序 6-6 数组与指针 6-6-1 数组类型 6-6-2 指针类型 6-6-3 浅谈指针与数据结构 6-7 程序与函数(Procedures and Functions) 6-7-1 函数的意义与优点 6-7-2 函数的分类与效用 6-7-3 自定义函数使用方法概述 6-7-4 函数的声明、定义及其实现 6-7-5 参数传递方式 6-7-6 声明修饰字 6-7-7 常用的内建函数 第7章 Object Pascal面向对象设计 7-1 类和对象 7-1-1 类(Class)与对象(Object)的基本概念 7-1-2 对象的构造与类的关系 7-2 类的声明与对象的定义 7-2-1 类的声明与对象的实现 7-2-2 对象的构造与析构 7-3 类成员的封装等级与可见度 7-3-1 封装的意义 7-3-2 Object Pascal类成员的封装等级 7-3-3 以实例说明类成员封装等级的可见度 7-3-4 开头不加保留字的类成员 7-3-5 成员封装等级的变更法则 7-4 类成员的定义与实现 7-4-1 字段(Field)与对象引用(Object Reference)的实现 7-4-2 方法(Method) 7-4-3 属性(Property) 7-5 类的继承 7-5-1 继承的意义与优点 7-5-2 子类成员的存在方式 7-6 成员函数的Override及 Overload 7-6-1 Override 适用的情况——Virtual与 Dynamic的成员函数 7-6-2 Override成员函数的定义语法 7-6-3 Virtual成员函数与动态绑定(Dynamic Binding) 7-6-4 覆盖(Overriding)与隐藏(Hiding)的差别 7-6-5 Override与OVerload的差别 7-7 Abstract成员函数与多态(Polymorphic) 7-7-1 一般纯虚函数的多态实现概念 7-7-2 纯虚函数的定义语法及实现 7-8 Self、AS、is、Sender、Parent、owner、inerited 7-8-1 Self变量 7-8-2 AS运算符 7-8-3 is运算符 7-8-4 Sender 7-8-5 Parent 7-8-6 owner 7-8-7 inerited保留字 7-9 静态成员方法——Class Methods 第8章 异常处理 8-1 异常处理存在的目的 8-2 Object Pascal异常的种类 8-2-1 Delphi内建的异常类 8-2-2 自定义异常类 8-3 触发异常的方法 8-3-1 由程序系统自动触发 8-3-2 使用Raise指令触发 8-4 处理异常情况 8-4-1 try…finally…end语法说明 8-4-2 ty…except…end语法说明 第9章 Delphi用户接口设计详述 9-1 基本概念 9-2 TForm的属性 9-2-1 由TComponent继承而来的属性 9-2-2 由TControl继承而来的属性 9-2-3 由TWinControl继承而来的属性 9-2-4 由TScrollingWindControl继承而来的属性 9-2-5 由TCustomForm继承而来的属性 9-3 TForm的方法 9-3-1 由TObject继承而来的属性 9-3-2 由TPersistent继承而来的属性 9-3-3 由TComponent继承而来的属性 9-3-4 由TControl继承而来的属性 9-3-5 由WinControl继承而来的属性 9-3-6 由TScrollingWinControl继承而来的属性 9-3-7 由TCustomForm继承而来的属性 9-3-8 由TForm继承而来的属性 9-4 TForm的事件 9-4-1 由TControl继承而来的属性 9-4-2 由TWinControl继承而来的属性 9-4-3 由TCustomForm继承而来的属性 9-5 TLabel的类成员 9-5-1 TLabel的属性 9-5-2 TLabel的方法 第10章 标准组件介绍及实作范例 10-1 Frames组件 10-2 MainMenu组件 10-3 PopuMenu组件 10-4 Label组件 10-5 Edit组件 10-6 Memo组件 10-7 Button组件 10-8 CheckBox组件 10-9 RadioButton组件 10-10 ListBox组件 10-11 ComboBox组件 10-12 ScrollBar组件 10-13 GroupBox组件 10-14 RadioGroup组件 10-15 Panel组件 10-16 ActionList组件 第11章 TApplication与TScreen类介绍及应用 11-1 TApplication类 11-1-1 TApplication类对象常用的属性 11-1-2 TApplication类对象常用的方法 11-2 TScreen类 第12章 高级组件介绍 12-1 Additional选项卡中的常用组件 12-1-1 TBitBtn组件 12-1-2 TMaskEdit组件 12-1-3 TImage组件 12-1-4 TShape组件 12-2 Win32选项卡中的常用组件 12-2-1 TPageControl组件 12-2-2 TImageList组件 12-2-3 TRichEdit组件 12-2-4 TDateTimePicker组件 12-2-5 TStatusBar组件 12-3 System选项卡中的常用组件 12-3-1 TTimer组件 12-4 Dialogs选项卡中的常用组件 12-4-1 TOpenDialog组件 12-4-2 FTontDialog组件 12-4-3 TColorDialog组件 第13章 封装Delphi7开发的应用程序 13-1 安装Borland的InstallShiled程序 13-2 利用InstallShield封装 Delphi7开发的程序 13-2-1 InstallShield环境界面简介 13-2-2 封装一个简单的Delphi项目 第14章 数据概念及SQL指令介绍 14-1 数据基本概念 14-1-1 数据结构 14-1-2 开放数据连接协议(ODBC) 14-1-3 SQL Explorer 14-2 结构化查询语言SQL 14-2-1 CREATE语句 14-2-2 ALTER TABLE语句 14-2-3 DROP语句 14-2-4 SELECT语句 14-2-5 INSERT、UPDATE语句 14-2-6 DELETE语句 14-3 SQL指令高级使用 14-3-1 UNION运算 14-3-2 JOIN运算 14-3-3 特殊运算符 14-3-4 子查询(Sub Query) 第15章 Delphi数据程序基础 15-1 Delphi各种数据连接设置 15-1-1 建立dBase、Paradox连接 15-1-2 建立Access连接 15-1-3 建立MSSQL连接 15-1-4 建立MySQL连接 15-2 Delphi的Database Desktop使用方法 15-2-1 字段定义 15-2-2 输入数据 15-2-3 设置BDE数据别名与连接数据 第16章 Delphi数据程序设计——使用BDE组件 16-1 TDataSet组件 16-1-1 TDataSet组件常用的属性 16-1-2 TDataSet组件常用的方法 16-1-3 TDataSet组件常用的事件 16-2 TTable组件 16-2-1 TTable组件常用的属性 16-2-2 TTable组件常用的方法 16-3 TQuery组件 16-3-1 TQuery组件常用的属性 16-3-2 TQuery组件常用的方法 16-4 TDataModule组件 16-5 TDatabase组件 16-5-1 TDatabase组件常用的属性 16-5-2 TDatabase组件常用的方法 16-5-3 TDatabase组件常用的事件 16-6 综合范例 16-6-1 员工管理系统——使用TTable组件 16-6-2 员工管理系统——使用TQuery组件 16-6-3 订单管理系统——使用TTable组件 16-6-4 订单系统——使用TQuery组件 第17章 数据程序设计——使用Delphi组件 17-1 TADOConnection组件 17-1-1 TADOConnection组件常用的属性 17-1-2 TADOConnection组件常用的方法 17-1-3 TADOConnection组件常用的事件 17-2 TADOCommand组件 17-2-1 TADOCommand组件常用的属性 17-2-2 TADOCommand组件常用的方法 17-3 TADODataSet组件 17-3-1 TADODataSet组件常用的属性 17-3-2 TADODataSet组件常用的方法 17-3-3 TADODataSet组件常用的事件 17-4 TADOTable组件 17-4-1 TADOTable组件常用的属性 17-4-2 TADOTable组件常用的方法 17-5 TADOQuery组件 17-6 综合范例 17-6-1 客户管理系统——使用TADODataSet组件 17-6-2 客户管理系统——使用TADOTable组件 17-6-3 客户管理系统——使用TADOQuery组件 17-6-4 订单管理系统——使用TADOTable组件 17-6-5 订单系统——使用TADOQuery组件 第18章 数据感知组件 18-1 TDBText组件 18-2 TDBEdit组件 18-3 TDBMemo组件 18-4 TDBImage组件 18-5 TDBListBox组件 18-6 TDBComboBox组件 18-7 TDBLookupListBox与TDBLookupComboBox组件 18-8 TDBNavigator组件 18-9 TDBGrid组件 第19章 设计Delphi数据报表 19-1 设计报表的基本观念 19-1-1 报表的组成 19-1-2 报表的主体组件——TquickRep 19-1-3 建立第一个报表程序 19-2 QuickReport中可打印出组件 19-2-1 TQR系列组件介绍 19-2-2 TQRDB系列组件介绍 19-3 综合范例 19-3-1 一般表达报表范例 19-3-2 标签式报表范例 19-3-3 主/明细报表范例 19-3-4 一般表达式附图片报表范例 19-3-5 分组式报表范例——打印多色报表 19-3-6 报表输出及输出范例

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧