请问如何让程序运行的时候隐藏,然后通过热键来打开程序界面????(10分)

  • 主题发起人 主题发起人 suyude
  • 开始时间 开始时间
S

suyude

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何让程序运行的时候隐藏,然后通过热键来打开程序界面????

小弟没多少分了,请大家帮帮忙!!
 
unit Unit_Top;

interface

uses
; Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
; StdCtrls, Buttons, ExtCtrls,Clipbrd, Menus,ShellApi;

const WM_TrayIcon=WM_User+1;

type
; TFrm_Top = class(TForm)
; ; mem_top: TMemo;
; ; pnl_top: TPanel;
; ; bbtn_Copy: TBitBtn;
; ; pm_top: TPopupMenu;
; ; pmi_Exit: TMenuItem;
; ; mmi_Restore: TMenuItem;
; ; procedure mem_topKeyDown(Sender: TObject; var Key: Word;
; ; ; Shift: TShiftState);
; ; procedure FormCreate(Sender: TObject);
; ; procedure pmi_ExitClick(Sender: TObject);
; ; procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
; ; procedure mmi_RestoreClick(Sender: TObject);
; private
; ; { Private declarations }
; ; procedure OnNotifyIcon(var Msg:Tmessage);message WM_TrayIcon;
; ; procedure WMHotkeyHandle(var Msg:TMessage);message WM_HOTKEY; //响应敏感键按键消息
; ; procedure WMSysCommand(var Msg:TMessage);message WM_SysCommand;
; public
; ; { Public declarations }
; end;

var
; Frm_Top: TFrm_Top;

implementation

{$R *.DFM}

var iData: TNotifyIconData;

; ; HotkeyId :Integer;

procedure TFrm_Top.WMSysCommand(var Msg:TMessage);
begin
; if Msg.WParam=SC_MINIMIZE then
; ; begin
; ; ; Application.Minimize;
; ; ; Frm_Top.Hide;
; ; end;
; inherited;
end;

procedure TFrm_Top.WMHotkeyHandle(var Msg:TMessage);
begin
; if (Msg.LParamHi=$41) and (msg.lparamLo=MOD_CONTROL or mod_Alt) then
; ; begin
; ; ; Msg.Result:=1; //该消息已经处理
; ; ; mmi_RestoreClick(Application);
; ; end;
end;

procedure TFrm_Top.mem_topKeyDown(Sender: TObject; var Key: Word;
; Shift: TShiftState);
begin
; if (ssCtrl in Shift) and (Key=13) then
; ; begin
; ; ; if mem_top.SelText='' then
; ; ; ; Clipboard.AsText:=mem_top.Text
; ; ; else
; ; ; ; Clipboard.AsText:=mem_top.SelText;
; ; ; Key:=0;
; ; end;
end;

procedure TFrm_Top.FormCreate(Sender: TObject);
begin
; iData.cbSize:=Sizeof(iData);
; iData.Wnd:=Frm_Top.Handle;
; iData.uID:=0;
; iData.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
; iData.uCallbackMessage:=WM_TrayIcon;
; iData.hIcon:=Application.Icon.Handle;
; iData.szTip:='asd';
; if Shell_NotifyIcon(NIM_ADD, @iData)=False then ShowMessage('NO');

; HotkeyId:=GlobalAddAtom(Pchar('UserDefineHotKey'))-$C000; //减去$C000是为了保证取值范围的限制
; RegisterHotkey(Handle,Hotkeyid,MOD_CONTROL or MOD_Alt, $41);//敏感键为ctrl+Alt+A
end;

procedure TFrm_Top.OnNotifyIcon(var Msg:Tmessage);
var Pos:Tpoint;
begin
; case Msg.LParam of
; ; WM_LBUTTONDBLCLK:
; ; ; mmi_RestoreClick(Application);
; ; WM_RBUTTONDOWN:
; ; ; begin
; ; ; ; GetCursorPos(Pos);
; ; ; ; pm_top.Popup (Pos.x,Pos.y);
; ; ; end;
; end;
end;

procedure TFrm_Top.pmi_ExitClick(Sender: TObject);
begin
; if Shell_NotifyIcon(NIM_DELETE, @iData)=False then ShowMessage('NO');
; UnRegisterhotkey(Handle,HotkeyId);
; DeleteAtom(HotKeyID);
; Application.Terminate;
end;

procedure TFrm_Top.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
// ;Application.Minimize;
// ;ShowWindow(Handle,SW_HIde);
; Frm_Top.Hide;
; CanClose:=False;
end;

procedure TFrm_Top.mmi_RestoreClick(Sender: TObject);
begin
// ;ShowWindow(Handle,SW_SHOW);
; Frm_Top.Show;
// ;Application.Restore;
; SetFocus;
end;

end.
 
以上是我很早以前写的一段程序,主要功能呢,是前端显示一个记事本,在任务栏右侧显示图标。
热键是Ctrl+Alt+A,能够激活,打叉关闭的时候,不是真正关闭,是缩小到任务栏,在任务栏上按右键选择退出才真正关闭。
程序需要一个Memo,直接放上就行了,panel也是直接放上的,按钮不用理睬,是为了拷贝memei中内容的。
剩下的是一个弹出菜单,供相应状态栏图标消息的,里面有两个项,一为恢复,即显示窗体,另一为退出。
 
上面的大哥,你有源程序吗?能寄一份给小弟研究吗?
 
忘记打e-mail了
nethackboy@21cn.com
 
application.showmainform
RegisterHotKey
 
兄弟呀!yzhshi兄贴出来的源码已经很全了!完全解决了你的问题了!
 
试试在窗体建立事件中改变将要隐藏的窗体visible属性设为false.
建立某热建的单击事件,再改变改窗体visible属性为true.本人
做过两窗体之间轮换运行时相互隐藏,就用此方法。
 
谢谢大家~虽然分是少了点~呵呵~
 
我这段代码有什么不对,为什么程序启动的时候还能看见窗体???

program Project1;

uses
; Forms,
; Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
; Application.Initialize;
; Application.CreateForm(TForm1, Form1);
; Application.ShowMainForm:=true;
; Application.Run;
end.
 
application.showmainform:=false
 
后退
顶部