Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi StringGrid: Nach Eingabe eines Zeichens weiterspringen (https://www.delphipraxis.net/84588-stringgrid-nach-eingabe-eines-zeichens-weiterspringen.html)

Helmi 18. Jan 2007 22:39


StringGrid: Nach Eingabe eines Zeichens weiterspringen
 
Hallo,

ich brauch mal wieder eure Hilfe.

Ich habe eine StringGrid, bei der in jede Zelle nur ein Zeichen eingegeben werden kann.
Delphi-Quellcode:
procedure TForm2.StringGridSetEditText(Sender: TObject; ACol,
  ARow: Integer; const Value: String);
begin
  If length(Value) > 1 then
    StringGrid.Cells[ACol, ARow] := Value[1];
end;
Nun würd ich aber gerne eines machen, wenn man auf eine Zelle klickt, so dass man etwas eingeben kann, man etwas reinschreibt, das länger als ein Zeichen ist, dass dann die anderen Zeichen auf die folgenden Zellen geschrieben wird.

z. B. ich schreib in die Zelle [0, 0] das Wort "Hallo" rein, dann soll in der Zelle
[0, 0] ein H
[1, 0] ein a
[2, 0] ein l
[3, 0] ein l
[4, 0] ein o

stehen.

Wie kann ich das realisieren?

marabu 19. Jan 2007 08:48

Re: StringGrid: Nach Eingabe eines Zeichens weiterspringen
 
Hallo Helmi,

ich würde in deinem Fall gar nicht mit dem Inplace-Editor (ohne Option goEditing) arbeiten, sondern die Zeicheneingabe selbst verarbeiten:

Delphi-Quellcode:
procedure TDemoForm.StringGridKeyPress(Sender: TObject; var Key: Char);
begin
  with Sender as TStringGrid do
  begin
    Cells[Col, Row] := Key;
    Col := FixedCols + Succ(Col - FixedCols) mod (ColCount - FixedCols);
    if Col = FixedCols then
      Row := FixedRows + Succ(Row - FixedRows) mod (RowCount - FixedRows);
  end;
  Key := #0;
end;
Grüße vom marabu

Helmi 19. Jan 2007 08:56

Re: StringGrid: Nach Eingabe eines Zeichens weiterspringen
 
Hallo,

ich hab mich gestern noch an dieses Problem gewagt und hab folgendes gemacht:
Delphi-Quellcode:
procedure TForm2.StringGridKeyPress(Sender: TObject; var Key: Char);
var
  Zeile : Integer;
  Spalte: Integer;

begin
  with StringGrid do
    begin
      //
      Zeile  := Selection.Top;
      Spalte := Selection.Left;

      If not (Key in ['a'..'z', 'A'..'Z', '0'..'9', #8, #32]) then
        exit;

      If Key = #8 then
        begin
          If (Pred(Spalte) > 0) then
            Spalte := Spalte - 1
          else
            If (Spalte = 1) and (Zeile > 1) then
              begin
                Zeile  := Zeile - 1;
                Spalte := 40;
              end;

          StringGrid.Cells[Spalte, Zeile] := '';
          StringGrid.Col                 := Spalte;

          StringGrid.Row                 := Zeile;

          exit;
        end;

      If (Zeile > 0) and (Spalte > 0) then
        begin
          StringGrid.Cells[Spalte, Zeile] := Key;

          If Spalte < 40 then
            StringGrid.Col               := Spalte + 1
          else
            If Zeile <= 3 then
              begin
                StringGrid.Col           := 1;
                StringGrid.Row           := Zeile + 1;
              end;
        end;
    end;
end;
Die Option "goEditing" hab ich wieder auf false gesetzt - brauch ich ja jetzt nicht mehr!
Jetzt hab ich nur noch das Problem, dass ich auf die "Entf"-Taste u. a. reagieren muss, aber dazu siehe meinen anderen Thrad


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz