delphi扩展1.docx

上传人:b****6 文档编号:4084906 上传时间:2022-11-27 格式:DOCX 页数:127 大小:80.49KB
下载 相关 举报
delphi扩展1.docx_第1页
第1页 / 共127页
delphi扩展1.docx_第2页
第2页 / 共127页
delphi扩展1.docx_第3页
第3页 / 共127页
delphi扩展1.docx_第4页
第4页 / 共127页
delphi扩展1.docx_第5页
第5页 / 共127页
点击查看更多>>
下载资源
资源描述

delphi扩展1.docx

《delphi扩展1.docx》由会员分享,可在线阅读,更多相关《delphi扩展1.docx(127页珍藏版)》请在冰豆网上搜索。

delphi扩展1.docx

delphi扩展1

目录

主窗口描边3

程序自启动4

delphi下treeview控件基于节点编号的访问5

delphi中treeview图标12

在Form中分别放入ExcelApplication,ExcelWorkbook和ExcelWorksheet。

14

导出到excel的方法22

工程引用此单元就能防止同时出现多个实例26

解压缩28

设置屏幕分辨率30

自定义消息报文31

线程类属性33

判断网络是否联通37

正常通信。

46

TComBox增加图标51

多线程的并发和保护53

消息在多线程中的问题:

62

delphi检测文件是否被占用64

改变进程的优先级66

创建服务程序67

窗口全屏73

X的Y次方73

动态数组的使用74

给动态数组添加一个元素76

取整数76

Stream对象详解77

显示JPG等图片文件88

创建路径90

文件夹操作90

转换时间的函数91

如何判断当前网络连接方式91

程序不出现在ALT+CTRL+DEL92

七彩文本92

剪贴板操作92

要把你的程序显示在托盘区92

主窗口描边

unitUnit1;

interface

uses

Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,

Dialogs,Grids,DBGrids;

type

TForm1=class(TForm)

DBGrid1:

TDBGrid;

procedureFormPaint(Sender:

TObject);

private

procedureWMNCPaint(varMsg:

TWMNCPaint);messageWM_NCPAINT;

{Privatedeclarations}

public

{Publicdeclarations}

end;

var

Form1:

TForm1;

implementation

{$R*.dfm}

procedureTForm1.WMNCPaint(varMsg:

TWMNCPaint);

var

dc:

hDc;

Pen:

hPen;

OldPen:

hPen;

OldBrush:

hBrush;

begin

inherited;

//获取本窗口设备上下文

dc:

=GetWindowDC(Handle);

msg.Result:

=1;

//创建画笔,实线、宽度为l、红色

Pen:

=CreatePen(PS_SOLID,1,RGB(255,0,0));

//将新创建的画笔选入窗体的设备上下文

OldPen:

=SelectObject(dc,Pen);

//将系统库存的空画刷入窗体的设备上下文

OldBrush:

=SelectObject(dc,GetStockObject(NULL_BRUSH));

//给窗体“镶边”

Rectangle(dc,0,0,Form1.Width,Form1.Height);

//恢复旧画笔和旧画刷

SelectObject(dc,OldBrush);

SelectObject(dc,oldPen);

//删除新创建的画笔,释放系统资源

DeleteObject(Pen);

//释放设备上下文

ReleaseDC(Handle,Canvas.Handle);

end;

end.

//DBGrid控件描边

procedureTForm1.FormPaint(Sender:

TObject);

var

Rct:

TRect;

begin

Rct:

=Rect(Dbgrid1.Left-1,Dbgrid1.Top-1,Dbgrid1.Left+Dbgrid1.Width+1,Dbgrid1.top+Dbgrid1.Height+1);

withForm1.Canvasdo

begin

Pen.Color:

=clRed;

Pen.Width:

=1;

Brush.Style:

=bsClear;

Rectangle(Rct);

end;

end;

程序自启动

HKCU\Software\Microsoft\Windows\CurrentVersion\Run

  HKLM\Software\Microsoft\Windows\CurrentVersion\Run

HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Run

 

delphi下treeview控件基于节点编号的访问

每一个节点下子节点形成这一节点的Items属性,当前节点有一个唯一的Index(TreeNode的Index属性),用于说明子节点在Items中的位置,每一个节点下的子节点是顺序编号的,第一个是0,第二个是1,依次类推。

