Delphi 2010透過Tray物件,縮小到system 工作列後如何切換回來問題 |
缺席
|
u8923538
一般會員 ![]() ![]() 發表:7 回覆:2 積分:1 註冊:2010-12-26 發送簡訊給我 |
各位前輩好:
想請教,我自己寫一個簡單的程式,想透過TrayIcon這個物件,將程式可以縮到系統工作列 這部分已經OK,不過若要判斷程式重複執行,若有則切換到這個程式的主視窗,並且將視窗移到桌面的最上層,就會無法成功。 貼上自己亂寫的CODE還請前輩給予一些指導。 http://www.tek-tips.com/viewthread.cfm?qid=1154022&page=101 [code delphi] program Menu4WebLink; uses Forms, Windows, Unit1 in 'Unit1.pas' { Form1 } , {$R *.res} var Mutex: THandle; hw: HWND; begin Mutex := CreateMutex(nil, True, 'Menu4WebLink'); if (Mutex = 0) OR (GetLastError = ERROR_ALREADY_EXISTS) then begin // code to searh for, and activate // the previous (first) instance // MessageBox(0, '程式執行中', '警告', mb_iconhand); hw := FindWindow(nil, Pchar('Menu4WebLink')); // ForceForegroundWindow(Application - > MainForm - > Handle); SetActiveWindow(hw); SetForegroundWindow(hw); // 設定焦點 BringWindowToTop(hw); ShowWindow(hw, SW_SHOWNORMAL); SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0, SPIF_SENDCHANGE); // ShowWindow(hw, SW_MAXIMIZE); keybd_event(Ord(#1), 0, 0, 0); keybd_event(Ord(#1), 0, KEYEVENTF_KEYUP, 0); Application.NormalizeAllTopMosts; Application.Terminate; end else begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end; [/code] |
cancer
高階會員 ![]() ![]() ![]() ![]() 發表:58 回覆:319 積分:190 註冊:2004-07-31 發送簡訊給我 |
|
zhweizw
一般會員 ![]() ![]() 發表:7 回覆:16 積分:9 註冊:2008-01-12 發送簡訊給我 |
其实你可以不使用api函数,使用delphi 2010 自带一个TrayIcon物件即可满足你的要求。
[code delphi] program Server; uses Windows, Messages, Forms, UntMain in 'UntMain.pas' { Form1 } , {$R *.res} const SHOW_R = 1; WM_USERMSG=10020; var MainForm: HWND; begin MainForm := FindWindow('TForm1', PChar(‘form标题’)); if MainForm > 0 then begin PostMessage(MainForm, WM_USERMSG, SHOW_R, 0); Exit; end; Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end.[/code] [code delphi] procedure TForm1.WndProc(var Msg: TMessage); begin if (Msg.Msg = WM_SYSCOMMAND) and ((Msg.WParam = SC_CLOSE) or (Msg.WParam = SC_MINIMIZE)) then begin Msg.Msg := 0; hide; end; inherited; end; [/code] [code delphi] procedure TForm1.WMUSERMSG(var Msg: TMessage); begin if Msg.Msg = WM_USERMSG then begin case Msg.WParam of SHOW_R: Visible := True; end; end; end;[/code] ===================引 用 u8923538 文 章=================== 各位前輩好: 想請教,我自己寫一個簡單的程式,想透過TrayIcon這個物件,將程式可以縮到系統工作列 這部分已經OK,不過若要判斷程式重複執行,若有則切換到這個程式的主視窗,並且將視窗移到桌面的最上層,就會無法成功。 貼上自己亂寫的CODE還請前輩給予一些指導。 http://www.tek-tips.com/viewthread.cfm?qid=1154022&page=101 [code delphi] program Menu4WebLink; uses Forms, Windows, Unit1 in 'Unit1.pas' { Form1 } , {$R *.res} var Mutex: THandle; hw: HWND; begin Mutex := CreateMutex(nil, True, 'Menu4WebLink'); if (Mutex = 0) OR (GetLastError = ERROR_ALREADY_EXISTS) then begin // code to searh for, and activate // the previous (first) instance // MessageBox(0, '程式執行中', '警告', mb_iconhand); hw := FindWindow(nil, Pchar('Menu4WebLink')); // ForceForegroundWindow(Application - > MainForm - > Handle); SetActiveWindow(hw); SetForegroundWindow(hw); // 設定焦點 BringWindowToTop(hw); ShowWindow(hw, SW_SHOWNORMAL); SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0, SPIF_SENDCHANGE); // ShowWindow(hw, SW_MAXIMIZE); keybd_event(Ord(#1), 0, 0, 0); keybd_event(Ord(#1), 0, KEYEVENTF_KEYUP, 0); Application.NormalizeAllTopMosts; Application.Terminate; end else begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end; [/code] |
smallfox
高階會員 ![]() ![]() ![]() ![]() 發表:2 回覆:113 積分:128 註冊:2003-02-19 發送簡訊給我 |
利用 TTrayIcon 縮小程式至系統列後再回復正常大小, 我的寫法如下, 只是我是寫在 O n C l i c k 事件中,
給你參考自行應用修改: procedure TForm1.TrayIcon1Click(Sender: TObject); begin TrayIcon1.Visible:=False; if (not Application.MainForm.Showing) then Application.MainForm.Show; Application.Restore; Application.BringToFront; Application.MainForm.SetFocus; end; |
james2mac
一般會員 ![]() ![]() 發表:11 回覆:11 積分:4 註冊:2008-02-01 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |