delphi扩展1.docx
- 文档编号:4084906
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:127
- 大小:80.49KB
delphi扩展1.docx
《delphi扩展1.docx》由会员分享,可在线阅读,更多相关《delphi扩展1.docx(127页珍藏版)》请在冰豆网上搜索。
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功能的一个简单介绍,其主要内容取
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- delphi 扩展
![提示](https://static.bdocx.com/images/bang_tan.gif)