Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   stringgrid und eingabe von zahlen (https://www.delphipraxis.net/164680-stringgrid-und-eingabe-von-zahlen.html)

Hartfrid Krause 24. Nov 2011 16:00

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.

Luckie 24. Nov 2011 16:14

AW: stringgrid und eingabe von zahlen
 
Gibt es die Eigenschaft FixecColumns oder so ähnlich beim Stringgrid?

himitsu 24. Nov 2011 16:20

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:

a b c ...
Eigentlich ja nur eine Frage pro Thread.

Luckie 24. Nov 2011 17:03

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.

ASM 24. Nov 2011 17:07

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;

himitsu 24. Nov 2011 19:20

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:
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;
Mein kleiner Hack:
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 19:51 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