高手请进,谢绝罐水!(200分)

  • 主题发起人 主题发起人 bag
  • 开始时间 开始时间
B

bag

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟在写一个程序,现在遇到问题,向各位高手请教:
<如何扩充一个控件>
DBGRID是数据库的感知控件
1,如何才可以将它里面的那些格子去掉,让它不显示出来呢?
2,DBGRID里可以实现某个格子里有下拉框,但我如果想实现当我单击某格是在该格里
出现一个CHECKBOX控件呢?
3,还有,如何实现当我单击某一格让它出现一个类似一个没有属性栏的窗体,上面有我放的
一些如EDIT只类的控件,并且,该窗体的左顶部和该格的左顶位置一样
通过该问题,我想知道如何来扩充一个控件,希望各位高手多多指教小弟
wanghuiss@163.net
 
用infodbgrid
 
建议你最好使用ADVsTRINGGRID来显示数据,对表中的数据个性完成后,
再把数据写入表中。
这样的话,你上面所说的功能就不难实现了。
 
ADVsTRINGGRID这是什么控件,那有呢?
infodbgrid这个我也没有呀
我问这个问题有两个原因:1,解决实际问题;2,知道如何扩充控件。
 
2.ADVStringGrid在窖洞有下的,你可以自己去下。
至少它在实现指定列的单元格中使用checkbox
非常的方便。
3.其它你使用一个panel来显示你的Tedit也是一样的。
至于说怎样扩充控件,就是关于vcl方面的知识了,可以多看vcl源码。
 
1.不知道,listen

>>2,DBGRID里可以实现某个格子里有下拉框,但我如果想实现当我单击某格是在该格里
>>出现一个CHECKBOX控件呢?
放一个Checkbox。visible为false.
在DBGrid的OnDrawDataCell事件里判断当前Field是什么,根据需求在当前Cell的位置显示
checkbox或者什么的。checkbox的大小调整成cell的大小即可。
procedure TForm1.FormCreate(Sender: TObject);
begin
CheckBox1.Visible := False;
end;
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if (Field.FieldName = DBCheckBox1.DataField) then
begin
CheckBox1.Left := Rect.Left + DBGrid1.Left + 1;
CheckBox1.Top := Rect.Top + DBGrid1.top + 1;
CheckBox1.Width := Rect.Right - Rect.Left;
CheckBox1.Height := Rect.Bottom - Rect.Top;
CheckBox1.Visible := True;
end;
end;
在Dbgrid的OnColExit中判断Field来把CheckBox visible直回false
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
If DBGrid1.SelectedField.FieldName = 'YourField' then
CheckBox1.Visible := false;
end;
这样就能达到点击某一字段列的Cell时,在此处出现一个Cell大小的checkbox覆盖住cell。
注意最好checkbox颜色设为背景色。
如果想显示combobox或者edit什么的都可以这样做。

>>3,还有,如何实现当我单击某一格让它出现一个类似一个没有属性栏的窗体,上面有我放的
>>一些如EDIT只类的控件,并且,该窗体的左顶部和该格的左顶位置一样
和上面说得差不多啦!
只是设置你的窗体的top和left就行了。

>>通过该问题,我想知道如何来扩充一个控件
这样做只是达到了效果,和你的初衷可能不大相符了。
希望对你能有些启发。
:-))

 
其中一句改一下,我以前用的时DBCheckBox
>> if (Field.FieldName = DBCheckBox1.DataField) then
if (Field.FieldName = 'YourField') then
如果想用其他控件的话,去窑洞去下。
http://www.51delphi.com
注册个用户先!
 
其实有时候我还是喜欢用DELPHI自有的控件,也可以提高自己的能力!什么东西都是别人帮你做好了,
没意思!喜欢GanQuan的方式!
 
to ganqun:
DBGrid嵌入多个可视化控件又如何解决呢?
 
>>DBGrid嵌入多个可视化控件又如何解决呢?
想显示什么控件就放什么控件到Form上。点击Dbgrid时通过判断当前的Field把
你想显示的控件Visible置True,并调整大小到当前Cell。
如果你想在同一个Cell中在不同条件下显示不同控件,就加上你的判断条件不就行了吗!
 
GanQuan 你的方法丢了一句话。少了这句话效果会没的说的好。

>>procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
>> Field: TField; State: TGridDrawState);
>>begin
if (gdFocused in State) or (gdSelected in State) then //加上一句。
>> if (Field.FieldName = DBCheckBox1.DataField) then
>> begin
>> CheckBox1.Left := Rect.Left + DBGrid1.Left + 1;
>> CheckBox1.Top := Rect.Top + DBGrid1.top + 1;
>> CheckBox1.Width := Rect.Right - Rect.Left;
>> CheckBox1.Height := Rect.Bottom - Rect.Top;
>> CheckBox1.Visible := True;
>> end;
end;

 
呵呵,wk_knife兄够仔细!
 
后退
顶部