![]() |
stringgrid und eingabe von zahlen
Ein kleines stringgrid-Problem.
Wie kann ich eine zweispaltige stringgrid so einrichten, dass a. in der ersten Spalten keine Änderungen der Eingabe möglich ist und b. in der 2. Spalte nur Zahleneingaben möglich sind (bei edit-feldern kann man ja mit keypressed arbeiten, was in einer strinngrid wohl nicht möglich ist) c. die Returntaste sich nur auf die 2. Spalte bezieht, da ja hier die Eingaben erfolgen. |
AW: stringgrid und eingabe von zahlen
Gibt es die Eigenschaft FixecColumns oder so ähnlich beim Stringgrid?
|
AW: stringgrid und eingabe von zahlen
Bei TStringGrid und Co. kann man oftmals einen anderen "Editor" angeben, welcher verwendet werden soll.
Dafür leitet man sich z.B. eine neue Komponente vom Standardeditor ab, baut dort seine Erweiterungen ein, gibt diese zur Erstellung/Nutzung an und fertig. Hier oder im Delphi-Treff sollte sich irgendwo ein Beispiel/Tutorial finden lassen. Zitat:
|
AW: stringgrid und eingabe von zahlen
Ich muss zu geben, das wäre mir ohne Beispiel selbst zu hoch. Oder ich müsste ziemlich heftig googeln.
|
AW: stringgrid und eingabe von zahlen
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin StringGrid1.EditorMode := true; end; procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char); begin if not (key in ['0'..'9']) then key := #0; // evt. noch nach Bedarf '.',',','+','-' in das Set zufügen end; procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin with StringGrid1 do if Col = 1 then Stringgrid1.Options := Stringgrid1.Options - [goEditing] else Stringgrid1.Options := Stringgrid1.Options + [goEditing]; end; |
AW: stringgrid und eingabe von zahlen
Nja, es ist nicht schwer, nur ist die API etwas schrottig. :angle2: (hätte man z.b. ein OnShowEditor angeboten, wäre es etwas einfacher)
Da das InplaceEdit quasi ein TMaskEdit ist, kann man ihm, über TStringGrid.OnGetEditMask auch eine ganz normale Maske zuweisen. Der offizielle Weg, für ein eigenes InplaceEdit:
Delphi-Quellcode:
Mein kleiner Hack:
type
TMyInplaceEdit = class(TInplaceEdit) ... end; TMyStringGrid = class(TStringGrid) protected function CreateEditor: TInplaceEdit; override; end; function TMyStringGrid.CreateEditor: TInplaceEdit; begin // kein inherited Result := TMyInplaceEdit.Create(Self); end;
Delphi-Quellcode:
type
THackedStringGrid = class(TStringGrid) end; // was das ist, verrat ich nicht :P THackedInplaceEdit = class(TInplaceEdit) end; procedure TForm1.FormCreate(Sender: TObject); var O: TGridOptions; M: Boolean; begin with THackedStringGrid(StringGrid1) do begin Handle; // *grins* O := Options; M := EditorMode; try Options := Options + [goEditing, goAlwaysShowEditor] - [goRowSelect]; EditorMode := True; InvalidateEditor; // den InlaceEditor erstellen lassen finally EditorMode := M; Options := O; end; with THackedInplaceEdit(InplaceEditor) do begin // // Hier kann man alles tun, was man mit einem TEdit/TMaskEdit auch machen kann. NumbersOnly := True; //OnChange := MyEditOnChange; // end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 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