請教 ShowMessage 加強功能 |
答題得分者是:wameng
|
cwc65536
初階會員 發表:47 回覆:121 積分:48 註冊:2004-10-14 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
因為ShowMessage是屬於Modal視窗,你要的是Modaless視窗!
製作一個 class="code">
var
aForm:TForm;
aForm := MyForm.Create;
aForm.MessageLable.Caption := '資料處理中...';
aForm.Show;
.......//處理你的事情 aForm.Free; //關掉視窗
-----------------------------------------------
Creation is the fundation of promotion.
|
cwc65536
初階會員 發表:47 回覆:121 積分:48 註冊:2004-10-14 發送簡訊給我 |
引言: 因為ShowMessage是屬於Modal視窗,你要的是Modaless視窗! 製作一個 class="code"> var aForm:TForm; aForm := MyForm.Create; aForm.MessageLable.Caption := '資料處理中...'; aForm.Show; .......//處理你的事情 aForm.Free; //關掉視窗 ----------------------------------------------- Creation is the fundation of promotion.可以寫詳細一些嗎 ? Sorry 我是新手 ! > |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
引言: 因為ShowMessage是屬於Modal視窗,你要的是Modaless視窗! 製作一個 class="code"> var aForm:TForm; aForm := MyForm.Create(nil); // sorry...打太快,改一下! aForm.MessageLable.Caption := '資料處理中...'; aForm.Show; .......//處理你的事情 aForm.Free; //關掉視窗 ----------------------------------------------- Creation is the fundation of promotion.1. aForm := MyForm.Create(nil); // sorry...打太快,改一下! 2. MessageLabel是我假設的Label元件名稱,要以你在設計時放在MyForm上的label元件名稱為主。 ----------------------------------------------- Creation is the fundation of promotion. 發表人 - stallion 於 2005/06/23 23:00:01 |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
事實上,可以用 THintWindow 。無須另外在建立 TForm
var NoWaitHint : THintWindow; Procedure ShowHintMsg(AHint:String); var PtRect :TRect; begin if Not Assigned(NoWaitHint) then NoWaitHint := THintWindow.Create(nil); With NoWaitHint do begin { 視窗置中處理 } PtRect := CalcHintRect(Screen.Width,AHint,Nil); PtRect.TopLeft := Point((Screen.Width - PtRect.Right) shr 1 ,(Screen.Height - PtRect.Bottom) shr 1); PtRect.BottomRight := Point(PtRect.Left PtRect.Right,PtRect.Top PtRect.Bottom); { 顯示 } ActivateHint(PtRect,AHint); Repaint; end; end; Procedure CloseHintMsg; begin if Assigned(NoWaitHint) then begin NoWaitHint.ReleaseHandle; FreeAndNil(NoWaitHint); end; end; //---------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); begin Try ShowHintMsg('作業處理中..... 請稍後 ..'); {處理事件 ...... } Finally CloseHintMsg; end; end;使用 THintWindow 好處在於不會轉移焦點。 參考。 ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~ 發表人 - wameng 於 2005/06/27 10:47:46 |
jest0024
高階會員 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
procedure TForm1.Test(Sender:TObject); begin end; procedure TForm1.Button1Click(Sender: TObject); var i:Integer; begin i:=0; with CreateMessageDialog('訊息',mtWarning,[mbYes])do begin for i:=0 to ControlCount-1 do //設定按鍵的事件 if(Controls[i] is TButton) then Case TButton(Controls[i]).ModalResult of mrYes:TButton(Controls[i]).OnClick:=Test; end; //TButton(FindComponent('YES')).OnClick:=Test; //FormStyle:=fsStayOnTop; 顯示最上方 Show; //處理訊息 While(i<=1000)and(Not Application.Terminated)do begin Application.ProcessMessages; Caption:=IntToStr(i); //TLabel(FindComponent('MESSAGE')).Caption:=IntToStr(i); Sleep(10); inc(i); end; Free; //處理完畢後,釋放 end; end;發表人 - jest0024 於 2005/06/27 17:28:37 |
cwc65536
初階會員 發表:47 回覆:121 積分:48 註冊:2004-10-14 發送簡訊給我 |
引言:aForm.MessageLabel.caption:='提示訊息'; 會出錯, 說是 MessageLabel 未定義引言: 因為ShowMessage是屬於Modal視窗,你要的是Modaless視窗! 製作一個 class="code"> var aForm:TForm; aForm := MyForm.Create(nil); // sorry...打太快,改一下! aForm.MessageLable.Caption := '資料處理中...'; aForm.Show; .......//處理你的事情 aForm.Free; //關掉視窗 ----------------------------------------------- Creation is the fundation of promotion.1. aForm := MyForm.Create(nil); // sorry...打太快,改一下! 2. MessageLabel是我假設的Label元件名稱,要以你在設計時放在MyForm上的label元件名稱為主。 ----------------------------------------------- Creation is the fundation of promotion. 發表人 - stallion 於 2005/06/23 23:00:01 |
cwc65536
初階會員 發表:47 回覆:121 積分:48 註冊:2004-10-14 發送簡訊給我 |
引言: 事實上,可以用 THintWindow 。無須另外在建立 TForm很棒耶 ! 可是字太小了, 可不可以控制字型大小 ?var NoWaitHint : THintWindow; Procedure ShowHintMsg(AHint:String); var PtRect :TRect; begin if Not Assigned(NoWaitHint) then NoWaitHint := THintWindow.Create(nil); With NoWaitHint do begin { 視窗置中處理 } PtRect := CalcHintRect(Screen.Width,AHint,Nil); PtRect.TopLeft := Point((Screen.Width - PtRect.Right) shr 1 ,(Screen.Height - PtRect.Bottom) shr 1); PtRect.BottomRight := Point(PtRect.Left PtRect.Right,PtRect.Top PtRect.Bottom); { 顯示 } ActivateHint(PtRect,AHint); Repaint; end; end; Procedure CloseHintMsg; begin if Assigned(NoWaitHint) then begin NoWaitHint.ReleaseHandle; FreeAndNil(NoWaitHint); end; end; //---------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); begin Try ShowHintMsg('作業處理中..... 請稍後 ..'); {處理事件 ...... } Finally CloseHintMsg; end; end;使用 THintWindow 好處在於不會轉移焦點。 參考。 ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~ 發表人 - wameng 於 2005/06/27 10:47:46 |
cwc65536
初階會員 發表:47 回覆:121 積分:48 註冊:2004-10-14 發送簡訊給我 |
引言:Label 的 Compiler 錯誤, 我找到問題了. but Runtime 會出錯, 請指點引言: 因為ShowMessage是屬於Modal視窗,你要的是Modaless視窗! 製作一個 class="code"> var aForm:TForm; aForm := MyForm.Create(nil); // sorry...打太快,改一下! aForm.MessageLable.Caption := '資料處理中...'; aForm.Show; .......//處理你的事情 aForm.Free; //關掉視窗 ----------------------------------------------- Creation is the fundation of promotion.1. aForm := MyForm.Create(nil); // sorry...打太快,改一下! 2. MessageLabel是我假設的Label元件名稱,要以你在設計時放在MyForm上的label元件名稱為主。 ----------------------------------------------- Creation is the fundation of promotion. 發表人 - stallion 於 2005/06/23 23:00:01 |
shunaarom
一般會員 發表:8 回覆:34 積分:18 註冊:2003-07-02 發送簡訊給我 |
試一下這看看是不是你要的
var fr:TForm;
la:Tlable;
begin
fr:=CreateMessageDialog('測試',mtInformation,[mbok]);
with fr do
begin
la:=TLabel(FindComponent('Message'));
if la<> nil then
la.Font.Color:=clred;
la.Font.Name:='標楷體';
end;
fr.Destroy;
FreeAndNil(fr);
end;
---------------------------------
試看看!個人覺得還不錯
|
cwc65536
初階會員 發表:47 回覆:121 積分:48 註冊:2004-10-14 發送簡訊給我 |
引言: 試一下這看看是不是你要的 var fr:TForm; la:Tlable; begin fr:=CreateMessageDialog('測試',mtInformation,[mbok]); with fr do begin la:=TLabel(FindComponent('Message')); if la<> nil then la.Font.Color:=clred; la.Font.Name:='標楷體'; end; fr.Destroy; FreeAndNil(fr); end; --------------------------------- 試看看!個人覺得還不錯我把 Process 放在 fr.Destroy 之前, 結果: 1. 並沒有 message 出現 2. Process 完畢, 出現錯誤訊息(我將錯誤畫面上傳,不知是否成功) |
cwc65536
初階會員 發表:47 回覆:121 積分:48 註冊:2004-10-14 發送簡訊給我 |
引言:引言:aForm.MessageLabel.caption:='提示訊息'; 會出錯, 說是 MessageLabel 未定義引言: 因為ShowMessage是屬於Modal視窗,你要的是Modaless視窗! 製作一個 class="code"> var aForm:TForm; aForm := MyForm.Create(nil); // sorry...打太快,改一下! aForm.MessageLable.Caption := '資料處理中...'; aForm.Show; .......//處理你的事情 aForm.Free; //關掉視窗 ----------------------------------------------- Creation is the fundation of promotion.1. aForm := MyForm.Create(nil); // sorry...打太快,改一下! 2. MessageLabel是我假設的Label元件名稱,要以你在設計時放在MyForm上的label元件名稱為主。 ----------------------------------------------- Creation is the fundation of promotion. 發表人 - stallion 於 2005/06/23 23:00:01 |
shunaarom
一般會員 發表:8 回覆:34 積分:18 註冊:2003-07-02 發送簡訊給我 |
引言: [quote] procedure TForm1.Button1Click(Sender: TObject); var fr:TForm; la:TLabel; begin fr:=CreateMessageDialog('測試',mtInformation,[mbok]); with fr do begin la:=TLabel(FindComponent('Message')); if la<> nil then begin la.Font.Color:=clred; la.Font.Name:='標楷體'; end; fr.ShowModal; end; fr.Destroy; end;Sorry沒仔細檢查過程式碼~ 有試過了可以用了!! |
cwc65536
初階會員 發表:47 回覆:121 積分:48 註冊:2004-10-14 發送簡訊給我 |
引言:歹勢, 因為是生手, 所以看不出錯在哪裏 ! 已經 Error Free ! but 1. 我是要 [顯示Message] -> Process Data -> Close Message 我希望 Message 一直停在畫面上,直到 process 完畢 2. 我試著調 Font Size , 結果有笑, but Message 視窗還是那麼小, 不會變大耶 !引言: [quote] procedure TForm1.Button1Click(Sender: TObject); var fr:TForm; la:TLabel; begin fr:=CreateMessageDialog('測試',mtInformation,[mbok]); with fr do begin la:=TLabel(FindComponent('Message')); if la<> nil then begin la.Font.Color:=clred; la.Font.Name:='標楷體'; end; fr.ShowModal; end; fr.Destroy; end;Sorry沒仔細檢查過程式碼~ 有試過了可以用了!! |
shunaarom
一般會員 發表:8 回覆:34 積分:18 註冊:2003-07-02 發送簡訊給我 |
|
cwc65536
初階會員 發表:47 回覆:121 積分:48 註冊:2004-10-14 發送簡訊給我 |
感謝各位大大熱烈回應 , 測試各種方法的結果及心得如下 : Stallion 之 開一個 Form , 別 Auto-Create , 等要用再 create
因為compiler會出錯,所以乾脆當作一個Auto-Create 的 Form 來用
but 上面的 LabelMessage 用 From.ShowModal 可顯示, 用 Form.Show 不行 wameng版主 之 THintWindow , 符合我的需求, 可惜字太小, 我參考 Help 提到相關的THintInfo 中有 HintWindowClass 可自訂 window, 功力太淺,不會用 jest0024 與 shunaarom 之 CreateMessageDialog 是同一個方法嗎 ? jest0024 寫的我看不大懂, 用 shunaarom 方法, 將 showmodal 改成 show 則 message 來不及顯示, 留下空格 都差一點點, 簡單講, 我要的寫程式的方法如下 :
1. 顯示 Message , 給 User 看, 但不需 user 確認
2. 開始處理資料
3. 處理完畢, 關畢視窗 請各位前輩, 不吝賜教 sho
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
>wameng版主 之 THintWindow , 符合我的需求, 可惜字太小, 我參考 Help 提到相關的THintInfo 中有 HintWindowClass 可自訂 window, 功力太淺,不會用 字型變大,如下:
Procedure ShowHintMsg(AHint:String); var PtRect :TRect; begin if Not Assigned(NoWaitHint) then NoWaitHint := THintWindow.Create(nil); With NoWaitHint do begin Canvas.Font.Size := 20; { 視窗置中處理 } PtRect := CalcHintRect(Screen.Width,AHint,Nil); PtRect.TopLeft := Point((Screen.Width - PtRect.Right) shr 1 ,(Screen.Height - PtRect.Bottom) shr 1); PtRect.BottomRight := Point(PtRect.Left PtRect.Right,PtRect.Top PtRect.Bottom); { 顯示 } ActivateHint(PtRect,AHint); Repaint; end; end;~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~ |
cwc65536
初階會員 發表:47 回覆:121 積分:48 註冊:2004-10-14 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
|
a6475
高階會員 發表:67 回覆:230 積分:154 註冊:2002-09-15 發送簡訊給我 |
引言: [quote] 完美, 版主果然厲害 請問 Stallion 提出用 Form.Show 的解決方法 , 所衍生出來的疑問, 也就是 LabelMessage.caption 來不及顯示的問題, 有解嗎 ?插花一下,用 Application.ProcessMessages; 應該也可以。 ..-----------βλμε------------.. ◎Oo月夜 光明 藍更愁oO◎ 藍調月光城v4:http://inping.myweb.hinet.net/ (暫時使用中..) 明日報(藍調.月光):http://mypaper2.ttimes.com.tw/user/a6475
------
月夜 光明 藍更愁 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |