Ustawianie roznej dlugosci rows w string grid

0

Witam mam takie pytanko moze dosc dziwne moze niewykonalne ale ... mam juz takie cos:

StringGrid1.ColCount:=StrToInt(Edit1.Text);

Jak widac ustawiam sobie ilosc kolumn w stringgrid1 pobierajac liczbe z edita (pomijam zabezpieczenia przed niewlasciwym znakiem bo nie o tym mowa).
Teraz gdy juz moj string grid ma odpowiednia ilosc kolumn zadeklarowana przez usera chcialbym aby teraz user mogl ustawic sobie rozna dlugosc w roznych kolumnach np. kolumna 1 ma miec 10 rowsow kolumna 2 ma ich miec 50 kolumna 3 np 3 itd itd ... Czy da sie tak zrobic jesli tak to jak ??

0

Włączasz w StrigGrid1.Options.goRowSizing i gocolsizing wtedy user może myszka regulować wysokość, ewentualnie za pomocą kodu regulijesz wysokosc Stringgrid1.RowHeights[i] gdzie 'i' to numer wiersza, Stringgrid1.ColWidths[i] gdzie 'i' to numer kolumny.

generalnie w normalny sposób nie można zrobić scalania komórek,
ale jak zaczniesz się bawić rysowaniem to jesteś w stanie scalić komórki w stringgridzie.
jak znajdę kodzik to podrzucę, ja wyeliminowałem sringgrida ze swojej aplikacji na rzecz html'a wyświetlanego w WebBrowse. ale wszystko zależy co chcesz osiągnąć

//edit
znalazłem ten kodzik, wklejam tak jak go miałem, jest to kodzik jednego z moich starych raportów.
sposób znaleziony na jakiejś stronce

  If ARow > 1 then exit;
  If ((ACol=5)or(ACol=9)or(ACol=13)or(ACol=17)or(ACol=21)or(ACol=25)
    or(ACol=29)or(ACol=33)or(ACol=37)or(ACol=41)or(ACol=45)or(ACol=49)or(ACol=53)
    or(ACol=57)or(ACol=61)or(ACol=65)) then exit;
  If ((ARow>0) and (ACol>1)) then Exit;

  with sender as tstringgrid do
  begin
// extend rect to include grid line on right, if not last cell in row
    If aCol < Pred(ColCount) Then
      Rect.Right := Rect.Right + GridlineWidth;
    If ((ACol<2) and (ARow=0))  then Rect.Bottom := Rect.Bottom + GridlineWidth;
    If ACol=1 then Rect.Right := Rect.Right - GridlineWidth;

// figure out where the text of the first cell would start relative
// to the current cells rect.
    y:= Rect.Top + 2;
    x:= Rect.Left + 2;
    for i:= 1 to aCol-1 do
      x:= x - ColWidths[i] - GridlineWidth;

// Paint cell
    Canvas.Brush.Color := clBtnFace;//$7FFFFF;
    Canvas.Brush.Style := bsSolid;
    Canvas.FillRect( Rect );

// Paint text of cell 1,1 clipped to current cell.
    Canvas.TextRect( Rect, x, y, Cells[1,1] );
  end;

zasada działania chyba jasna. miłej zabawy

0

Moze napisze wprost o co mi chodzi bedzie latwiej a i moze jakies sugestie sie trafia ;)

Chodzi o to ze mam napisac program ktory pobiera ciag znakow z pliku txt (to juz mam) nastepnie user ma sobie ustalic odpowiednia ilosc kolumn w stringgrid a potem ilosc rows w tych kolumnach a na koniec program ma tak podzielic text z pliku aby do kazdej kolumny string grid wpisala sie tylko taka ilosc znakow jaka poda user

example:
ciag znakow:
aaaaaaaaabbbbbbbbbdacaaace2222222caswcaawwwwwwww

user podaje ze do pierwszej kolumny ma sie wpisac 9 znakow w do drugiej 20 znakow itd itd a nastepnie ma to wygladac tak:
a b
a b
a b
a b
a b
a b
a b
a b
a b
d
a
c

itd itd itd ;) (niekoniecznie musza to byc string gridy po prostu ma to byc w jakichs tabelkach

0

Propozycja:

paintbox + scrollbox + stare dobre rysowanie po kanwie

będzie na 100% tak jak sobie zażyczysz

0

Panowie nie do konca mi o to chodzi zrobilem cos takiego:

for i:=1 to StrToInt(Edit1.Text) do
StringGrid1.RowCount:=i;

Ale niestety to dziala do wszystkich rowsow a jak ustawic rozne dlugosci dla roznych kolumn ??

0
woolfik napisał(a)

Panowie nie do konca mi o to chodzi zrobilem cos takiego:

for i:=1 to StrToInt(Edit1.Text) do
StringGrid1.RowCount:=i;

Ale niestety to dziala do wszystkich rowsow a jak ustawic rozne dlugosci dla roznych kolumn ??

Moim zdaniem prościej będzie naprawdę rysować bezpośrednio po canvasie.

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