发信人: lofe ()感激生活(), 信区: BorlandDev
标 题: 检测磁盘是否变化 (转载)
发信站: 哈工大紫丁香 (2000年09月01日18:52:47 星期五), 站内信件
【 以下文字转载自 VisualProgram 讨论区 】
【 原文由 alias 所发表 】
以简单地运用下面的函数来返 回磁盘的volume系列号码GetDiskVolSerialID('E'),
函数代码如下:
function GetDiskVolSerialID(cDriveName:char):DWord;
var
dwTemp1,dwTemp2:DWord;
begin
GetVolumeInformation(PChar(cDriveName+':l'), Nil,0,Result, dwTemp2,dwTemp2,Nil
,0);
end;
鼠标击了哪一个对象
在Win95中,鼠标的右键起到了很大的作用,但是,由于历史的原因,对于右键的
使用即使在Delphi中,也还不够有效,下面的程序可以告诉你如何知道刚才鼠标右击
的对象名称。首先建立一个popmenu,然后以下的代码就可以告诉你刚才右击的对象名
称:
PopupMenu1.PopupComponent.ClassName
控制INI文件
要利用.INI文件做程序有关数据的存储工作,就需要能读和写.INI文件,所以列了如
下方法给大家参考:
从.INI文件中获取字符串
var
strResult:pchar;
begin
GetPrivateProfileString(
'windows', // []中标题的名字
'NullPort', // =号前的名字
'NIL', // 如果没有找到字符串时,返回的默认值
strResult, //存放取得字符
100, //取得字符的允许最大长度
'c:\forwin95\win.ini' // 调用的文件名
);
edit1.text:=strResult; //显示取得字符串
从.INI文件中获取整数
edit1.text:=inttostr(GetPrivateProfileInt(
'intl', // []中标题的名字
'iCountry', // =号前的名字
0,// 如果没有找到整数时,返回的默认值
'c:\forwin95\win.ini' // 调用的文件名
));
向.INI文件写入字符串
WritePrivateProfileString(
'windows', // []中标题的名字
'load', // 要写入“=”号前的字符串
'accca', //要写入的数据
'c:\forwin95\win.ini' // 调用的文件名
);
向.INI文件写入整数
WritePrivateProfileSection(
'windows', // []中标题的名字
'read=100', // 要写入的数据
'c:\forwin95\win.ini' // 调用的文件名
);
防止Win95显示严重错误
不管你的程序如何反复调试,交给用户之后,总有可能发生你意想不到的错误,
如何避免Win95显示出白色的窗口,告诉你的用户发生了难堪的意外错误呢?我们可以
这样做:
var
wOldErrorMode:Word;
begin
wOldErrorMode:=SetErrorMode(SEM_FAILCRITICALERRORS);
try
finally
SetErrorMode(wOldErrorMode);
end;
end;
状态条插入可视控件
首先,在FROM中放置一个状态条控件Status。调节Status.Panels,在其中插入3个
状态条嵌板。把第二个嵌板的参数Style设置成psOwnerDraw。这一点很重要,如果没
有这样做,将永远无法显示文字以外的东西。然后在状态条的OnDrawPanel事件中插入
一行StatusDrawRect:=rect;以记录参数Style设置成psOwnerDraw的嵌板的坐标。
第二步,在FROM的Private中申明一个TProgressBar类型的变量Progress。然后在
一个菜单的消息响应过程中调用Create方法把它建立起来,再设定状态条为该进程条
的父窗口,进而设定进程条的一些必要参数。例如:最大值、最小值、原点坐标、高
度和宽度等。
最后编译一下该程序,你就会发现在状态条中被插入了一个运动着的进程条。
类似地,你还可以在状态条中插入其他可视控件,如:按键、位图和动画控件等
等。
以下是范例程序:
type
TForm1 = class(TForm)//定义一个窗口类
Status: TStatusBar;
MainMenu1: TMainMenu;
file1: TMenuItem;
insertprocressbar1: TMenuItem;
N1: TMenuItem;
exit1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure StatusDrawPanel(StatusBar: TStatusBar; Panel:
TStatusPanel;const Rect: TRect);
procedure FormDestroy(Sender: TObject);
procedure exit1Click(Sender: TObject);
procedure insertprocressbar1Click(Sender: TObject);
private
colorindex : integer; BookOpen:Boolean;
ssbmp:Tbitmap; progress:TProgressbar;
StatusDrawRect:TRect; //记录要插入状态条特技的坐标范围
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
procedure TForm1.StatusDrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
StatusDrawRect:=rect; //记录要实现状态条特技的坐标范围
end;
procedure TForm1.exit1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.insertprocressbar1Click(Sender: TObject);
var i,count:integer;
staPanleWidth:integer;
begin
progress:=TProgressbar.create(form1);
count:=3000; //进程条的最大值
staPanleWidth:=status.Panels.Items[2].width;
//由于进程条的很宽,所以需要改变状态条嵌板的宽度,这里先保存它的宽度。
status.Panels.Items[2].width:=150; // 改变宽度
status.repaint;
with progress do
begin
top:=StatusDrawRect.top;
left:=StatusDrawRect.left;
width:=StatusDrawRect.right-StatusDrawRect.left;
height:=StatusDrawRect.bottom-StatusDrawRect.top;
//设定进程条的宽度和高度
visible:=true;
try
Parent := status; //该进程条的拥有者为状态条status
Min := 0; Max := Count; //进程条的最大和最小值
Step := 1; //进程条的步长
for i := 1 to Count do
Stepit; // 累加进程条
ShowMessage('现在,进程条将要从内存中被释放');
finally
Free; //释放进程条
end; //try
end; //with
status.Panels.Items[2].width:=staPanleWidth; //恢复状态条嵌板的宽度
end; //begin
end.
临时路径
有时需要Windows的临时路径来做备份等工作,那么就要知道路径在哪,下面的程序帮
你忙:
var aa:pchar;
begin
GetTempPath(20,aa); //返回路径名
edit1.text:=aa;
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: mig.bbs@smth.org]
--
※ 转载:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: club.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.854毫秒