![]() |
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:
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.
procedure TForm2.StringGridSetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String); begin If length(Value) > 1 then StringGrid.Cells[ACol, ARow] := Value[1]; end; 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? |
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:
Grüße vom marabu
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; |
Re: StringGrid: Nach Eingabe eines Zeichens weiterspringen
Hallo,
ich hab mich gestern noch an dieses Problem gewagt und hab folgendes gemacht:
Delphi-Quellcode:
Die Option "goEditing" hab ich wieder auf false gesetzt - brauch ich ja jetzt nicht mehr!
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; 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