用IndexOf方法获得子节点的顺序,绝对顺序(AbsoluteIndex)则是指从Treeview第一个项开始的顺序值,第一个是0,如此推下去。

Item属性则根据Index的值返回当前节点的第Index个子节点。

Count则表明属于此项的所有子节点的数量。

用MoveTo方法将Item由一个位置移到另一个位置。

  Expanded属性表明是否所有的子项都全部展开(包括子项的子项),为True表示全部展开。

IsVisible属性表明一个项是否在树中能被看到,如果树全部展开那么这个Item是肯定可以被看到。

HasChildren属性表明一个项是否有子项。

GetFirstChild,GetLastChild,GetPrevChild,andGetNextChild分别返回当前项子项的第一个、最后一个和前一个、后一个项。

GetNextSiblingandGetPrevSibling则返回在同一Level下的下一个和上一个项。

GetNextVisibleandGetPrevVisible则返回能看得到的下一个和上一个项。

如果一个节点有Parent,则HasAsParent方法返回True.Parent为当前项的父项。

Focused属性确定焦点是否落在此节点上,被Focus时会一个标准的方框围住。

很显然,只有一个节点会被聚焦。

Selected属性表明一个节点是否被选中,同样只有一个节点会被选中。

DropTarget属性表明节点在拖动操作中是源还是目标。

.1.添加、删除、修改节点:

静态的方法可以在设计时通过Items的编辑器设置各节点的内容。

在添加和删除前必须保证有节点被选中(Treeview.Selected=nil)

用AddFirst,AddFirstChild,AddChild等先添加根节点,如Treeview.Items.AddFirst(nil,‘Root‘);

然后以此为基础,添加此项的子节点。

删除节点

Treeview.Selected.Delete

编辑节点内容

Treeview.Selected.EditText

注意:

由于根节点没有父节点(TTreeNode.Parent=nil)

此外,在大批量添加数据到Treeview中时最好使用

  TreeView.Items.BeginUpdate;

  添加节点

  TreeView.Items.EndUpdate

这样能加快显示速度。

2.在节点上添加图象

Treeview中几个与图象相关的属性:

  SelectedIndex:

当节点被选中时在TimageList中选什么样的图象

  OverlayIndex:

选那副图象作为掩图(一幅图象透明地显示在另一幅图象的前面),比如一个节点不可用时加一副X图象在其前面。

  ImageIndex:

在常态时选用的图的序号

  StateIndex:

在StateImages这个ImageList中对应的序号,-1时不显示图象

  比较典型的,象在文件管理器中的所显示的一样,Treeview控件在节点之前也可以显示图象。

在Form中放置一ImageList控件,加入几个图片,分别被Index为0,1,…在Treeview的Image属性项填入你所加入的ImageList的控件名称。

TreeNode的ImageIndex表示节点未被选中时(Selected=nil)的图片序号,SelectedIndex表示节点被选中时图片序号。

////////////////////////////////////////////////////////////////

delphi下treeview控件基于节点编号的访问

有时我们需要保存和重建treeview控件,本文提供一种方法,通过以树结构节点的编号访问树结构,该控件主要提供的方法如下:

functionGetGlobeNumCode(inNode:

TTreeNode):

String;

功能:

返回当前节点的编号,编号规则见源码内说明。

functionLocatOrGenerateNode(inNumCode:

String):

TTreeNode;

功能:

以编号返回节点,假如节点的父节点和它的前继兄弟节点不存在,该方法会创建它们,名称为‘Temp‘,当然假如已经存在,就不执行创建工作。

通过以上两个函数,这样我们就可以不加限制的创建和访问节点。

该控件在我以前开发的,现在提供给大家做一个参考,希望能对你有帮助。

源码:

//***********************************************

//

//用于实现对TreeView控件的树结构的保存和重建

//编写该控件主要用于实现对行政文件等具有树的层次结构的对象

//实现保存和显示

//节点编号规则:

//+*****->1

//+*****->1.1

//+*****->1.1.1

//+*****->1.2

//作者:

Jack

//最后修改日期:

2002-12-24

//

//**********************************************

unitCtrlTree;

interface

uses

Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,

ComCtrls;

type

TCtrlTree=class(TTreeView)

private

{Privatedeclarations}

functionGetPosAtBound(inString:

String;inStart:

Integer):

Integer;

functionGetTheLastPointPos(inString:

String):

Integer;

protected

{Protecteddeclarations}

public

{Publicdeclarations}

functionGetNumInSameLevel(inNode:

TTreeNode):

Integer;

functionGetGlobeNumCode(inNode:

TTreeNode):

String;

functionGetParent(inNumCode:

String):

TTreeNode;

functionLocateNodeInLevel(parNode:

TTReeNode;LevelCode:

integer):

TTReeNode;

published

{Publisheddeclarations}

functionLocatOrGenerateNode(inNumCode:

String):

TTreeNode;

functionInsertAsFinalChild(inString:

String;inNode:

TTreeNode):

TTReeNode;

functionInsertAsPreviousSibling(inString:

String;inNode:

TTreeNode):

TTReeNode;

end;

procedureRegister;

implementation

procedureRegister;

begin

RegisterComponents(‘Standard‘,[TCtrlTree]);

end;

{TCtrTree}

functionTCtrlTree.GetNumInSameLevel(inNode:

TTreeNode):

integer;

{功能:

产生已存在节点在兄弟节点层中对应的编号,从1起编

入口参数:

inCode:

TTreeNode节点

返回:

同层编号

}

var

i:

integer;

tmp:

TTreeNode;

begin

i:

=0;

tmp:

=inNode;

whiletmp<>nildo

begin

tmp:

=tmp.getPrevSibling;

i:

=i+1;

end;

Result:

=i;

end;

functionTCtrlTree.GetGlobeNumCode(inNode:

TTreeNode):

string;

{功能:

产生已存在节点对应的全局编号

入口参数:

inCode:

TTreeNode节点

返回:

全局编号

}

var

nocode:

string;

tmp:

TTreeNode;

begin

tmp:

=inNode;

nocode:

=IntToStr(GetNumInSameLevel(tmp));

whiletmp.Level<>0do

begin

tmp:

=tmp.Parent;

nocode:

=inttostr(GetNumInSameLevel(tmp))+‘.‘+nocode;

end;

Result:

=nocode;

end;

functionTCtrlTree.LocatOrGenerateNode(inNumCode:

String):

TTreeNode;

{功能:

根据提供的全局编号进行定位,如路径不全,则创建路径

在定位过程产生的节点的Text为Temp

最终返回对应于全局编号的子节点

入口参数:

inNumCode:

String为全局编号

返回:

全局编号对应的字节点

}

var

i,j:

Cardinal;

NumInLevel:

integer;

tmp:

TTreeNode;

par:

TTreeNode;

begin

tmp:

=nil;

i:

=1;

whilei<=StrLen(PChar(inNumCode))do

begin

//得到下一个点号的开始位

j:

=GetPosAtBound(inNumCode,i);

//得到在兄弟节点中的排行数

NumInLevel:

=StrToInt(Copy(inNumCode,i,j-i+1));

//定位父节点

par:

=GetParent(Copy(inNumCode,1,j));

//得到对应的节点

tmp:

=LocateNodeInLevel(par,numInLevel);

i:

=j+2;

end;

Result:

=tmp;

end;

functionTCtrlTree.GetParent(inNumCode:

String):

TTreeNode;

{功能:

根据提供的全局编号找到对应的父节点

如果是第一层的节点,则父节点为nil

入口参数:

inNumCode:

String为全局编号

返回:

全局编号对应的父节点

}

var

GoStep:

integer;

i:

integer;

j:

integer;

k:

integer;

SearChInNode:

TTReeNode;

ReturnNode:

TTReeNode;

begin

//是第一层节点,返回nil;

k:

=GetTheLastPointPos(inNumCode);

ifk=0then

begin

Result:

=nil;

Exit;

end;

//是第二层或第二层以上节点

i:

=1;

SearchInNode:

=Items.GetFirstNode;

whilei

begin

j:

=GetPosAtBound(inNumCode,i);

GoStep:

=StrToInt(Copy(inNumCode,i,j-i+1));

ifi=1then//在第一层节点中搜索

begin

ReturnNode:

=SearchInNode;

fork:

=1toGoStep-1do

ReturnNode:

=ReturnNode.getNextSibling;

end

else//在第二层或第二层以上节点中搜索

