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

請問"輔助說明"的功能該怎麼寫?或是有什麼元件可以達成這個功能,請各位網友指點迷津...

答題得分者是:pgdennis
supertony
一般會員


發表:8
回覆:9
積分:3
註冊:2006-07-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-08-30 16:28:15 IP:211.76.xxx.xxx 未訂閱
各位網友大家好:
在使用各種工具時,都會有一個功能:當我把滑鼠放在icon小圖示上時,會跳出一個說明框簡述該小圖示代表的意義(例如:存檔、列印等等)。現在我想利用這個功能,當我的滑鼠移到DBGrid上某一列時,那一列的"備註"欄位裡面的值,能夠顯示在由滑鼠所在的位置跳出的說明框中。需要使用到這個功能的原因是"備註"欄位的說明太長,會導致DBGrid需要左右移動非常不便,因此將"備註"欄位的長度限制住,可是這又導致要看"備註"欄位資料時很不方便,因此需要這個功能來解決使用者的問題。請問若我要達到這樣的功能,該使用什麼元件呢?請各位網友不吝賜教,若方便提出簡單的範例說明,更是感激不盡,謝謝各位網友撥冗觀看及指導解說~^0^
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-08-31 14:53:46 IP:218.163.xxx.xxx 未訂閱

請參考http://delphi.about.com/od/vclusing/a/menuitemhints_2.htm

依你需求,我改成cell click時候觸發hint

如下

Unit Unit1;


{

How to Display Menu Item Hints in Delphi applications

http://delphi.about.com/od/vclusing/a/menuitemhints.htm

By (Windows) design, in Delphi applications, hints assigned
to menu items do not get displayed in the popup tooltip
window (when the mouse hovers over a menu).
To mimic the Windows Start menu or the Favorites menu
of the Internet Explorer (and display hints for menu items)
you must create your own hint window. Here's how...

~ Zarko Gajic

}

Interface

Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, AppEvnts, StdCtrls, ExtCtrls, ComCtrls, DB, DBTables,
Grids, DBGrids;


Type
TDbgridHint = Class(THintWindow)
Private
activeDbgrid: TDbgrid;
showTimer: TTimer;
hideTimer: TTimer;
Procedure HideTime(Sender: TObject);
Procedure ShowTime(Sender: TObject);
Public
Constructor Create(AOwner: TComponent); Override;
Procedure DoActivateHint(aDbgrid: TDbgrid);
Destructor Destroy; Override;
End;

TForm1 = Class(TForm)
StatusBar1: TStatusBar;
DBGrid1: TDBGrid;
Database1: TDatabase;
Query1: TQuery;
DataSource1: TDataSource;
Procedure FormCreate(Sender: TObject);
Procedure DBGrid1CellClick(Column: TColumn);
Private
miHint: TDbgridHint;
End;

Var
Form1: TForm1;

Implementation
{$R *.dfm}

Procedure TForm1.FormCreate(Sender: TObject);
Begin
miHint := TDbgridHint.Create(self);
End; (*FormCreate*)

{ TMenuItemHint }

Constructor TDbgridHint.Create(AOwner: TComponent);
Begin
Inherited;

showTimer := TTimer.Create(self);
showTimer.Interval := Application.HintPause;

hideTimer := TTimer.Create(self);
hideTimer.Interval := Application.HintHidePause;
End; (*Create*)

Destructor TDbgridHint.Destroy;
Begin
hideTimer.OnTimer := Nil;
showTimer.OnTimer := Nil;
self.ReleaseHandle;
Inherited;
End; (*Destroy*)

Procedure TDbgridHint.DoActivateHint(aDbgrid: TDbgrid);
Begin
//force remove of the "old" hint window
hideTime(self);

If aDbgrid.DataSource.DataSet.FieldByName('WKDESC').AsString = '' Then
Begin
activeDbgrid := Nil;
Exit;
End;

activeDbgrid := aDbgrid;

showTimer.OnTimer := ShowTime;
hideTimer.OnTimer := HideTime;
End; (*DoActivateHint*)

Procedure TDbgridHint.ShowTime(Sender: TObject);
Var
r: TRect;
wdth: integer;
hght: integer;
Begin
If activeDbgrid <> Nil Then
Begin
//position and resize
wdth := Canvas.TextWidth(activeDbgrid.DataSource.DataSet.FieldByName('WKDESC').AsString);
hght := Canvas.TextHeight(activeDbgrid.DataSource.DataSet.FieldByName('WKDESC').AsString);

r.Left := Mouse.CursorPos.X 16;
r.Top := Mouse.CursorPos.Y 16;
r.Right := r.Left wdth 6;
r.Bottom := r.Top hght 4;

ActivateHint(r, activeDbgrid.DataSource.DataSet.FieldByName('WKDESC').AsString);
End;

showTimer.OnTimer := Nil;
End; (*ShowTime*)

Procedure TDbgridHint.HideTime(Sender: TObject);
Begin
//hide (destroy) hint window
self.ReleaseHandle;
hideTimer.OnTimer := Nil;
End; (*HideTime*)

Procedure TForm1.DBGrid1CellClick(Column: TColumn);
Begin
miHint.DoActivateHint(DBGrid1);
End;

End.

------
星期一,二...無窮迴圈@@
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-08-31 14:57:43 IP:218.163.xxx.xxx 未訂閱
------
星期一,二...無窮迴圈@@
supertony
一般會員


發表:8
回覆:9
積分:3
註冊:2006-07-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-09-01 10:58:10 IP:218.32.xxx.xxx 未訂閱

.....真不知該怎麼表達我的感激之意~ m( _ _ )m

非常感謝pgdennis網友撥空幫我解決這個問題,不但提供我解決的方式、參考的文件,一個簡單明瞭的範例,更是讓我能在短時間實作解決問題的主因。這個問題我也po在其他的討論論壇幾天了,雖然有不少網友觀看,卻沒有相關的提示或說明,讓我以為這個功能是無法實現的!今天的欣喜,是前幾天絕望時所無法想像的...再次感謝pgdennis網友大力協助,往後還請不吝指教,謝謝~ ^0^

pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-09-01 11:25:46 IP:218.163.xxx.xxx 未訂閱
你是新來的,可能不知道以前這個論壇的習慣

未改版前有個答題得分的機制,可以讓回文提供解決方式的網友一種累積積分的制度

=..=還有天使大大無私奉獻的獎牌一面<----這細金咧喔@@

所以以前只要有網友有問題,只要描述的當,又有禮貌,通常一天內就有人回應了

所以ktop的離線閱讀包的內容才會很豐富...

不過現在有些功能還沒寫好@@.....一些老手不方面回應...感覺有點冷清
------
星期一,二...無窮迴圈@@
系統時間:2024-05-12 13:41:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!