stringgrid skok do wier. przez przycisk litery...

stringgrid skok do wier. przez przycisk litery...
NO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 55
0

mam taki kod

Kopiuj
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??

Arthan
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
for i:=1 to stringgrid1.ColCount do

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

Kopiuj
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:

Kopiuj
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

NO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 55
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:(:(

BZ
  • Rejestracja: dni
  • Ostatnio: dni
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;

NO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 55
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.