用TStringGrid做数据显示,遇到了问题。那位老兄帮助一下!谢谢。 ( 积分: 50 )

  • 主题发起人 主题发起人 金风吹雪
  • 开始时间 开始时间

金风吹雪

Unregistered / Unconfirmed
GUEST, unregistred user!
[讨论]
我还有几个问题:
1、我做了一个软件应用系统,子窗体中用了TDBChrt控件(用作图像显示),每次启动主窗体(主程序),子窗体中的图像控件都调用数据,出现进度条,占用好多时间。我要做成:每次启动系统不要调用数据(为的是节约机器时间),而在打开子窗体显示图像时,再调用数据(或者用一个按钮控制调用数据)。怎样做,才能达到目的。
2、还是TStringGrid控件问题(数据定位对齐):
怎样把显示的数据定在:网格的左边或右边甚至是中间位置。
3、也是TStringGrid控件问题,我的数据这样显示:
12.3
10
23.5
45.1
{*****}
我要做成这样显示(填0数据对齐):
12.3
10.0
23.5
45.1
{*****}
怎样做?
4、控件TStringGrid,字段的宽度怎样控制,代码怎样写?

谢谢大家!
 
[讨论]
我还有几个问题:
1、我做了一个软件应用系统,子窗体中用了TDBChrt控件(用作图像显示),每次启动主窗体(主程序),子窗体中的图像控件都调用数据,出现进度条,占用好多时间。我要做成:每次启动系统不要调用数据(为的是节约机器时间),而在打开子窗体显示图像时,再调用数据(或者用一个按钮控制调用数据)。怎样做,才能达到目的。
2、还是TStringGrid控件问题(数据定位对齐):
怎样把显示的数据定在:网格的左边或右边甚至是中间位置。
3、也是TStringGrid控件问题,我的数据这样显示:
12.3
10
23.5
45.1
{*****}
我要做成这样显示(填0数据对齐):
12.3
10.0
23.5
45.1
{*****}
怎样做?
4、控件TStringGrid,字段的宽度怎样控制,代码怎样写?

谢谢大家!
 
帮问题贴出来让大家想想也不错啊
 
什么问题,怎么一帖出来就说解决了?
 
var
i:integer;
begin
for i := 0 to DBGrid1.Columns.Count -1 do
if DBGrid1.Columns.Width > 20 then
DBGrid1.Columns.Width := 20 ;
end;
 
第一個問題是因為在Delphi中,只有是全局變量才能定義初始值,否則會出錯
舉例如下:
var
Form1: TForm1;

implementation

{$R *.dfm}

var
sdf: array[0..1] of string = ('sdfsdf', 'sdfsdf');//記住此處的位置

第二個問題已經有人回答了,就是DBGrid1.Columns.Width := 20 ;//這樣就可以改變
 
Sorry,我的错,向楼主道歉!
应该是:
Const
TopRowTxt = '编号,年代,一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月';
//使用:
DBGrid1.Cols[0].Delimiter := ',';
DBGrid1.Cols[0].DelimitedText := TopRowTxt;
 
网事如风说的对。设置常量const是对的。

在这里特别向“网事如风”致谢!你对我帮助很大。衷心地谢谢你!
在者我还有几个问题:
1、我做了一个软件应用系统,子窗体中用了TDBChrt控件(用作图像显示),每次启动主窗体(主程序)子窗体中的图像控件都调用数据,出现进度条,占用好多时间。我要做成做,打开子窗体再调用数据。或者用一个按钮控制调用数据。怎样做才能达到目的。
2、还是TStringGrid控件问题,数据定位:怎样把显示的数据定在网格的左边或右边甚至是中间位置。
3、控件TStringGrid,字段的宽度怎样控制,代码怎样写?

谢谢大家!
 
网事如风:你好!应该是这样的.
Const
TopRowTxt = '编号,年代,一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月';
begin
DCGrid.rows[0].Delimiter:= ',';
DCGrid.rows[0].DelimitedText := TopRowTxt;
end;
因为,我的问题是这样的:
DCGrid1.Cells[0,0]:='编号';
DCGrid1.Cells[1,0]:='年代';
DCGrid1.Cells[2,0]:='一月';
DCGrid1.Cells[3,0]:='二月';
DCGrid1.Cells[4,0]:='三月';
{*************************}
 
第三个问题的话,如果你是从数据库里读数据的话,你直接控制数据库的显示格式不是更方便些吗???
 

格式化数据有一位小数:
function GetOneDot( StrTmp : String) : String;
begin
Result := formatfloat( '#,##0.0', StrTmp );
end;

左右对齐晚上给你代码,现在手里没有(;

设置GRID的CELL宽度: sg_Info.ColWidths := 33;
 
在StringGrid的DrawCell事件中加入下面类似代码,即可实现相应的显示格式
procedure SGrdDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
vText: PChar;
begin
with TStringGrid(Sender) do begin
if (trim(SGrd.cells[ACol, ARow])<>'') and (ARow>0) then
vText := PChar(Cells[ACol, ARow])
else
vText := PChar(Cells[ACol, ARow]);
if Arow=0 then
begin
Canvas.brush.Color:=ClWhite ;//;cl3dlight;//clTeal;
Canvas.font.Color:=clTeal;
end;
Canvas.FillRect(Rect);
if (ARow=0) then
Canvas.font.Color:=clTeal
else
if (ARow=SelectRow) then
Canvas.font.Color:=clwhite
else
Canvas.font.Color:=clWindowText;

if (ARow=0) then
DrawText(Canvas.Handle, vText, StrLen(vText), Rect,
DT_CENTER or DT_VCENTER or DT_SINGLELINE) //<<--(标题居中)
else
DrawText(Canvas.Handle, vText, StrLen(vText), Rect,
DT_left or DT_VCENTER or DT_SINGLELINE) //<<--(字符列靠左对齐)

end;
end;
 
谢谢 网事如风。
 
xingcheng你好
我试了,到这儿就不行了:with TStringGrid(Sender) do begin 段中的(Sender)
为什么?
谢谢
 
进来看看!
帮帮忙
 
第一个问题:将那个子窗口从auto create forms列表中删除,调用的时候动态create,free
第三个问题:显示数据自己控制,重新格式化每个数
 
分配积分!
 
后退
顶部