2012-10-09 13 views
6

どのようにして、選択したセルの合計値または範囲をstringgridにすることができますか?これらのセルには文字列値が含まれることがあります。選択したセルの合計値を文字列グリッド

私はGridCoordを試していますが、時には「隠し列」があるためにうまくいきません。 TStringGridでの選択範囲の浮動小数点値の合計を取得する方法

procedure TMainShowForm.StgSelectionChanged(Sender: TObject; ALeft, ATop, 
ARight, ABottom: Integer); 
var 
i: Integer; 
gc: TGridCoord; 
sum:double; 
begin 
    for i := 1 to stg.SelectedCellsCount do 
    begin 
     gc := stg.SelectedCell[i - 1]; 
     sum:=sum+stg.floats[(gc.X),(gc.Y)]; 
    end; 
    AdvOfficeStatusBar1.Panels[0].Text:='Sum = '+ formatfloat('#,##0.',sum); 
    AdvOfficeStatusBar1.Panels[1].Text:='Count = '+ inttostr(stg.SelectedCellsCount); 
end; 
+0

あなたのコードに 'stg'とは何ですか、それは' TAdvStringGrid'ですか? – TLama

答えて

8

?例えば、標準のDelphi TStringGridについては

このよう:TAdvStringGridで(目に見えない細胞を含む)選択範囲の浮動小数点値の合計を取得する方法

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Sum: Double; 
    Val: Double; 
    Col: Integer; 
    Row: Integer; 
begin 
    Sum := 0; 
    for Col := StringGrid1.Selection.Left to StringGrid1.Selection.Right do 
    for Row := StringGrid1.Selection.Top to StringGrid1.Selection.Bottom do 
     if TryStrToFloat(StringGrid1.Cells[Col, Row], Val) then 
     Sum := Sum + Val; 
    ShowMessage('Sum of the selection is ' + FloatToStr(Sum) + '.'); 
end; 

したがって、おそらくTAdvStringGridを使用していますが、未テストまたは最適化されていないコードを試すことができます。今まで私が見つけたのは、AllFloatsプロパティを使用して、非表示の列や行に関係なく、すべてのグリッドセルに浮動小数点としてアクセスすることができます。

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Sum: Double; 
    Col: Integer; 
    Row: Integer; 
begin 
    Sum := 0; 
    for Col := AdvStringGrid1.Selection.Left to AdvStringGrid1.Selection.Right do 
    for Row := AdvStringGrid1.Selection.Top to AdvStringGrid1.Selection.Bottom do 
     Sum := Sum + AdvStringGrid1.AllFloats[Col, Row]; 
    ShowMessage('Sum of the selection is ' + FloatToStr(Sum) + '.'); 
end; 
+1

thx私はすぐにそれを試してみます –

+0

それは良いですが、グリッドにcolまたはrowが隠されている場合には役に立ちません。 –

+0

投稿した例に十分な注意を払っていません。確かに、それは私が運が良かったことと、TMSソフトウェアがコントロールのこの部分を標準のDelphi VCLと同じに保ったからです。私の投稿のコードは 'TStringGrid'ですが、あなたは別のコントロール、おそらく' TAdvStringGrid'について話しています。 – TLama

関連する問題