Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Stringgrid mit Tausenderpunkt (https://www.delphipraxis.net/190667-stringgrid-mit-tausenderpunkt.html)

bcvs 24. Okt 2016 10:18

Stringgrid mit Tausenderpunkt
 
Hallo,

ich habe eine Kundenanforderung:
In einem Stringgrid wird eine Zahl eingegeben. Jetzt soll während der Eingabe beim Überschreiten der Tausenderstelle ein Tausenderpunkt erscheinen.

Der User tippt z.B. 100 , dann steht im Editor noch 100, dann tippt er noch eine 0 und im Editor steht 1.000

Hat das schon mal jemand gelöst?

Der schöne Günther 24. Okt 2016 10:41

AW: Stringgrid mit Tausenderpunkt
 
Ich würde es, auf die Schnelle, so machen:

Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var
   asString:   String;
   asInteger:   Integer;
begin
   asString := Edit1.Text;
   asString := asString.Replace(FormatSettings.ThousandSeparator, EmptyStr);

   if Integer.TryParse(asString, asInteger) then begin
      Edit1.Text := String.Format('%.0n', [ asInteger.ToSingle() ]);
      Edit1.SelStart := String(Edit1.Text).Length;
      Edit1.SelLength := 0;
   end;
end;
Finde es aber keine gute Idee, weil so etwas nie vernünftig klappt wenn ich z.B. am Anfang oder mittendrin mit dem Tastatur-Cursor etwas herauslösche dann der String wieder kürzer werden kann. Das verwirrt immer. Ich würde, zum schön aussehen, ein Label daneben machen wo es im Endeffekt noch einmal redundant, aber im "schön" drinsteht. Denn als nächstes willst du einen Suffix wie ein Währungszeichen noch mit drin haben, da wird das noch verwirrender. Ich würde es nicht machen.

DeddyH 24. Okt 2016 10:53

AW: Stringgrid mit Tausenderpunkt
 
Ich denke, man kann so etwas zwar machen, aber nicht während der Eingabe (wie Günther bereits erläutert hat), sondern erst nach dem Editieren.

Sherlock 24. Okt 2016 11:36

AW: Stringgrid mit Tausenderpunkt
 
Mal ins Blaue geschossen: Eventuell als Editor ein TMaskedEdit verwenden, das entsprechend Tausenderstellen als Maske hat?

Sherlock

Uwe Raabe 24. Okt 2016 11:53

AW: Stringgrid mit Tausenderpunkt
 
Zitat:

Zitat von Sherlock (Beitrag 1351881)
Mal ins Blaue geschossen: Eventuell als Editor ein TMaskedEdit verwenden, das entsprechend Tausenderstellen als Maske hat?

Das StringGrid verwendet intern ein TInplaceEdit, was ebenso wie TMaskEdit (ich vermute, das meinst du) direkt von TCustomMaskEdit abgeleitet wird. Dementsprechend kann man im OnGetEditMask des TStringGrid bereits eine passende Maske eingeben. Leider ist das MaskEdit aber nicht so richtig auf solche numerischen Eingaben vorbereitet.

bcvs 24. Okt 2016 14:46

AW: Stringgrid mit Tausenderpunkt
 
Ja, das mit dem OnGetEditMask habe ich schon ausprobiert.
Die Maske soll in meinem Fall aber nicht verwendet werden, wenn der einzugebende Wert <=100 ist. Erst wenn die 1000er- Stelle ins Spiel kommt, soll der Punkt eingeblendet werden.

Ich habe jetzt den Kunden davon überzeugen können, dass das nicht optimal ist und jetzt werden die Zahlen erst nach der Eingabe formatiert und rechtsbündug im Grid angezeigt.

Aviator 24. Okt 2016 15:08

AW: Stringgrid mit Tausenderpunkt
 
Naja. Zur Not kann man sowas ja immer noch selbst programmieren. Ist zwar etwas Aufwand alle Eventualitäten abzufangen, aber das hat das Programmieren eben so an sich. :stupid:

Sherlock 24. Okt 2016 15:19

AW: Stringgrid mit Tausenderpunkt
 
Es ist immer wieder schön zu hören, daß es noch einsichtige Kunden gibt. :thumb:

Ich gratuliere Dir dazu.

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 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