DbGrid的问题(100分)

  • 主题发起人 主题发起人 richard.g
  • 开始时间 开始时间
R

richard.g

Unregistered / Unconfirmed
GUEST, unregistred user!
我想写一个控件,在我移动或修改DBGRID的SCORLLBAR时处发一个事件该怎么写?
 
type
MyGrid = class(TDbGrid )
private
procedure WMHScroll(var Msg: TWMHScroll);
message WM_HSCROLL;
procedure WMVScroll(var Msg: TWMVScroll);
message WM_VSCROLL;
end;

procedure MyGrid.WMHScroll(var Msg: TWMHScroll);
begin
inherited;
...
end;

procedure MyGrid.WMVScroll(var Msg: TWMVScroll);
begin
inherited
...
end;
 
如果要在GRID中插入一个DBLookupComboBox怎么做?
 
试一下动态创建DBLookupComboBox,并把DBLookupComboBox.parent属性设成要放置的单元格
 
虽然我不想说别的,可是我的这个建议起码20分。
作为一个程序员认真是很重要的,你可以把下面这句话里面的错别字改正一下
“我想写一个控件,在我移动或修改DBGRID的SCORLLBAR时处发一个事件该怎么写?”
触发
 
to 天空还下着沙
我刚学DELPHI不久,请问DBLookupComboBox.parent的属性怎么设?
 
厉害!刚学DELPHI就写控件,实在是厉害!不过建议还是从基础的地方做起,一点点做!
 
荷塘新月
编程就是要靠多写的,不写是不可能会的
 
var
DBLookupComboBox2 : TDBLookupComboBox;
begin
DBLookupComboBox2 := TDBLookupComboBox.Create(Memo1);
DBLookupComboBox2.Left := -50;
DBLookupComboBox2.Top := 10;
DBLookupComboBox2.Parent := Memo1;
end;
 
天空还下着沙
Memo1是什么?打个比方有一个DBGRID1,它中间有COLUMNS[1]
 
可試試:
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject;
const Rect: TRect;
Field: TField;
State: TGridDrawState);
begin
if (gdFocused in State) then
if field.FullName='state' then
//假設字段名為'state'
begin
DBLookupComboBox1.Visible:=true;
DBLookupComboBox1.Parent:=dbgrid1;
DBLookupComboBox1.Left:=rect.Left;
DBLookupComboBox1.Top:=rect.Top;
DBLookupComboBox1.Width:=rect.Right-rect.Left;
DBLookupComboBox1.Height:=rect.Bottom-rect.Top;
end;
dbgrid1.DefaultDrawDataCell(rect,field,state);
end;

procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
if dbgrid1.SelectedField.FullName<>'state' then
DBLookupComboBox1.Visible:=false;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
dbgrid1.Columns.State:=csdefault;
DBLookupComboBox1.Visible:=false;
end;
 
Memo1只是个比方,就是演示如何把一个控件放在另一个控件上
具体的代码zxb200给出了。加上我的那些。用个动态数组,为每条记录创建一个DBLookupComboBox
var
DBLookupComboBoxArr : array of TDBLookupComboBox;
begin
...
count := ADODataset1.recordcount;
setlength(DBLookupComboBoxArr, count);
for i := 0 to count - 1 do
begin
//为每个DBLookupComboBox控件赋值
DBLookupComboBoxArr := TDBLookupComboBox.Create(Memo1);
DBLookupComboBoxArr.Left := -50;
DBLookupComboBoxArr.Top := 10;
DBLookupComboBoxArr.Parent := DBGrid1;
DBLookupComboBoxArr.Text := .....
end;

很抱歉,我没有调试过,不能给出最完整的程序,只是个思路
 
楼上的兄弟,至于为每个记录创一个吗?最好先试试ZXB200的代码,何如?
你的思路不大对哦[?]

 
天空还下着沙,zxb200
zxb200的方法我前天就试过了,不过在移动DBGRID的SCORLLBAR时就会出现错误了,
我想捕获DBGRID的SCORLLBAR的WMHScroll,WMVScroll。并做一个EVENT,因为控件我
不是很熟,所以可以给个例程吗?jiguohua@sh163a.sta.net.cn
 
>>很抱歉,我没有调试过,不能给出最完整的程序,只是个思路
是在抱歉,经试验,我的想法是错的。
可是ZXB200的办法在横向移动滚动条时,DBLookupComboBox1显示后,有部分不能檫去。
要移动记录指针才行
 
后退
顶部