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

TMainMenu的Hint不能顯現

尚未結案
waterfat
一般會員


發表:22
回覆:16
積分:7
註冊:2003-11-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-09 22:57:05 IP:220.135.xxx.xxx 未訂閱
我在MainMenu中的Hint設一些說明的字串,不過執行時,滑鼠移到上面卻沒有hint出現,我在MainMenu中找不到ShowHint呀!    設定的畫面如下,是不是我的GroupIndex設錯之類的?     
waterfat
一般會員


發表:22
回覆:16
積分:7
註冊:2003-11-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-13 09:16:57 IP:140.118.xxx.xxx 未訂閱
這問題 我尋找了之前的文章 沒有人問我這類的 該不會mainmeau不能顯示hint吧
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-13 13:53:04 IP:61.63.xxx.xxx 未訂閱
引言: 我在MainMenu中的Hint設一些說明的字串,不過執行時,滑鼠移到上面卻沒有hint出現,我在MainMenu中找不到ShowHint呀! 設定的畫面如下,是不是我的GroupIndex設錯之類的?
waterfat你好: 我覺得這類問題很少探討的原因是因為會用 >! 首先,一般的元件,顯示 class="code">1. 有給Hint值 2. Form1->ShowHint=true;(設假元件的parent皆為Form1)應該就沒問題了! 而你會問"我在MainMenu中找不到ShowHint呀!"的原因我想應該是看了站上一篇有關Hint的文章,想找MainMenu的ShowHint屬性,然後把它設為true! 但這是不對的(設ShowHint屬性…的說明可見TControl::Hint的說明),因為TMenuItem或TMainMenu物件並不繼承自TControl物件,所以有關TMenuItem的所有Hint相關事項都不可以跟TEdit、TButton等物件同理類推,因為TEdit、TButton的Hint等屬性是繼承自TControl物件的! 而TMenuItem的Hint屬性其實是TmenuItem這個物件自已定義的屬性!注意TMainMenu是沒有Hint屬性的! 嗯,講到重要了,既然TMenuItem物件的Hint所有東東都不是繼承自TControl,而且我們也還不知道TMenuItem設計上對Hint的表現方式,所以我覺得目前我們還不能武斷的說TmenuItem的Hint show不出來!搞不好TMenuItem的Hint設計上就是不這樣顯示的! 不過很久以前我寫過virtual basic,印像中它好像是可以如願show hint的! 目前只能找到唯一show TMenuItem Hint值的方式也是只有TApplication::Hint這個說明中的範例了:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 Form1->ShowHint=true;
 Application->ShowHint=true;     Application->OnHint=DisplayHint;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DisplayHint(TObject *Sender)
{
 i++;
 Form1->Caption=i;     StatusBar1->SimpleText = GetLongHint(Application->Hint);
}    
這個範例是說TMenuItem的Hint值可以借由StatusBar顯示出來! 而我們可以自行在DisplayHint事件中加入判斷變數,證明每次點選不同MenuItem時或是滑鼠移至TEdit、TButton等物件上停留時,這個事件都真的有觸發,只是TEdit、TButton等物件會自行show出白框框的Hint值,而TMenuItem物件目前認定應該是不行的! 圖例: 所以這個範例是不是唯一能show TMenuItem物件的Hint值的方式,還不得而知! 以上一點淺見提供! 發表人 -
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-13 18:52:01 IP:61.218.xxx.xxx 未訂閱
補充一下:    How can I show menu hints in the StatusBar?  http://thunder.prohosting.com/~cbdn/e002.htm    
/*生活是一種藝術,用心生活才能享受生活*/
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-14 08:51:20 IP:210.243.xxx.xxx 未訂閱
大家好 這是小弟取自TMenuItem::Hint中的說明:  
引言: Set Hint to a string that provides more information about the meaning of the menu item than the Caption. The hint text appears in a Help Hint window when the user pauses with the mouse over the menu item if Help Hints are enabled (that is, if the Form? and the Application? ShowHint properties are true). It is also available for the code in the application? OnHint event handler.
紅色部分明白表示了只要把MainMenu所在的Form和Application的ShowHint設為 true就可以讓MainMenu的Hint使用"Help Hint window"顯示... 然而小弟測試結果失敗< > 提供出來讓各位大大作個參考< > 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
waterfat
一般會員


