實現 StringGrid Flat ScrollBar 平滑捲軸風格(原創) |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
搞不清楚 Delphi 捲軸為什麼不統一支援Flat
原以為應該很簡單,花了半天找不到有完整並正確的程式碼。 大部分都畫面跟捲軸位置跟不上,或者移動一下就原形畢露。 只好自己寫。.... 公佈出來給大家參考,有問題再聯絡。 [code delphi] uses Commctrl; type TEvStrGrid = class(TStringGrid) Private Procedure UpdateScrollInfo(Code:Word); protected procedure CreateWnd; override; procedure TopLeftChanged; override; procedure SizeChanged(OldColCount, OldRowCount: Longint);override; procedure WMVScroll(var Msg: TWMVScroll); message WM_VSCROLL; procedure WMHScroll(var Msg: TWMHScroll); message WM_HSCROLL; public end; procedure TEvStrGrid.SizeChanged(OldColCount, OldRowCount: Longint); begin inherited SizeChanged(OldColCount, OldRowCount); if (OldRowCount<>RowCount) and (ScrollBars in [ssVertical, ssBoth]) then begin FlatSB_ShowScrollBar(Handle,SB_VERT,Pred(RowCount)>VisibleRowCount); end; if (OldColCount<>ColCount) and (ScrollBars in [ssHorizontal, ssBoth]) then begin FlatSB_ShowScrollBar(Handle,SB_HORZ,Pred(ColCount)>VisibleColCount); end; end; procedure TEvStrGrid.CreateWnd; begin inherited CreateWnd; InitializeFlatSB(Handle); FlatSB_SetScrollProp(Handle, WSB_PROP_VSTYLE, FSB_ENCARTA_MODE, True); FlatSB_SetScrollProp(Handle, WSB_PROP_HSTYLE, FSB_ENCARTA_MODE, True); end; Procedure TEvStrGrid.UpdateScrollInfo(Code:Word); var SI : TScrollInfo; begin SI.cbSize := SizeOf(TScrollInfo); SI.fMask := SIF_ALL; if GetScrollInfo(Handle, Code, SI) then FlatSB_SetScrollInfo(Handle, Code, SI, True); end; procedure TEvStrGrid.WMVScroll(var Msg: TWMVScroll); begin inherited; UpdateScrollInfo(SB_VERT); end; procedure TEvStrGrid.WMHScroll(var Msg: TWMHScroll); begin inherited; UpdateScrollInfo(SB_HORZ); end; procedure TEvStrGrid.TopLeftChanged; var Postion : Integer; begin inherited; Postion := GetScrollPos(Handle,SB_VERT); if Postion >= 0 then FlatSB_SetScrollPos(Handle, SB_VERT, Postion, True); Postion := GetScrollPos(Handle,SB_HORZ); if Postion >= 0 then FlatSB_SetScrollPos(Handle, SB_HORZ, Postion, True); end; [/code] 編輯記錄
yckuo 重新編輯於 2007-09-17 17:48:29, 註解 套用程式碼高亮顯示‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |