Kopiowanie z edit lub memo do stringgrid

0

Witam. Mam pewien problem. Jest coś podobnego opisanego ale oparte tylko na liczbach całkowitych. Mianowicie chodzi o to, że chce aby po wpisaniu danej nazwy i kliknięciu w button dodawał się kolejny wiersz w tabeli stringgrid i w określonej kolumnie pojawiała się nazwa wpisana w edit lub memo. Dodatkowo byłby jeszcze Combobox, w którym byłyby 2-3 pozycje i wartość ustawiona w comboboxie byłaby widoczna w innej kolumnie stringgrida. Sprawa jest pewnie prosta ale pisze w Newbie dlatego, że w delphi poruszam się troche na ślepo. Z góry dziękuję za pomoc.

Pozdrawiam

1

W zdarzeniu OnClick buttona

  with StringGrid1 do
  begin
    RowCount:=RowCount+1;
    Cells[0,RowCount-1]:=Edit1.Text;
    Cells[1,RowCount-1]:=ComboBox1.Items[ComboBox1.ItemIndex];
  end;
0

Aha... zapomniałem o jednej rzeczy. W skład stringgrida wchodzi jedna kolumna gdzie będą tylko liczby całkowite i chciałbym aby suma z wszystkich komórek w tej kolumnie była zliczana do labela.

0

Bez sprawdzania poprawności. Chcesz zrobić kod idiotoodporny to użyj Val lub TryStrToInt

const
  ColIndex = 0;
var
  I, Sum : integer;
begin
  Sum := 0;
  for I := 0 to StringGrid1.RowCount - 1 do
  begin
    Sum := Sum + StrToInt(StringGrid1.Cells[ColIndex, I]);
  end;
  Label1.Caption := IntToStr(Sum);
end;

Jednak szczerze polecam poczytać kursy z podstawami lub też pomoc do Delphi, bo pewnie będą pojawiały się kolejne pytania o banały. A większą satysfakcją jest chyba coś samodzielnie napisać, nie pytając co chwile o coś. Wiem, forum jest po to żeby pomóc i naprowadzić, co na ogół tutaj ludzie chętnie czynią. Jednak bez sensu żebyśmy cały program napisali za Ciebie :)

0

Niestety dalej się trochę męczę dlatego, że sumowanie liczb z danej kolumny dalej nie działa :/

Poniżej zamieszczam fragment kodu i przy okazji mam pytanie czy komunikat "EConvertError with message "2" is not a valid value" może być spowodowany tym, że w pierwszym wierszy stringgrida są wartości typu string a w każdym następnym wierszu liczby całkowite ? Na stringgridzie nie ma FixedRows dlatego, że nie wiem gdzie je ustawić :D

procedure TForm4.Button1Click(Sender: TObject);
begin
  inherited;
   with StringGrid1 do
  begin
    RowCount:=RowCount+1;
    Cells[1,RowCount-1]:=Memo2.Text;
    Cells[2,RowCount-1]:=Memo3.Text;
    Cells[3,RowCount-1]:=ComboBox1.Items[ComboBox1.ItemIndex];
    i := (i) +1;
    Cells[0,RowCount-1]:= IntToStr(i);
    Label5.Caption:=Cells[0,RowCount-1];
    Label9.Caption:=Cells[2,RowCount-1];
  begin

  Edit1.Text:=Label9.Caption;
  Edit2.Text:=Label8.Caption;
  end;
end;


end;



procedure TForm4.Button2Click(Sender: TObject);
begin
  inherited;
  x := StrToInt(Edit1.Text);
  y := StrToInt(Edit2.Text);
  z := y+x;
  Edit3.Text := IntToStr(z);
end;
0

Samo "2" jest wartością całkowitą przy założeniu, że dokonujemy konwersji ze stringa na liczbę całkowitą. Natomiast jeżeli w pierwszym wierszu StringGrida (o indeksie 0) masz tekst, a nie liczbę to nie dziwota, że pokazują wyjątki. Pisałem przecież wcześniej. Chcesz sprawdzać czy liczba jest w porządku to użyj Val lub TryStrToInt a jeżeli i tak w wierszu o indeksie 0 są wartości tekstowe to wykonuj pętlę od wiersza o indeksie 1. Natomiast FixedCols oraz FixedRows ustawisz poprzez kod albo w Insektorze Obiektow. Tylko warunek jest taki, że Count musi być przynajmniej o jeden większy od ustawianej ilości Fixed. Czyli mając jeden wiersz nie możesz ustawić FixedRows na 1, bo będzie wyjątek. I nadal szczerze radzę, poczytaj kursy z podstawami i kombinuj samodzielnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1