200分,求一插件或一实现方法. 高手请进.... ( 积分: 200 )

  • 主题发起人 主题发起人 jjxboy
  • 开始时间 开始时间
J

jjxboy

Unregistered / Unconfirmed
GUEST, unregistred user!
顶部和左部都有表头栏,底部和右部都有合计栏的控件,或如何实现.
S M L
_____________________________________________
红| 100 200 300 |600
绿| 200 100 50 |350
蓝| 50 100 70 |220

______________________________________________
350 400 420 |1170

spgrid.jpg

里放在一个Grid里面的,怎么实现呢?
 
用cxGrid啊。
 
用两个控件,一个Grid处理上部分的,对于列合计用程序处理在一个控件里就可以了;一个Grid处理下部分的行合计,用程序处理。不需要专门的控件。
 
用cxGrid是怎么做的呢?能不能发一个demo啊?

如果用两个控件又是怎么做的呢?可否发一个demo呢?

还有高手可以找到办法吗?如果分不够的话,我还可以再加

如果有demo的话可否把源码发到
win.garment@gmail.com
 
普通的stringgrid就可以做啊
自己控制在stringgrid的最后一行和最后一列对应的cell里显示合计内容
表头栏stringgrid自带
 
高手们,帮帮我啊!!!给我一个DEMO,好吗?谢谢了!
win.garment@gmail.com
 
放个stringgrid

procedure TForm1.FormCreate(Sender: TObject);
var
i,j:integer;
begin
with SG do
begin
Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing];
RowCount:=5;
ColCount:=5;
FixedCols:=1;
FixedRows:=1;
Cells[1,0]:='S';
Cells[2,0]:='M';
Cells[3,0]:='L';
Cells[0,1]:='红';
Cells[0,2]:='绿';
Cells[0,3]:='蓝';
for i:=1 to 4 do
for j:=1 to 4 do
Cells[i,j]:='0';
end;
end;

procedure TForm1.SGSetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
var
v,i,sv:integer;
begin
if trystrtoint(value,v) then
begin
sv:=0;
for i:=1 to 3 do
if trystrtoint(SG.Cells[i,arow],v) then
inc(sv,v);
SG.Cells[4,arow]:=inttostr(sv);
sv:=0;
for i:=1 to 3 do
if trystrtoint(SG.Cells[acol,i],v) then
inc(sv,v);
SG.Cells[acol,4]:=inttostr(sv);
end;
end;
 
如果单用一个stringGrid的话,我根本就没有必要提出这样的问题,我只是想了解一下,这样的方式是怎么实现的,我是一个delphi初学者,觉得这个功能很神奇.不知道有没有知道的人.
 
本来就是用简单的功能实现的,有这种方法的控件只不过是把这些方法封装起来形成一个新控件而已,如果你有他的源码,去看一下就明白了
没什么神奇的
下面这个是封装后的stringgrid

ttestsg=class(TStringGrid)
public
Constructor Create(AOwner: TComponent);override;
Destructor Destroy;override;
protected
procedure SetEditText(ACol, ARow: Longint; const Value: string); override;
end;


constructor ttestsg.Create(AOwner: TComponent);
var
i,j:integer;
begin
inherited Create(AOwner);
Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing];
RowCount:=5;
ColCount:=5;
FixedCols:=1;
FixedRows:=1;
Cells[1,0]:='S';
Cells[2,0]:='M';
Cells[3,0]:='L';
Cells[0,1]:='红';
Cells[0,2]:='绿';
Cells[0,3]:='蓝';
for i:=1 to 4 do
for j:=1 to 4 do
Cells[i,j]:='0';
end;

destructor ttestsg.Destroy;
begin
inherited Destroy ;
end;

procedure ttestsg.SetEditText(ACol, ARow: Integer;
const Value: String);
var
v,i,sv:integer;
begin
inherited SetEditText(ACol, ARow, Value);
if trystrtoint(value,v) then
begin
sv:=0;
for i:=1 to 3 do
if trystrtoint(Cells[i,arow],v) then
inc(sv,v);
Cells[4,arow]:=inttostr(sv);
sv:=0;
for i:=1 to 3 do
if trystrtoint(Cells[acol,i],v) then
inc(sv,v);
Cells[acol,4]:=inttostr(sv);
end;
end;
 
万分感谢,三位的方法都可以用不同的方式解决我的问题,但是hs-kill的方法是最高效的,我把hs-kill的方法重新改写成了另一种形式的类,虽然不能完全达到和图中一模一样,但是已经几近完美.
 
后退
顶部