Szukam sposobu, aby pod przyciskiem mieć przypisaną procedurę liczenia średniej z ocen. Problem polega na tym, że oceny te mam powpisywane do stringgrida. Jak można wrzucić do procedury wartości z konkretnych komórek z stringgrida?. Chodzi mi o wyciągniecie 8 liczb z pierwszego wiersza (pierwsze pole tego wiersza ma nazwę przedmiotu wiec powinien być pominięty). Korzystałem już z przykładów w internecie ale albo nie do końca pasowały do mojego przypadku albo wywalało mi problemy z typami zmiennych ;(.
Przesłana procedura wypełnia mi całego stringgrida cyframi:D. A mi chodzi o odczyt wartości z konkretnych komórek. Jest jakiś sposób na taki odczyt?
Właściwość cells
służy do odczytu i zapisu.
A można prosić o dokładniejsze wytłumaczenie?
http://pl.wikipedia.org/wiki/W%C5%82a%C5%9Bciwo%C5%9B%C4%87_%28informatyka%29
Caption:=StringGrid1.Cells[1,1];
Stworzyłem coś takiego, ale wg mnie jest tu coś kompletnie skopane;( Tylko się nie śmiać ;D.
procedure TForm1.Button3Click(Sender: TObject);
var
srednia:real;
c1,c2,c3,c4,c5,c6,c7,c8: string;
begin
Caption:=StringGrid1.Cells[2,2];
Caption:=StringGrid1.Cells[2,3];
Caption:=StringGrid1.Cells[2,4];
Caption:=StringGrid1.Cells[2,5];
Caption:=StringGrid1.Cells[2,6];
Caption:=StringGrid1.Cells[2,7];
Caption:=StringGrid1.Cells[2,8];
Caption:=StringGrid1.Cells[2,9];
c1:= strtofloat(StringGrid1.Cells[2,2]);
c2:= strtofloat(StringGrid1.Cells[2,3]);
c3:= strtofloat(StringGrid1.Cells[2,4]);
c4:= strtofloat(StringGrid1.Cells[2,5]);
c5:= strtofloat(StringGrid1.Cells[2,6]);
c6:= strtofloat(StringGrid1.Cells[2,7]);
c7:= strtofloat(StringGrid1.Cells[2,8]);
c8:= strtofloat(StringGrid1.Cells[2,9]);
srednia:= (c1+c2+c3+c4+c5+c6+c7+c8)/8;
srednia.text:=Floattostr(srednia);
end;
dodanie znacznika <code class="delphi"> - furious programming
Te wpisania do caption nie są potrzebne.
Czy słyszałeś może coś o magicznym tworze zwanym pętlą ?
procedure TForm1.Button3Click(Sender: TObject);
var avg:Double;
var I:Integer;
begin
avg:=0;
for I:=2 to 9 do avg:=avg+StrToFloat(StringGrid1.Cells[2,I]);
srednia.text:=FloatToStr(avg/8);
end;
Słyszałem, ale jak dla mnie taka metoda jest lepsza. I tak programistą nie będę a przedmiot trzeba zaliczyć ;D To mówisz,że bez captionów tych? Bo mi tu jeszcze błąd typów wyskakuje. I krzyczy kompilator co linijkę ;( Mógłbyś mniej więcej napisać tą procedurę dla sumy dwóch komórek z wiersza a ja bym na twoim przykładzie bym rozwinął i zrobił średnią? Nie chce gotowca! A na przykładzie szybciej ogarnę ;)
Wprowadziłem tą procedurę co mi podałeś i wyskakuje błąd ;" '' in not a valid floating point value". ?
Ktorego słowa nie rozumiesz w zdaniu:
'' in not a valid floating point value
?
A kurcze działa sorry, ale ze mnie gapa. Po prostu nie miałem całego stringgrida wypełnionego i dlatego wywalało ' ". Zaraz zmodyfikuje to co podałeś, żeby liczyło dla jednego wiersza jeśli mi się uda:D Proszę o nie zamykanie wątku zaraz się jeszcze odezwę;D
Dziękuję serdecznie za pomoc:D wystarczyło zmienić StringGrid1.Cells[i,1]) na StringGrid1.Cells[1,i]); Teraz ładnie liczy średnią dla liczb w całym wierszu :)
Można watek zamknąć ;D