![]() |
Zahleneingabe in StringGrid, Lineare Gleichungssysteme
Liste der Anhänge anzeigen (Anzahl: 2)
Eingabe von Zahlen in eine StringGrid-Komponente
Zellen einer TStringGrid-Komponente mit zugewiesenen Masken entsprechen TMaskEdit-Komponenten. Damit programmiert sich die Eingabe bzw. Edition von Dezimalzahlen in TStringGrid im Prinzip wie in TMaskEdit-Feldern. Da die Eigenschaften MaxLength, SelLength und Tag sowie der OnExit-Event für die einzelnenZellen fehlen ist folgendes zu beachten: · Ein Feld des StringGrids ist nach Auswahl einer neuen Zelle und beim Verlassen des Gitter zu formatieren, d.h. mit den Ereignissen OnSelectCell und OnExit. · Die Eigenschaft Text der TMaskEdit-Komponente ist durch Cells[Col, Row] zu ersetzen. Nachdem das Gitter den Focus erhalten hat, bewegt man sich mit Tab zeilenweise durch alle Zellen. Mit den Cursortasten kann man andere Wege gehen. Alle Zellen werden automatisch selektiert Die Eingabe eines neuen Wertes kann sofort begonnen werden und folgt der natürlichen Reihenfolge der Zeichen, wobei das Komma für den Dezimalpunkt verwendet werden kann. Zur Edition des im Feld stehenden Wertes drückt man F2. Im Edit-Zustand bewegen die horizontale Kursortasten wie gewohnt den Textcursor. Am Feldende wechselt man mit den Kursortasten Links und Rechts ins Nachbarfeld.
Delphi-Quellcode:
Im StringGrid sind die Options
//*** Edition der Matrix im Stringgrid ***********************************
// Maske für die Felder setzen procedure TForm1.StringGridGetEditMask(Sender: TObject; ACol, ARow: Integer; var Value: String); begin Value:= Fmt end; procedure TForm1.StringGridKeyPress(Sender: TObject; var Key: Char); begin if Key=',' then Key:= '.'; // Komma zur Eingabe Dezimalpunkt zulassen if Key='+' then Key:= char(0); // Kein '+' als Vorzeichen with StringGrid1 do // Kein zweites Vorzeichen if (Key='-') and (Pos('-', Cells[Col, Row])>0) and not isFirst then Key:= char(0); if Key=#9 then isFirst:= true else isFirst:= false; end; procedure TForm1.Korr; // Korrektur beim Verlassen der Zelle var s: string; w: extended; k: integer; begin with StringGrid1 do begin s:= Trim(Cells[Col, Row]); k:= Pos(' ', s); // Leerzeichen entfernen while k>0 do begin Delete(s, k, 1); k:= Pos(' ', s) end; // Vorzeichenbehandlung: '-' vor erste Ziffer k:= Pos('-', s); if k>1 then begin Delete(s, k, 1); s:= '-' + s end; if s='' then w:=0 // 0 mit leerem Eingabefeld else w:= StrToFloat(s); // wandeln Str(w:Len:Dez, s); // formatieren Cells[Col, Row]:= s end // und in Celle zurückschreiben end; // Neue Zelle selektiert procedure TForm1.StringGridSelectCell(Sender: TObject; Col, Row: Longint; var CanSelect: Boolean); begin with Sender as TStringGrid do Korr; // Verlassene Zelle korregieren end; procedure TForm1.StringGridExit(Sender: TObject); // StringGrid verlassen begin with Sender as TStringGrid do Korr; // Verlassene Zelle korregieren end; [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzL ine,goEditing,goTabs,goAlwaysShowEditor] und ‘Courier New’ als Font gesetzt. Als Beispiel für die Verwendung: Lineare Gleichungssysteme nach Gauß. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 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