stringgrid skok do wier. przez przycisk litery...

0

mam taki kod

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
var
i,p:integer;
plitera,literka:string;
begin
While key in ['A'..'Z','a'..'z'] do
  begin
    for i:=1 to stringgrid1.ColCount do
      if stringgrid1.Cells[i,0] = 'Nazwa Gry' then
        begin
        break;
        end;
    for p:=stringgrid1.row+1 to stringgrid1.rowcount do
      begin    {
      plitera := uppercase(stringgrid1.Cells[i,p][1]); }
      literka := uppercase(key);
        if uppercase(stringgrid1.Cells[i,p][1]) = literka then
          begin
          stringgrid1.Row:=p;
          break;
          end;
      end;
  end;

end;

iwstawiony w keypress w stringgridzie

i chce zrobic tak ze jak nacisne s to zeby skoczyl mi do wiersza gdzie sie zaczyna jakies slowo na s

no i jak nacisne na to s to skacze mi do tego wiersza gdzie slowo zapisane w nim zaczyna sie na s ale przed tym wywala mi blad klikne ok i dopiero wtedy zaznacza mi ten wiersz...
co moze byc nie tak?? wiecie moze?? PLZ pomocy!!

a blad jaki mi wywala to :

Project Project1.exe raised exception class EAccessViolation witch message "Access violation at adress 00520397 in module 'Project1.exe' Read of adress 00000000" process stoped. Use step or run to continue

mi chodzi o to ze jak klikne np. a to zeby mi zaznaczalo wiersze ktore sie zaczynaja na litere a itd....

aha i jeszcze jedno pytanie da sie zrobic pauze petli for czyli ze znajdzie mi ten wiersz to petle pauzuje (zamraza) i jak znowy bedzie ona wykonywana to rozpocznie prace od momentu zamrozenia??

0

Nie chce mi się tego całego kodu "studiować" ;P, ale z tego co widzę..

for i:=1 to stringgrid1.ColCount do

czy kolumny nie są czasami numerowane od 0 do ColCount-1 ?? :> i podobnie z wierszami.

if uppercase(stringgrid1.Cells[i,p][1]

Jeżeli komórka jest pusta to pewnie wywali błąd.. ja bym wcześniej dodał jeszcze warunek:

if stringgrid1.Cells[i,p] <> '' then

poza tym ja nie mam zwyczaju stosować break'ów bez potrzeby :P.. zamiast tego bym to bardziej "zagnieździł" ;)
Bo jak myślisz co się stanie gdy nie znajdzie pola: 'Nazwa Gry' ? :P

0

Pozmieniałem to tak jak mówisz i nic to nie dało to samo sie dzieje...1 breaka musze miec zeby mi zatrzymal petle i nie sprawdzal pozostałych wierszy.

kurcze juz nie wiem co z tym zrobic:(:(

0

dziala jezeli w string grid juz jest cos wpisane

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
var
i,p,check:integer;
literka:string;
begin
check:=0;
While (key in ['A'..'Z','a'..'z'])and (check=0) do
begin
for i:=0 to stringgrid1.ColCount-1 do for p:=0 to stringgrid1.rowcount-1 do
begin
literka := uppercase(key);
if ((check<>1)and(uppercase(stringgrid1.Cells[i,p][1])<>'')and(uppercase(stringgrid1.Cells[i,p][1])= literka)) then
begin
stringgrid1.Row:=p;
check:=1;
end;
end;
end;
end;

0

o kurde dziala!!!!
Normalnie WIELKIE DZIEKI za kodzik:):):)

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