發表:22
回覆:16
積分:7
註冊:2003-11-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-15 17:34:46 IP:220.135.xxx.xxx 未訂閱
各位好 小弟今天剛好詢問到一位很有經驗的工程師 他說的方法不錯 建立一個新的panel或image 在mainmeanu上的OnMouseMove事件上 抓到座標 再將panel或image顯示出來 image可以做比較漂亮外觀 框透明化 給各位參考
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-16 00:18:59 IP:203.73.xxx.xxx 未訂閱
引言: 各位好 小弟今天剛好詢問到一位很有經驗的工程師 他說的方法不錯 建立一個新的panel或image 在mainmeanu上的OnMouseMove事件上 抓到座標 再將panel或image顯示出來 image可以做比較漂亮外觀 框透明化 給各位參考
waterfat你好< >: 你的意思很清楚,如果我沒猜錯的話,你是要自行做出 >? 老實說,我覺得這在想法上沒什麼新意(沒惡意的< >),因為我覺得大家都會想到這麼做的,因為只要想要的功能>做"出這樣的一個功能啦,對吧! 而本篇的幾位回覆的弟兄沒有直接寫出範例模擬這樣的功能原因,我想是因為大家的著眼點都是在想為什麼 >!其實站上高手一堆,像 >! 當然,虎爛了一堆,我也做一個測試小範例: <>> < class="code"> ~~~ class TForm1 : public TForm { __published: // IDE-managed Components TMainMenu *MainMenu1; TMenuItem *Program1; TMenuItem *System1; TMenuItem *Java1; TMenuItem *Builder1; TEdit *Edit1; TEdit *Edit2; void __fastcall FormCreate(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); void __fastcall TForm1:: MyHint(TObject* Sender); }; In Unit.cpp ~~~

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 Edit1->Visible=false;
 Edit2->Visible=false;
 Edit1->ReadOnly=true;
 Edit2->ReadOnly=true;     Application->OnHint=MyHint;
}
//---------------------------------------------------------------------------
void __fastcall TForm1:: MyHint(TObject* Sender)
{
 int x=GetMenuState(Program1->Handle,0,MF_BYPOSITION);
 int y=GetMenuState(Program1->Handle,1,MF_BYPOSITION);     if (x==MF_HILITE) {
     Edit1->Visible=true;
     Edit2->Visible=false;
 }
 else if (y==MF_HILITE) {
     Edit1->Visible=false;
     Edit2->Visible=true;
 }
 else {
     Edit1->Visible=false;
     Edit2->Visible=false;
 }
}    
圖例: 滑鼠在MenuItem上任意移動--> 滑鼠離開所有MenuItem--> 嗯,還不太好,但像不像三分樣,再花心思做一下,效果應可以接受的,That's all! 發表人 -
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-16 08:23:19 IP:61.63.xxx.xxx 未訂閱
引言:
引言: 各位好 小弟今天剛好詢問到一位很有經驗的工程師 他說的方法不錯 建立一個新的panel或image 在mainmeanu上的OnMouseMove事件上 抓到座標 再將panel或image顯示出來 image可以做比較漂亮外觀 框透明化 給各位參考
waterfat你好< >: 你的意思很清楚,如果我沒猜錯的話,你是要自行做出 >? 老實說,我覺得這在想法上沒什麼新意(沒惡意的< >),因為我覺得大家都會想到這麼做的,因為只要想要的功能>做"出這樣的一個功能啦,對吧! 而本篇的幾位回覆的弟兄沒有直接寫出範例模擬這樣的功能原因,我想是因為大家的著眼點都是在想為什麼 >!其實站上高手一堆,像 >! 當然,虎爛了一堆,我也做一個測試小範例: <>> < class="code"> ~~~ class TForm1 : public TForm { __published: // IDE-managed Components TMainMenu *MainMenu1; TMenuItem *Program1; TMenuItem *System1; TMenuItem *Java1; TMenuItem *Builder1; TEdit *Edit1; TEdit *Edit2; void __fastcall FormCreate(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); void __fastcall TForm1:: MyHint(TObject* Sender); }; In Unit.cpp ~~~

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 Edit1->Visible=false;
 Edit2->Visible=false;
 Edit1->ReadOnly=true;
 Edit2->ReadOnly=true;     Java1->Hint="我最會的語言";
 Builder1->Hint="去年年底學的";     Application->OnHint=MyHint;
}
//---------------------------------------------------------------------------
void __fastcall TForm1:: MyHint(TObject* Sender)
{
 int x=GetMenuState(Program1->Handle,0,MF_BYPOSITION);
 int y=GetMenuState(Program1->Handle,1,MF_BYPOSITION);     if (x==MF_HILITE) {
     Edit1->Visible=true;
     Edit2->Visible=false;
 }
 else if (y==MF_HILITE) {
     Edit1->Visible=false;
     Edit2->Visible=true;
 }
 else {
     Edit1->Visible=false;
     Edit2->Visible=false;
 }
}    
圖例: 滑鼠在MenuItem上任意移動--> 滑鼠離開所有MenuItem--> 嗯,還不太好---> 只是單純用TEdit當做Show Hint值的白色方塊(style什麼的要橋一下,才會像),然後是固定長在Form1上的,不是動態跟著滑鼠走的…等等等! 花心思強化一下,效果應可以接受的,That's all! 發表人 - >< face="Verdana, Arial, Helvetica">
系統時間:2024-05-14 10:10:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!