一个很菜的问题!! 需做一小程序:功能1,运行后自动隐藏!!功能2,可定时从一个目录拷贝指定文件到另一个目录。我刚刚接触delphi,那位哥哥姐姐帮帮俺,问题解决直接给分。一直在线!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在DPR文件里面加上一行: Application.CreateForm(TForm1, Form1); Application.ShowMainForm := False; Application.Run;然后在主表单上放一个Timer。,OnTimer代码如下:Copy('c:\xx\xxx\xxx.xx','d:\xxx\xxx\',False);就可以了,运行时不界面,定时拷贝文件Timer.Interval 属性是时间间隔,单位豪秒 copy这个命令怎么用呀,要引用一个什么东西呀,我找帮助怎么没有呀?? CopyFile('c:\xx\xxx\xxx.xx','d:\xxx\xxx\',False);要不然就变成拷贝字串了。 找各系统托盘控件,在正常情况下隐藏form,,我可以发个例子给你 假如你不仅想让应用程序隐藏窗体,同时不想让应用程序在任务栏上显示,可以使用如下命令: ShowWindow (Application.handle, SW_HIDE);如果要显示则ShowWindow( Application.Handle, SW_TRUE ); 对TMainForm加右下角小图标,在工程的 Application.CreateForm(TMainForm, MainForm);后调用。procedure TMainForm.AddIcon;begin with FIconData do begin cbSize := SizeOf(FIconData); Wnd := Self.Handle; uID := $8889; uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP; hIcon := Forms.Application.Icon.Handle; uCallbackMessage := WM_MIDASICON; StrCopy(szTip, PChar(Caption)); end;end; 至于把图标加到系统托盘,有两种办法,1.用VCL控件,VCL如著名的RxLib 2.75就提供可视化的系统图盘图标控件2.用API编程// 需要增加使用单元uses Tlhelp32;// 自定义鼠标点击图标时系统发出的消息const WM_MIDASICON = WM_USER + 1;// 在窗体类定义中增加消息处理及添加图标函数type xxx = class(xxx) // 系统是否为 NT 3.51 的话不支持系统托盘,要NT 4以上 NT351: Boolean; // 这是任务栏结束任务的消息,可以保证它意外关闭后发一个消息给程序知道 FTaskMessage: DWord; // 如果没装IE 4以上版本,上面的特性不支持,只好靠定时器来检查它是否重启 UpdateTimer: TTimer; // 保存当前任务栏句柄信息? FProgmanOpen: Boolean; // 系统托盘属性参数 FIconData: TNotifyIconData; // 添加图标 procedure AddIcon; // 处理图标上的鼠标点击消息 procedure WMMIDASIcon(var Message: TMessage); message WM_MIDASICON; // 要在程序默认消息处理中加入系统托盘的消息处理 procedure WndProc(var Message: TMessage); override; // 定时器触发 procedure UpdateTimerTimer(Sender: TObject); end;procedure TSocketForm.AddIcon;begin if not NT351 then begin with FIconData do begin cbSize := SizeOf(FIconData); Wnd := Self.Handle; // 程序句柄 uID := $DEDB; // 标识符,不重复 uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP; hIcon := Forms.Application.Icon.Handle; // 显示的图标句柄 uCallbackMessage := WM_MIDASICON; // 点击时发出的消息 StrCopy(szTip, PChar(Caption)); // 提示,鼠标移上去出现 end; Shell_NotifyIcon(NIM_Add, @FIconData); // 添加图标 end;end;procedure TSocketForm.WndProc(var Message: TMessage);begin // 如果是任务栏消失然后又出现了(出错了) if Message.Msg = FTaskMessage then begin // 重新添加图标 AddIcon; Refresh; end; // 继承默认消息处理方法 inherited WndProc(Message);end;procedure TSocketForm.WMMIDASIcon(var Message: TMessage);var pt: TPoint;begin case Message.LParam of WM_RBUTTONUP: // 鼠标右键 begin if not Visible then begin SetForegroundWindow(Handle); // 把窗体提到前台 GetCursorPos(pt); // 鼠标坐标 PopupMenu.Popup(pt.x, pt.y); // 弹出菜单,自己加到窗体里 end else SetForegroundWindow(Handle); end; WM_LBUTTONDBLCLK: // 鼠标左键 if Visible then SetForegroundWindow(Handle) else miPropertiesClick(nil); // 直接出发某个事件,可以自己随便定义 end;end;procedure TSocketForm.UpdateTimerTimer(Sender: TObject);var Found: Boolean;begin Found := FindWindow('Progman', nil) <> 0; // 获得任务栏句柄 if Found <> FProgmanOpen then // 如果与原来的不相同,说明任务栏重启了 begin FProgmanOpen := Found; // 刷新原有的 if Found then AddIcon; // 并添加图标 Refresh; end;end;// 程序初始化procedure TSocketForm.Create; function IE4Installed: Boolean; var RegKey: HKEY; begin Result := False; if RegOpenKey(HKEY_LOCAL_MACHINE, KEY_IE, RegKey) = ERROR_SUCCESS then try Result := RegQueryValueEx(RegKey, 'Version', nil, nil, nil, nil) = ERROR_SUCCESS; finally RegCloseKey(RegKey); end; end;begin // 检测操作系统版本 NT351 := (Win32MajorVersion <= 3) and (Win32Platform = VER_PLATFORM_WIN32_NT); // 添加托盘图标 AddIcon; // 如果安装了IE 4,向任务栏挂号……这主要是为了任务栏关闭后,图标丢失的问题,免得程序无法再激活,死在内存中 if IE4Installed then FTaskMessage := RegisterWindowMessage('TaskbarCreated') else // 否则用定时器 UpdateTimer.Enabled := True;end;写得好辛苦,自己看的都觉得混乱 附加,移除图标procedure RemoveIcon;Vvar IconData : TNotifyIconData;Bbegin with IconData do Begin cbSize := SizeOf(IconData); Wnd := Self.Handle; // 程序句柄 uID := $DEDB; // 标识符,不重复 uFlags := 0; end; Shell_NotifyIcon(nim_Delete,@IconData); // 移去图标end;个人意见,如果不是想为了学WinAPI的话,还是用VCL快,把控件往窗体上一拖,设定一下搞定。RxLib的控件叫RxTrayIcon,在RxTools中,至于RxLib,这么有名的东西就不用解释了吧 例子?Delphi不是自带了一个嘛?在\Delphi6\Source\VclScktSrvr.dpr 请问像金山arp防火墙那样的Tab控件有没?不好意思没分了! try--except异常处理问题 如何得到弹出窗体的内容? 请教:如何取道ACCESS数据库原始的字段类型和字段长度? Express QuantumGrid 原来版本中的 dxdbTree 新版本中那去了? 向各位高手请教代码 散分:求一个注册软件 数据库的浮点数据的显示问题 急、菜鸟要请教!!!(在线) 有没有TdbListView之类的控件?目的是针对数据表中的每一条记录产生一个图标 如何写DELPHI一个数据库程序的安装程序 ADO的鼠标指针问题
Application.CreateForm(TForm1, Form1);
Application.ShowMainForm := False;
Application.Run;然后在主表单上放一个Timer。,OnTimer代码如下:
Copy('c:\xx\xxx\xxx.xx','d:\xxx\xxx\',False);
就可以了,运行时不界面,定时拷贝文件
Timer.Interval 属性是时间间隔,单位豪秒
要不然就变成拷贝字串了。
Application.CreateForm(TMainForm, MainForm);
后调用。procedure TMainForm.AddIcon;
begin
with FIconData do
begin
cbSize := SizeOf(FIconData);
Wnd := Self.Handle;
uID := $8889;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
hIcon := Forms.Application.Icon.Handle;
uCallbackMessage := WM_MIDASICON;
StrCopy(szTip, PChar(Caption));
end;
end;
uses
Tlhelp32;// 自定义鼠标点击图标时系统发出的消息
const
WM_MIDASICON = WM_USER + 1;// 在窗体类定义中增加消息处理及添加图标函数
type
xxx = class(xxx)
// 系统是否为 NT 3.51 的话不支持系统托盘,要NT 4以上
NT351: Boolean;
// 这是任务栏结束任务的消息,可以保证它意外关闭后发一个消息给程序知道
FTaskMessage: DWord;
// 如果没装IE 4以上版本,上面的特性不支持,只好靠定时器来检查它是否重启
UpdateTimer: TTimer;
// 保存当前任务栏句柄信息?
FProgmanOpen: Boolean;
// 系统托盘属性参数
FIconData: TNotifyIconData;
// 添加图标
procedure AddIcon;
// 处理图标上的鼠标点击消息
procedure WMMIDASIcon(var Message: TMessage); message WM_MIDASICON;
// 要在程序默认消息处理中加入系统托盘的消息处理
procedure WndProc(var Message: TMessage); override;
// 定时器触发
procedure UpdateTimerTimer(Sender: TObject);
end;procedure TSocketForm.AddIcon;
begin
if not NT351 then
begin
with FIconData do
begin
cbSize := SizeOf(FIconData);
Wnd := Self.Handle; // 程序句柄
uID := $DEDB; // 标识符,不重复
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
hIcon := Forms.Application.Icon.Handle; // 显示的图标句柄
uCallbackMessage := WM_MIDASICON; // 点击时发出的消息
StrCopy(szTip, PChar(Caption)); // 提示,鼠标移上去出现
end;
Shell_NotifyIcon(NIM_Add, @FIconData); // 添加图标
end;
end;procedure TSocketForm.WndProc(var Message: TMessage);
begin
// 如果是任务栏消失然后又出现了(出错了)
if Message.Msg = FTaskMessage then
begin
// 重新添加图标
AddIcon;
Refresh;
end;
// 继承默认消息处理方法
inherited WndProc(Message);
end;procedure TSocketForm.WMMIDASIcon(var Message: TMessage);
var
pt: TPoint;
begin
case Message.LParam of
WM_RBUTTONUP: // 鼠标右键
begin
if not Visible then
begin
SetForegroundWindow(Handle); // 把窗体提到前台
GetCursorPos(pt); // 鼠标坐标
PopupMenu.Popup(pt.x, pt.y); // 弹出菜单,自己加到窗体里
end else
SetForegroundWindow(Handle);
end;
WM_LBUTTONDBLCLK: // 鼠标左键
if Visible then
SetForegroundWindow(Handle) else
miPropertiesClick(nil); // 直接出发某个事件,可以自己随便定义
end;
end;procedure TSocketForm.UpdateTimerTimer(Sender: TObject);
var
Found: Boolean;
begin
Found := FindWindow('Progman', nil) <> 0; // 获得任务栏句柄
if Found <> FProgmanOpen then // 如果与原来的不相同,说明任务栏重启了
begin
FProgmanOpen := Found; // 刷新原有的
if Found then AddIcon; // 并添加图标
Refresh;
end;
end;// 程序初始化
procedure TSocketForm.Create; function IE4Installed: Boolean;
var
RegKey: HKEY;
begin
Result := False;
if RegOpenKey(HKEY_LOCAL_MACHINE, KEY_IE, RegKey) = ERROR_SUCCESS then
try
Result := RegQueryValueEx(RegKey, 'Version', nil, nil, nil, nil) = ERROR_SUCCESS;
finally
RegCloseKey(RegKey);
end;
end;begin
// 检测操作系统版本
NT351 := (Win32MajorVersion <= 3) and (Win32Platform = VER_PLATFORM_WIN32_NT);
// 添加托盘图标
AddIcon;
// 如果安装了IE 4,向任务栏挂号……这主要是为了任务栏关闭后,图标丢失的问题,免得程序无法再激活,死在内存中
if IE4Installed then
FTaskMessage := RegisterWindowMessage('TaskbarCreated')
else
// 否则用定时器
UpdateTimer.Enabled := True;
end;写得好辛苦,自己看的都觉得混乱
Vvar
IconData : TNotifyIconData;
Bbegin
with IconData do Begin
cbSize := SizeOf(IconData);
Wnd := Self.Handle; // 程序句柄
uID := $DEDB; // 标识符,不重复
uFlags := 0;
end;
Shell_NotifyIcon(nim_Delete,@IconData); // 移去图标
end;个人意见,如果不是想为了学WinAPI的话,还是用VCL快,把控件往窗体上一拖,设定一下搞定。RxLib的控件叫RxTrayIcon,在RxTools中,至于RxLib,这么有名的东西就不用解释了吧