Avatar billede pigbear Nybegynder
01. oktober 2003 - 16:52 Der er 8 kommentarer og
1 løsning

Flytte markør til en bestemt celle i stringgrid

Hej

Er der nogen der ved hvordan man kan flytte markøren til en angivet celle i en stringgrid !

Det jeg ønsker er at når brugeren trykker enter
så flyttes markøren til næste kolonne i samme row.

Jeg har tænkt mig noget lignende:
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 Then
"gå til næste celle"
end;

Som standard må man trykke på enter når man har skrevet en tekst, og så med piltastene pile til næste felt, det er lidt dumt synes jeg, så hvis man kan få enter til at flytte markøren for brugeren så bliver det hele mere anvendeligt !

Mvh

PigBear
Avatar billede Slettet bruger
01. oktober 2003 - 17:00 #1
Prøvc det her:

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 Then
  with StringGrid1 do
  begin
    if Col >= ColCount - 1 then
    begin
      if Row <> RowCount - 1 then
      begin
        Row := Row + 1;
        Col := 1
      end;
    end
    else
      Col := Col + 1;
  end;
end;
Avatar billede Slettet bruger
01. oktober 2003 - 17:09 #2
Hvis det bare skal være i samme row kan du gøre sådan:

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 Then
  if not (StringGrid1.Col >= StringGrid1.ColCount - 1) then
    StringGrid1.Col := 1 + StringGrid1.Col;
end;
Avatar billede athlon-pascal Juniormester
01. oktober 2003 - 17:28 #3
Mit løsningsforslag (ikke nødvendigvis bedre end hejhejs):

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
    with StringGrid1 do
    begin
      if (Row < RowCount - 1) or (Col < ColCount - 1)  then
      Col := (Col mod (ColCount - FixedCols)) + FixedCols;
      if (Col = FixedCols) and (Row < RowCount - 1) then
        Row := Row + 1;
    end;
end;
Avatar billede athlon-pascal Juniormester
01. oktober 2003 - 17:32 #4
Min tager hensyn til, at FixedCols ikke nødvendigvis er lig 1 :-)
Avatar billede athlon-pascal Juniormester
01. oktober 2003 - 17:38 #5
Det gjorde den så ikke...
Ny version:

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
    with StringGrid1 do
    begin
      if (Row < RowCount - 1) or (Col < ColCount - 1)  then
        Col := ((Col + 1) mod (ColCount - FixedCols)) + FixedCols;
      if (Col = FixedCols) and (Row < RowCount - 1) then
        Row := Row + 1;
    end;
end;
Avatar billede Slettet bruger
01. oktober 2003 - 18:12 #6
Hvad er FixedCols?? :)
Avatar billede athlon-pascal Juniormester
01. oktober 2003 - 18:16 #7
Det er de grå 3D-kolonner som man ikke kan vælge :-)
Der er også FixedRows :-)
Avatar billede Slettet bruger
01. oktober 2003 - 18:19 #8
Nååh.. så lærte jeg jo også noget i det her spm :-)
Avatar billede athlon-pascal Juniormester
01. oktober 2003 - 18:29 #9
Den her virker faktisk:

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
    with StringGrid1 do
    begin
      if (Row < RowCount - 1) or (Col < ColCount - 1)  then
        Col := ((Col - FixedCols + 1) mod (ColCount - FixedCols)) + FixedCols;
      if (Col = FixedCols) and (Row < RowCount - 1) then
        Row := ((Row - FixedRows + 1) mod (RowCount - FixedRows)) + FixedRows;
    end;
end;


Og den her "går i ring":

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
    with StringGrid1 do
    begin
      Col := ((Col - FixedCols + 1) mod (ColCount - FixedCols)) + FixedCols;
      if (Col = FixedCols) then
        Row := ((Row - FixedRows + 1) mod (RowCount - FixedRows)) + FixedRows;
    end;
end;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester