線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2119
推到 Plurk!
推到 Facebook!

站長請問如何用程式將已最小化的視窗還原?

 
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-07-22 09:26:43 IP:192.168.xxx.xxx 未訂閱
站長最近寫的聊天程式有一個功能就是當討論室的TForm最小化且有訊息來時,會有一段提醒的音樂,但我希望也能順帶將TForm還原(或是最大化),一直不得其法? 試過: Form1.windowstate:=wsMaximized; 或是 Form1.SetFocus; 都不行 可能要用WinApi? 謝謝各位指導! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-07-22 09:35:03 IP:61.219.xxx.xxx 未訂閱
我會用
  form1.WindowState := wsNormal;
  form1.BringToFront;
可以試試 Scroll之問題, 是須要Invalidate, 只是時機問題, 我會再試試.
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-07-22 10:47:51 IP:203.217.xxx.xxx 未訂閱
Scroll之問題主要須在AfterScroll之後Invalidate, 由於ListView無此Event, 故只好攔截Scroll之message 另加一unit如下
...
type
  TListView=class(ComCtrls.TListView)
    procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
    procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
  end;    implementation
procedure TListView.WMHScroll(var Message: TWMHScroll);
begin
  inherited;
  invalidate;
end;    procedure TListView.WMVScroll(var Message: TWMVScroll);
begin
  inherited;
  invalidate;
end;
所有用到ListView之unit應於ComCtrl之後uses 此unit 如此可解決問題, 但由於繪兩次, 畫面會稍微閃動.
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-07-22 11:43:32 IP:192.168.xxx.xxx 未訂閱
引言: 我會用
  form1.WindowState := wsNormal;
  form1.BringToFront;
可以試試
謝謝ccchen兄的解答,我試過真的可以, 但有一演生的問題, Form經過BringToFront之後就無法由User自行最小化了! 請問該如何處理! 謝謝指導! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-07-22 12:04:25 IP:192.168.xxx.xxx 未訂閱
引言: Scroll之問題主要須在AfterScroll之後Invalidate, 由於ListView無此Event, 故只好攔截Scroll之message 另加一unit如下
...
type
  TListView=class(ComCtrls.TListView)
    procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
    procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
  end;    implementation
procedure TListView.WMHScroll(var Message: TWMHScroll);
begin
  inherited;
  invalidate;
end;    procedure TListView.WMVScroll(var Message: TWMVScroll);
begin
  inherited;
  invalidate;
end;
所有用到ListView之unit應於ComCtrl之後uses 此unit 如此可解決問題, 但由於繪兩次, 畫面會稍微閃動.
非常感謝ccchen兄的回覆,照您說的方式以可以解決的! 剩下閃動的問題是否有解呢? PC ANY Where v 1.0 也有用到ListView也有背景圖也一樣會閃動, 但我在想有沒有辦法讓原TListView的Scroll的自動Draw關掉? 謝謝指導! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-07-22 13:10:02 IP:61.219.xxx.xxx 未訂閱
應該用 SendMessage(application.Handle, WM_SYSCOMMAND,SC_RESTORE,0); [說明] 抱歉, 我總是忘了我們在談TaskBar, 因我通常都是處理MDI, bringtofront很理想 Delphi永遠有一看不見的Window--"Application", 以符合Miscrosoft window之要求, 當在TaskBar上時, click或任何SYSCOMMAND均是送給此Window, 而不是原來Active之Window, 故模擬此動作應如上
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-07-22 15:55:19 IP:192.168.xxx.xxx 未訂閱
引言: 應該用 SendMessage(application.Handle, WM_SYSCOMMAND,SC_RESTORE,0); [說明] 抱歉, 我總是忘了我們在談TaskBar, 因我通常都是處理MDI, bringtofront很理想 Delphi永遠有一看不見的Window--"Application", 以符合Miscrosoft window之要求, 當在TaskBar上時, click或任何SYSCOMMAND均是送給此Window, 而不是原來Active之Window, 故模擬此動作應如上
謝謝已完全解決!ccchen兄真沒話說! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
系統時間:2024-05-15 5:39:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!