AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi Zahleneingabe in StringGrid, Lineare Gleichungssysteme
Thema durchsuchen
Ansicht
Themen-Optionen

Zahleneingabe in StringGrid, Lineare Gleichungssysteme

Ein Thema von Dipl Phys Ernst Winter · begonnen am 4. Mai 2009
Antwort Antwort
Dipl Phys Ernst Winter

Registriert seit: 14. Apr 2009
Ort: Jena
103 Beiträge
 
Delphi 3 Professional
 
#1

Zahleneingabe in StringGrid, Lineare Gleichungssysteme

  Alt 4. Mai 2009, 22:54
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:
//*** 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;
Im StringGrid sind die Options
[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzL ine,goEditing,goTabs,goAlwaysShowEditor]
und ‘Courier New’ als Font gesetzt.

Als Beispiel für die Verwendung: Lineare Gleichungssysteme nach Gauß.
Angehängte Dateien
Dateityp: exe gauss_extended_854.exe (67,7 KB, 13x aufgerufen)
Dateityp: exe stringgridzip_376.exe (48,1 KB, 11x aufgerufen)
Autor: DP Ernst Winter
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz