StringGrid巨难问题(20分)

  • 主题发起人 主题发起人 qddmh
  • 开始时间 开始时间
Q

qddmh

Unregistered / Unconfirmed
GUEST, unregistred user!
我想将sncCurrencyEdit组件嵌入到
StringGrid的一列中, 当此StringGrid组件所在窗体显示时
多行都有sncCurrencyEdit组件,就像一些进销存软件显示那样。
应怎样??

我在StringGrid的onDrawCell事件中用如下语句
if(ACol=1) or (ACol=2) then
begin
Panel1.left = Rect.left + 2;
Panel1.top = Rect.Top + 2;
Panel1.width = Rect.Right - Rect.Left;
Panel1.height = Rect.Bottom - Rect.Top;
end;

(当加入获得焦点条件时, 只能选中单元格时选中的单元格中才能显示, 不符合)
 
你对组件的复合使用的理解显然不是那么“地道”。
要知道:Windows 只接受一个输入焦点,要正确地
让一个内置组件(如内置编辑器)显示自己,则必须
有合理的方法来进行,具体可以看看 TCustomGrid
本身实现 UpdateEdit, ShowEdit, HideEdit 等几个
例程,容易看得懂的。
 
那你要创建很多的sncCurrencyEdit,再进行定位。
 
to ddev
能否给我详细解答一下?
 
我没看懂StringGrid组件的源吗,
能否将它的实现原理介绍一下?
 
你是做真正嵌入到StringGrid里??? 那得自己开发一个控件,你显示的行数很多???
如果不多的话,就直接创建sncCurrencyEdit浮动在StringGrid上好了。
 
to yeath
行数100
你说的浮动时怎会事?
 
当前选中单元格时应重新设置一下其它需要更新的单元格的值 cells[j,i]
但要避免死锁现象。
 
浮动就是把你的EDIT放在你的单元格上,100行的活,就创建100个EDIT,再定位到STRINGGRID
对应列中,方法比较土。
 
为什么要每行一个呢? 当前输入的行放一个就行了啊。在selectcell里加下面的代码。
var
Rect:TRect;
begin
edt_department.Visible := False;
Rect := sgrd_Data.CellRect(sgrd_Data.Col,sgrd_Data.Row);
if sgrd_Data.Col=3 then
begin
edt_Department.SetBounds(sgrd_Data.Left+Rect.Left,sgrd_Data.Top+Rect.Top+1,Rect.Right-Rect.Left+5,Rect.Bottom-Rect.Top);
edt_Department.Visible := True;
edt_Department.SetFocus;
end;
end;
edt_department就是输入的编辑控件,其他代码自己处理一下。
 
难吗??
 
to 邓娟
会者不难,难者不会, 我不会
要不你给点介绍?
 
你就动态绑定srcCurrencyEdit的位置好了。
 
接受答案了.
 
后退
顶部