A tak zapytam przy okazji, bo na bank będziesz się orientował.
Skoro mam to zaokrąglanie, to czemu gdy wpisuje wartość 23,13 to pokazuje mi 23 ? żeby było śmiesznej to gdy próbuje podsumować tę kolumnę to wywala błąd.
Być może jest to spowodowane tym że jest kropka zamiast przecinka.
W 7 kolumnie są wartości typu real , a tak wygląda procedura rysowania StringGrida :
procedure TNarzedziaFrm.StringGrid_NarzedziaDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
var
s,s1:string;
lr: real;
code:integer;
begin
with StringGrid_Narzedzia.Canvas do
begin
S:= StringGrid_Narzedzia.Cells[aCol, aRow];
if (aCol = 0) or (aCol = 1) or (aCol = 2) or (aCol = 3) or (aCol = 4) or (aCol = 5) or (aCol = 6) or (aCol = 8) or (aCol = 9) or (aCol = 10) then
begin
StringGrid_Narzedzia.Canvas.FillRect(Rect);
DrawText(Handle, PChar(S), Length(S), Rect, DT_CENTER or DT_VCENTER or DT_SINGLELINE);
end;
if (aCol = 7) and (aRow <> 0) then
begin
try
Val(S,lr,code);//code>0 oznacza błąd
Str(lr:0:2,s1);
StringGrid_Narzedzia.Canvas.FillRect(Rect);
DrawText(Handle, PChar(s1), Length(S1), Rect, DT_RIGHT or DT_VCENTER or DT_SINGLELINE);
except;
end;
end
else
begin
StringGrid_Narzedzia.Canvas.FillRect(Rect);
DrawText(Handle, PChar(S), Length(S), Rect, DT_CENTER or DT_VCENTER or DT_SINGLELINE);
end;
end;
end;
Procedura do zsumowania :
procedure TNarzedziaFrm.SumaWartosci(Sender: TObject);
var
j: integer;
begin
suma:= 0;
try
for j:=1 to NarzedziaFrm.StringGrid_Narzedzia.RowCount do
begin
suma:= suma + StrToInt(NarzedziaFrm.StringGrid_Narzedzia.Cells[7,j]);
end;
except;
end;
RichEdit_Wartosc.Text:= FloatToStr(suma);
end;
Sumuje tylko i wyłącznie gdy wartości są typu integer : czyli jak wpisze np. 23 ; 32 ; 56 ale jak wpisze 23,12 to wywala błąd : is not valid integer value
i tylko i wyłącznie wtedy gdy zachowana jest kolejność (czyli po drodze nie natrafi na ' ' puste :) - w moim przypadku brak ceny .
Pomóż !