begin

GoStep:

=StrToInt(Copy(inNumCode,i,j-i+1));

ReturnNode:

=SearchInNode.Item[GoStep-1];

end;

SearchInNode:

=ReturnNode;

i:

=j+2

end;

Result:

=SearchInNode;

end;

functionTCtrlTree.LocateNodeInLevel(parNode:

TTReeNode;LevelCode:

integer):

TTReeNode;

{功能:

根据父节点以及在兄弟节点中的编号找到对应的节点

如果要创建兄弟及自己,则新创建的节点的Text为Temp

入口参数:

parNode:

TTReeNode为父节点

LevelCode:

integer为编号

返回:

在parNode中编号为LevelCode的孩子节点

}

var

i:

integer;

j:

integer;

tmp:

TTreeNode;

tmps:

TTreeNode;

begin

//父节点为空,是第一层节点

tmp:

=nil;

ifparNode=nilthen

begin

i:

=1;

tmps:

=Items.GetFirstNode;

while(tmps<>nil)and(i<=LevelCode)do

begin

tmp:

=tmps;

tmps:

=tmps.getNextSibling;

i:

=i+1;

end;

i:

=i-1;

forj:

=1toLevelCode-ido

tmp:

=Items.AddChild(nil,‘Temp‘);

Result:

=tmp;

end

else//父节点不为空,正常处理

begin

ifparNode.Countfori:

=1toLevelCode-parNode.Countdo

Items.AddChild(parNode,‘Temp‘);

Result:

=parNode.Item[LevelCode-1];

end;

end;

functionTCtrlTree.GetPosAtBound(inString:

String;inStart:

Integer):

Integer;

{功能:

根据起始位置找到下一个‘.‘的前一个位置

入口参数:

inString:

String节点编号

inStart:

Integer当前处理层次的起始位置

返回:

当前处理层次的结束位置

}

var

tmp:

Char;

pos:

integer;

begin

pos:

=inStart+1;

whilepos<=Integer(StrLen(PChar(inString)))do

begin

tmp:

=inString[pos];

iftmp=‘.‘then

Break

else

pos:

=pos+1;

end;

Result:

=pos-1;

end;

functionTCtrlTree.GetTheLastPointPos(inString:

String):

Integer;

{功能:

找到编号中最后的‘.‘的位置

入口参数:

inString:

String为节点编号

返回:

节点编号中最后的‘.‘的位置

}

var

tmp:

Char;

pos:

integer;

begin

pos:

=Integer(StrLen(PChar(inString)));

whilepos>=1do

begin

tmp:

=inString[pos];

iftmp=‘.‘then

Break

else

pos:

=pos-1;

end;

Result:

=pos;

end;

functionTCtrlTree.InsertAsFinalChild(inString:

String;inNode:

TTreeNode):

TTReeNode;

{功能:

为当前节点插入一个孩子节点,位置为最后

入口参数:

inString:

String为节点编号为待插入节点的字符串

inNode:

TTreeNode,当前节点

}

begin

Result:

=Items.AddChild(inNode,inString);

end;

functionTCtrlTree.InsertAsPreviousSibling(inString:

String;

inNode:

TTreeNode):

TTReeNode;

{功能:

为当前节点插入一个前导的兄弟节点

入口参数:

inString:

String为节点编号为待插入节点的字符串

inNode:

TTreeNode,当前节点

}

begin

Result:

=Items.AddChildFirst(inNode,inString);end;end.

////////////////////////////////////////////////////////////////

delphi中treeview图标

ifTreeView.Items[i].parent=nilthen

begin

TreeView.Items[i].ImageIndex:

=0;

end;

ifTreeView.Items[i].Text=‘退出‘then

begin

TreeView.Items[i].ImageIndex:

=3;

end;

通过这种方式,设几种图标都行

////////////////////////////////////////////////////////////////

在Delphi6IDE中,最显眼的新功能可能就是ObjectTreeView了。

由于Delphi6比较新,介绍它的资料还很少,所以很多人不知道如何使用ObjectTreeView,甚至嫌它太占地方而将它关闭了。

事实上,当窗体上的构件越来越多的时候,你才会发现ObjectTreeView的强大功能。

以下是关于ObjectTreeView功能的一个简单介绍,其主要内容取

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1