如何取消DBGrid中的水平滚动条(100分)

  • 主题发起人 主题发起人 first
  • 开始时间 开始时间
F

first

Unregistered / Unconfirmed
GUEST, unregistred user!
1.如何取消DBGrid中的水平滚动条.
2.如果不取消水平滚动条,当点击水平滚动条时如何判断最左边和最右边的列号.
 
1>.用一个API函数能取消滚动条:
BOOL ShowScrollBar(
HWND hWnd, // handle of window with scroll bar
int wBar, // scroll bar flag
BOOL bShow // scroll bar visibility flag

参数值:
hWnd:
DBGrid的Handle
wBar:
SB_BOTH //水平和垂直滚动条
SB_CTL //
SB_HORZ //水平滚动条
SB_VERT //垂直滚动条
bShow:
False //隐藏
True //显示
2>.Listen
 
哈哈!我一直想知道呢!!!!!哇哈哈哈……
 
(2)我的方法是在TdataSource的ondatachange中讀數據記錄號
 
如果不取消水平滚动条,当点击水平滚动条时如何判断最左边和最右边的列号???
 
要取消水平滚动条, TStringGrid(DBGrid1).ScrollBars := ssVertical;
 
点击水平滚动条后,按Button1显示最左边的列号,按Button2显示最右边的列号

procedure TForm1.Button1Click(Sender: TObject);
var
P: TPoint;
I: Integer;
begin
P.x := 1;
if dgIndicator in DBGrid1.Options then
P.x := P.x + IndicatorWidth;
P.y := 1;
I := DBGrid1.MouseCoord(P.x, P.y).x;
if dgIndicator in DBGrid1.Options then
ShowMessage(IntToStr(I - 1))
else ShowMessage(IntToStr(I));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
P: TPoint;
I: Integer;
begin
P.x := DBGrid1.ClientWidth - 1;
P.y := 1;
I := DBGrid1.MouseCoord(P.x, P.y).x;
if I < 0 then
ShowMessage(IntToStr(DBGrid1.FieldCount - 1))
else begin
if dgIndicator in DBGrid1.Options then
ShowMessage(IntToStr(I - 1))
else ShowMessage(IntToStr(I));
end;
end;
 
TCustomGrid 的
protected 段有
property LeftCol: Longint read FTopLeft.X write SetLeftCol;
property VisibleColCount: Integer read GetVisibleColCount;
...
属性,可以得到最左边和最右边的列号,可没法直接用。
TMyDBGrid=class(TDBGrid)
public
property LeftCol;
property VisibleColCount;
...
继承下来,是不是就可以了。(我没试)
 
多人接受答案了。
 

Similar threads

回复
0
查看
804
不得闲
D
回复
0
查看
802
DelphiTeacher的专栏
D
D
回复
0
查看
747
DelphiTeacher的专栏
D
D
回复
0
查看
696
DelphiTeacher的专栏
D
D
回复
0
查看
661
DelphiTeacher的专栏
D
后退
顶部