[返回]
中国计算机报2001年第16期Delphi编程答疑
方世玉
我们在使用Delphi进行系统开发时,常常会遇到很多小而棘手的问题,如何解决这些问题,就成了大家最关心的事情。下面是利用Delphi进行系统开发的一些常见问题及解决方案,更多内容和源代码请见InfoCD第三期光盘。
问:如何让应用程序删除自身?
答:在应用程序刚要退出之前,我们创建一个Delself.bat文件,让它先删除应用程序,然后再删除自身即可。
我们在Form的OnClose事件中加入下列代码:
procedure TForm1.FormClose(SEnder: TObject; var Action: TCloseAction);
var
F : TextFile ;
{定义变量F}
Begin
AssignFile(F, 'delself.bat');
Rewrite(F);
{F为TextFile类型}
WriteLn(F,'del '+ExtractFileName(Application.ExeName));
WriteLn(F,'del %0');
CloseFile(F);
WinExec('delself.bat',SW_HIDE);
{执行批处理文件}
End;
问:如何把文件删除到回收站中?
答:我们可以利用ShellApi中的SHFileOperation进行删除,但需要给出文件的绝对路径名,否则文件可能不能恢复。
Procedure DelFile(FileName : String) ;
Var
T:TSHFileOpStruct;
P:String;
Begin
P:=FileName ;
With T do
Begin
Wnd:=0;
wFunc:=FO_DELETE;
pFrom:=Pchar(P);
fFlags:=FOF_ALLOWUNDO
End;
Try
SHFileOperation(T);
Except
End ;
End ;
问:如何隐藏桌面上的图标?
答:想使桌面上的图标消失,连桌面上的右键功能也不能使用吗?那就跟着下面的程序,动手试一下吧。别忘了,把图标隐藏了之后再显示出来。
Procedure HideDeskTop ;
//隐藏桌面图标
var
hDesktop : THandle;
Begin
hDesktop := FindWindow('Progman', nil);
ShowWindow(hDesktop, SW_HIDE);
End;
Procedure ShowDeskTop ;
//显示桌面图标
var
hDesktop : THandle;
Begin
hDesktop := FindWindow('Progman', nil);
ShowWindow(hDesktop, SW_SHOW);
End ;
问:如何屏蔽掉系统选单的关闭功能(Alt+F4)?
答:在一般的应用程序中,按Alt+F4或者在系统选单里选择关闭,就可以关闭当前的应用程序,如何屏蔽掉系统选单的关闭功能(Alt+F4)呢?方法很简单,就是当当前应用程序收到关闭消息时,把CanClose设为FALSE。在本程序中,设置一个全局变量bClose,用它来控制能否关闭当前应用程序,只有单击Button3时才可以关闭当前的应用程序。
procedure TForm1.FormCreate(SEnder: TObject);
Begin
bClose := False ;
End;
procedure TForm1.FormCloseQuery(SEnder: TObject; var CanClose: Boolean);
Begin
CanClose := bClose ;
End;
procedure TForm1.Button3Click(SEnder: TObject);
Begin
bClose := True ;
Close ;
End;
问:如何隐藏和显示Windows的任务条?
答: 当在系统开发中需要实现隐藏和显示 Windows任务条时,我们可以参照以下程序:
procedure hideTaskbar; //隐藏
var
wndHandle : THandle;
wndClass : array[0..50] of Char;
Begin
StrPCopy(@wndClass[0], 'Shell_TrayWnd');
wndHandle := FindWindow(@wndClass[0], nil);
ShowWindow(wndHandle, SW_HIDE);
End;
procedure showTaskbar; //显示
var
wndHandle : THandle;
wndClass : array[0..50] of Char;
Begin
StrPCopy(@wndClass[0], 'Shell_TrayWnd');
wndHandle := FindWindow(@wndClass[0], nil);
ShowWindow(wndHandle, SW_RESTORE);
End;