StringGrid; Pomijanie wierszy o wysokosci -1

0

Witam
A wiec mam taki problem ze mam StringGrida w nim ileś tam wierszy, wyszukiwanie mam tak zrobione ze niezgodne z podanym kryterium wiersze ukrywam (ustawiam wysokość na -1)
i teraz sedno... zostaje kilka widocznych wierszy naciskam strzałkę w dol i on mi zaznacza te ukryte wiersze a jak zrobić żeby od razu przeskakiwał do następnego wiersza który jest większy od -1??
ja zrobilem coś takiego ze OnKeyPress zamieściłem taki kod:

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
Begin
  if key = #80 then
    for i := stringgrid1.row + 1 to StringGrid1.RowCount + 1 do
      if stringgrid1.RowHeights[i] > 0 then
        Begin
          stringgrid1.Row := i;
          Break;
        End;
end;

no ale dalej nie przeskakuje :(

Pomrzecie?? ;-)

// nie, nie pomrzemy, w każdym razie nie większość z nas przez najbliższe kilkadziesiąt lat. nie dubluj postów - Ł
// :)

0

Zdarzenie OnSelectCell obiektu StringGrid

StringGrid.OnSelectCell(...);
begin
if StringGrid1.RowHeights[ARow] < 0 then
begin
CanSelect := false;
end;
end;

0

Dzięki za odpowiedz
Niestety nie działa mi to :( nie przeskakuje do innego widocznego wiersza wczytuje się cały czas ten sam wiersz... :/

troszke zmienilem ten kod ale i tak nic z tego, wywala mi jakis blad to przez to ze mam umieszczone StringGrid1.row := i; ale jak tej linijki nie ma to i tak nic się nie dzieje
oto mój kod:

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
var
  i : integer;
begin
for i := StringGrid1.Row + 1 to StringGrid1.RowCount do
  if StringGrid1.RowHeights[i] < 0 then
    CanSelect := false
  else
    Begin
    StringGrid1.Row := i;
    Break
    End;
end;
0

powinno być dla pętli

StringGrid1.RowCount-1
0

:( nic z tego to nic nie pomaga wyskakuje mi taki blad:

Project Project1.exe raised exception class EStackOverflow witch message 'Stack Overflow'.

natomiast jak usunę ta linijkę

    StringGrid1.Row := i;

to się już ten błąd nie wyświetla no ale i tak nie działa

0

pokombinuj w onKeyDown

  if (Key=VK_DOWN) then
    while (StringGrid1.RowHeights[StringGrid1.Row]>0) and (StringGrid1.Row<StringGrid1.RowCount-1) do
      StringGrid1.Row := StringGrid1.Row + 1;

  if Key=VK_UP then
    while (StringGrid1.RowHeights[StringGrid1.Row]>0) and (StringGrid1.Row>1) do
      StringGrid1.Row := StringGrid1.Row - 1;
0

Ja zrobilem coś takiego i działa :) w końcu:P

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  i : integer;
begin
if (Key=VK_DOWN) then
  for i := StringGrid1.Row + 1 to StringGrid1.RowCount - 1 do
    if StringGrid1.RowHeights[i] > 0 then
      Begin
      StringGrid1.Row := i - 1;  Break
      End;

if (Key=VK_UP) then
  for i := StringGrid1.Row - 1 downto 1 do
    if StringGrid1.RowHeights[i] > 0 then
      Begin
      StringGrid1.Row := i + 1;  Break
      End;
end;

Dzięki za odpowiedzi i pomoc w problemie

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