Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Strings in Stringgrid Spalten mit Währung Formatieren (https://www.delphipraxis.net/173629-strings-stringgrid-spalten-mit-waehrung-formatieren.html)

Natcree 7. Mär 2013 14:23

Strings in Stringgrid Spalten mit Währung Formatieren
 
Hallo suche nach einer Lösung ein Fixes Format für Spalten in einem Stringgrid.
Ist für ein Kassenbuch Programm. Die Spalten sollten das Format #,## € Ausgeben bzw. -#,## €.

Habe schon mit einer Schleife Versucht.

Delphi-Quellcode:
form1.ElTreeStringGrid1.Cells[4,j] := Format('%.2f', [Gleitkommawert]);
Gleitkommawert erkennt er nicht.

Kann mir jemand helfen??

mkinzler 7. Mär 2013 14:25

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Heist die Variable auch so?

Natcree 7. Mär 2013 14:30

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
nee er soll die spalte 4 vom stringgrid formatieren .
welche Variable muss denn rein???

Natcree 7. Mär 2013 14:33

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Delphi-Quellcode:
for j:= form1.ElTreeStringGrid1.row to form1.ElTreeStringGrid1.RowCount-1 do
begin
Summe1   := strtofloatdef(form1.eltreestringgrid1.cells[2,j],0) + strtofloatdef(form1.eltreestringgrid1.cells[3,j],0);
Summe2   := strtofloatdef(form1.eltreestringgrid1.cells[4,j-1],0);
Ergebnis := Summe1 + Summe2;

form1.eltreestringgrid1.cells[4,j] := Format('%.2f', [Floattostr(ergebnis)]);

p80286 7. Mär 2013 14:57

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Entscheid' Dich
Delphi-Quellcode:
format
oder
Delphi-Quellcode:
FloattoStr
Du kannst natürlich auch
Delphi-Quellcode:
Format(%S ,floattostr(wert))
nutzen.

Gruß
K-H

Natcree 7. Mär 2013 15:11

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Mit format aber die Ausgabe im stringrid ist ne einfache Zahl ohne Währung und nun??

Delphi-Quellcode:
for j:= form1.ElTreeStringGrid1.row to form1.ElTreeStringGrid1.RowCount-1 do
begin
Summe1   := strtofloatdef(form1.eltreestringgrid1.cells[2,j],0) + strtofloatdef(form1.eltreestringgrid1.cells[3,j],0);
Summe2   := strtofloatdef(form1.eltreestringgrid1.cells[4,j-1],0);
Ergebnis := Summe1 + Summe2;

form1.eltreestringgrid1.cells[4,j] := Format('%s', [Floattostr(ergebnis)]);

end;

wenn ich 5 eingebe soll er 5,00 € anzeigen die eingegebenen Werte sollen aber auch Später wieder mit in eine Addition genommen werden. ein € hinter zusetzen ist kein Problem aber wenn dies ein mal drinne ist zeigt er mir fehler an das 5,00 € z.b. kein float wert ist.

DeddyH 7. Mär 2013 15:20

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Delphi-Quellcode:
eltreestringgrid1.cells[4,j] := Format('%.2n €', [Ergebnis]);

Natcree 7. Mär 2013 15:33

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
deddyh funktioniert aber wenn ich mit einer eingabe mache kommt ein fehler . '%.2n €' ungültiges argument

Delphi-Quellcode:
stringgrid1.cells[2,i]:=Format('%.2n €', [Edit3.text])

Hier mal der komplette code

Delphi-Quellcode:
procedure TForm7.Button2Click(Sender: TObject);
var
i,j:integer;
Summe1,Summe2,Ergebnis: double;
begin
edit5.text:='';
edit6.text:='';
edit7.Text:='';
if label11.caption='b' then i:=form1.ElTreeStringGrid1.Row
else i:=form1.ElTreeStringGrid1.RowCount-1;
form1.eltreestringgrid1.Cells[0,i]:=edit1.Text;
form1.eltreestringgrid1.Cells[1,i]:=edit4.Text;
form1.eltreestringgrid1.Cells[2,i]:=Format('%.2n €', [Edit3.text]);
form1.eltreestringgrid1.Cells[3,i]:='';
form1.eltreestringgrid1.Cells[5,i]:=edit2.Text;
form1.eltreestringgrid1.Cells[6,i]:=memo1.Text;
form7.edit1.Text:='';
form7.edit4.Text:='';
form7.edit3.Text:='';
form7.edit2.Text:='';
form7.memo1.Text:='';
form7.edit5.Text:='';
form7.edit6.Text:='';
form7.edit7.Text:='';
form7.edit8.Text:='';
form7.memo2.Text:='';
if label11.Caption='b' then j:= form1.ElTreeStringGrid1.Row;
for j:= form1.ElTreeStringGrid1.row to form1.ElTreeStringGrid1.RowCount-1 do
begin
Summe1   := strtofloatdef(form1.eltreestringgrid1.cells[2,j],0) + strtofloatdef(form1.eltreestringgrid1.cells[3,j],0);
Summe2   := strtofloatdef(form1.eltreestringgrid1.cells[4,j-1],0);
Ergebnis := Summe1 + Summe2;
form1.eltreestringgrid1.cells[4,j] := Format('%.2n €', [Ergebnis]);
end;
if label11.Caption='' then
for j:= 1 to form1.ElTreeStringGrid1.RowCount-1 do
begin
Summe1   := strtofloatdef(form1.eltreestringgrid1.cells[2,j],0) + strtofloatdef(form1.eltreestringgrid1.cells[3,j],0);
Summe2   := strtofloatdef(form1.eltreestringgrid1.cells[4,j-1],0);
Ergebnis := Summe1 + Summe2;
form1.eltreestringgrid1.cells[4,j] := Format('%.2n €', [Ergebnis]);
end;
if SysUtils.FileExists('c:\Programme\Vereintool\Daten\Kassenbuch\'+FormatDateTime('yyyy', now)+'\Handkasse '+FormatDateTime('yyyy', now)+'.xls') then
DeleteFile('c:\Programme\Vereintool\Daten\Kassenbuch\'+FormatDateTime('yyyy', now)+'\Handkasse '+FormatDateTime('yyyy', now)+'.xls');
SaveAsExcelFile(form1.eltreestringGrid1, 'Tabelle1', 'c:\Programme\Vereintool\Daten\Kassenbuch\'+FormatDateTime('yyyy', now)+'\Handkasse '+FormatDateTime('yyyy', now)+'.xls');
close;
end;

DeddyH 7. Mär 2013 15:38

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Es wäre vielleicht nicht die schlechteste Idee, den Code ordentlich zu formatieren und die Logik von der Darstellung zu trennen, da steigt ja niemand durch :shock:

Natcree 7. Mär 2013 15:52

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Okay versuch ichs mal so



Delphi-Quellcode:
if label11.caption='b' then i:=form1.ElTreeStringGrid1.Row //Hiermit werden die schon vorhandenen Werte geändert
else i:=form1.ElTreeStringGrid1.RowCount-1;//damit die neuen
form1.eltreestringgrid1.Cells[0,i]:=edit1.Text;
form1.eltreestringgrid1.Cells[1,i]:=edit4.Text;
form1.eltreestringgrid1.Cells[2,i]:=edit3.text;//--> wenn ich hier jetzt die Formatierung einbring kann er nicht rechnen
form1.eltreestringgrid1.Cells[3,i]:='';
form1.eltreestringgrid1.Cells[5,i]:=edit2.Text;
form1.eltreestringgrid1.Cells[6,i]:=memo1.Text;


Delphi-Quellcode:
if label11.Caption='b' then j:= form1.ElTreeStringGrid1.Row;// b steht wenn ich werte im stringrid ändern möchte
{hier beginnt die berechnung für die eingegebenen werte}
for j:= form1.ElTreeStringGrid1.row to form1.ElTreeStringGrid1.RowCount-1 do
begin
Summe1   := strtofloatdef(form1.eltreestringgrid1.cells[2,j],0) + strtofloatdef(form1.eltreestringgrid1.cells[3,j],0);
Summe2   := strtofloatdef(form1.eltreestringgrid1.cells[4,j-1],0);
Ergebnis := Summe1 + Summe2;
form1.eltreestringgrid1.cells[4,j] := Format('%.2n €', [Ergebnis]);
end;// hier endet sie

if label11.Caption='' then // wenns leer ist dann sind es neue Daten die eingefügt werden
{Hier fängt wieder die berechnung an}

for j:= 1 to form1.ElTreeStringGrid1.RowCount-1 do
begin
Summe1   := strtofloatdef(form1.eltreestringgrid1.cells[2,j],0) + strtofloatdef(form1.eltreestringgrid1.cells[3,j],0);
Summe2   := strtofloatdef(form1.eltreestringgrid1.cells[4,j-1],0);
Ergebnis := Summe1 + Summe2;
form1.eltreestringgrid1.cells[4,j] := Format('%.2n €', [Ergebnis]);
end;

DeddyH 7. Mär 2013 15:57

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Ich sag ja: Du rechnest mit der Darstellung der Werte, nicht mit den Werten selbst. Daher bekommst Du Probleme, wenn Du diese Darstellung änderst.

Natcree 7. Mär 2013 15:59

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
wie kann ich das am besten ändern???

p80286 7. Mär 2013 16:09

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Indem Du Dich hinsetzt, und mit einem Bleistift und Papier programmierst.
Zunächst solltest Du dich fragen was Du hast( was steht den in spalte2,3 und vier?)
Ist das vielleicht Nettobetrag,MWST und Bruttobetrag?

dafür würde sich z.B. ein Record anbieten.

Wenn Du mit der Datendefinition fertig bist, dann schreib einmal die notwenendigen Arbeitschritte auf, und bring sie in einen logischen Zusammenhang (ablaufplan).

Jetzt mußt Du nur nochdas alles in Delphi übersetzen, und eine entsprechende Oberfläche bauen.
Fertig.

Gruß
K-H

Natcree 7. Mär 2013 16:17

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
so ähnlich habe ich auch begonnen. ich möchte das alle daten in den 3 Spalten 0,00 € als Format haben sollen (bzw. so visuell wiedergegeben werden sollen)

Die Berechnung der Spalten funktioniert. jedoch nicht mit den Format werten. Wie kann ich diese Trennen???

mkinzler 7. Mär 2013 16:23

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Datenhaltung von der Anzeige trennen ( du verwendest das Grid gleichzeitig als Datenspeicher)

Natcree 7. Mär 2013 16:24

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
japp ist richtig habe nur noch nicht viel mit records gearbeitet.

DeddyH 7. Mär 2013 16:44

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Wie wäre es denn mit so etwas?
Delphi-Quellcode:
type
  TIrgendwas = class
  private
    FErsteZahl,
    FZweiteZahl: double;
    procedure SetErsteZahlAsString(const Value: string);
    procedure SetZweiteZahlAsString(const Value: string);
    function GetErsteZahlAsString: string;
    function GetZweiteZahlAsString: string;
  public
    property ErsteZahl: double read FErsteZahl write FErsteZahl;
    property ZweiteZahl: double read FZweiteZahl write FZweiteZahl;
    property ErsteZahlAsString: string read GetErsteZahlAsString write SetErsteZahlAsString;
    property ZweiteZahlAsString: string read GetZweiteZahlAsString write SetZweiteZahlAsString;
  end;

  ...
 
{ TIrgendwas }

function TIrgendwas.GetErsteZahlAsString: string;
begin
  Result := Format('%.2n', [FErsteZahl]);
end;

function TIrgendwas.GetZweiteZahlAsString: string;
begin
  Result := Format('%.2n', [FZweiteZahl]);
end;

procedure TIrgendwas.SetErsteZahlAsString(const Value: string);
begin
  if not TryStrToFloat(Value, FErsteZahl) then
    raise Exception.CreateFmt('Ungültige Eingabe: %s', [Value]);
end;

procedure TIrgendwas.SetZweiteZahlAsString(const Value: string);
begin
  if not TryStrToFloat(Value, FZweiteZahl) then
    raise Exception.CreateFmt('Ungültige Eingabe: %s', [Value]);
end;
Das in eine TObjectList gesteckt (Bezeichner für ErsteZahl und ZweiteZahl natürlich an den tatsächlichen Zweck angepasst) und ausgeben, sollte recht einfach machbar sein.

Natcree 7. Mär 2013 17:34

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
sieht erstmal viel aus wie krieg ich das in meinen code eingebunden??

DeddyH 7. Mär 2013 18:05

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Nehmen wir mal an, Du hast so eine TObjectList deklariert und instanziert. Dann machen wir mal ein Eingabeformular mit 2 Edits. Auf ButtonClick erstellen wir ein neues Objekt und fügen es der Liste hinzu. Bei Fehleingaben sagen wir dem Benutzer Bescheid und entsorgen das gerade Objekt gleich wieder. Ungetestet:
Delphi-Quellcode:
procedure TEingabeform.ButtonDingsdaClick(Sender: TObject);
var
  Irgendwas: TIrgendwas;
begin
  Irgendwas := TIrgendwas.Create;
  try
    Irgendwas.ErsteZahlAsString := edtErsteZahl.Text;
    Irgendwas.ZweiteZahlAsString := edtZweiteZahl.Text;
    Objektliste.Add(Irgendwas);
  except
    on E: Exception do
      begin
        MessageBox(0, PChar(E.Message), nil, MB_OK or MB_ICONERROR);
        Irgendwas.Free;
      end;
  end;
end;

Natcree 8. Mär 2013 10:23

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Zitat:

Zitat von DeddyH (Beitrag 1206444)
Nehmen wir mal an, Du hast so eine TObjectList deklariert und instanziert.

wie kann ich eine tobjektlist declarieren und instanzieren??

DeddyH 8. Mär 2013 10:26

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Delphi-Quellcode:
uses ..., Contnrs;

...

DeineListe := TObjectList.Create;
Die Liste hat einen Konstruktor-Parameter namens OwnsObjects mit Standardwert true. Ist dieser gesetzt, gibt die Liste die enthaltenen Objekte automatisch frei, sobald diese aus ihr entfernt werden.

Natcree 8. Mär 2013 10:43

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Delphi-Quellcode:
   except
     on E: Exception do
       begin
         MessageBox(0, PChar(E.Message), nil, MB_OK or MB_ICONERROR);
         Irgendwas.Free;
       end;
Was haben denn die letzten code zeilen zu sagen???

mkinzler 8. Mär 2013 11:04

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Zitat:

Zitat von Natcree (Beitrag 1206485)
Delphi-Quellcode:
   except
     on E: Exception do
       begin
         MessageBox(0, PChar(E.Message), nil, MB_OK or MB_ICONERROR);
         Irgendwas.Free;
       end;
Was haben denn die letzten code zeilen zu sagen???

Ist ein Exception-Handler, wenn ein Fehler auftritt wird dieser abgefangen

Mit Grundlagenwissen ist bei dir aber auch nicht weit her.

Natcree 8. Mär 2013 11:08

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
okay wie bekomme ich meine daten wieder Ausgegeben???

Habe die Eingabe jetzt so

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
 var
   deineliste: Tirgendwas;
 begin
   Deineliste := Tirgendwas.Create;
   try
     deineListe.ErsteZahlAsString := edit1.Text;
     deineliste.ZweiteZahlAsString := edit2.Text;
     deineliste.Add(deineliste);
   except
     on E: Exception do
       begin
         MessageBox(0, PChar(E.Message), nil, MB_OK or MB_ICONERROR);
         deineliste.Free;
       end;
   end;
 end;

DeddyH 8. Mär 2013 11:16

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Die Liste muss vom Typ TObjectList sein, die hinzuzufügenden Objekte vom Typ TIrgendwas (oder wie Du die Klasse auch immer nennen willst).

[edit] Und Du gibst die Liste nur im Fehlerfall frei, das kann ja auch nicht richtig sein. [/edit]

Natcree 8. Mär 2013 11:30

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Okay habs mal umgeschrieben

Delphi-Quellcode:
type
   Tirgendwas = class(tobjectlist)
....
procedure TForm1.Button1Click(Sender: TObject);
 var
   irgendwas: Tirgendwas;
 begin
   irgendwas := Tirgendwas.Create;
   try
     irgendwas.ErsteZahlAsString := edit1.Text;
     irgendwas.ZweiteZahlAsString := edit2.Text;
     irgendwas.Add(irgendwas);
   except
     on E: Exception do
       begin
         MessageBox(0, PChar(E.Message), nil, MB_OK or MB_ICONERROR);
         irgendwas.Free;
       end;
   end;
 end;
Die wiedergabe möchte ich so machen kommt aber nur 0,00 raus
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
   irgendwas: Tirgendwas;
begin
edit3.text := irgendwas.ErsteZahlAsString;
end;

mkinzler 8. Mär 2013 11:35

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Solange irgendwas eine lokale Vaiable ist, funktioniert das nur in der Methode, in der du es deklariert hast. Die gleichnamige Variable in der anderen Methode ist eine andere lokale Variable. Du musst diese Global oder besser als Attribut der Klasse anblegen.

Natcree 8. Mär 2013 11:45

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Das heist es geht nur so

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
 var
   irgendwas: Tirgendwas;
 begin
   irgendwas := Tirgendwas.Create;
   try
     irgendwas.ErsteZahlAsString := edit1.Text;
     irgendwas.Add(irgendwas);
     edit3.text := irgendwas.ErsteZahlAsString;<-------------
   except
     on E: Exception do
       begin
         MessageBox(0, PChar(E.Message), nil, MB_OK or MB_ICONERROR);
         irgendwas.Free;
       end;
   end;
 end;
dann wir dauch alles richtig ausgegeben. Gut soweit erstmal

jetzt muss ich nur noch die Stringrid.cells (Spalten und berechnungen eingeben) Richtig???

mkinzler 8. Mär 2013 11:48

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Nein.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
 var
   irgendwas: Tirgendwas;
ist lokal!!!!!!

Du solltestest dich wirklich mit den Grundlagen befassen.

Natcree 8. Mär 2013 11:51

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
wie komme ich an diese ran?

mkinzler 8. Mär 2013 11:53

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
An was? Grundlagen?

Bücher
Unterricht
Tutorials
Delphi-Hilfe/PDF Anleitung

http://www.delphi-treff.de/object-pascal/syntax/
http://www.delphi-treff.de/tutorials/
http://www.christian-stelzmann.de/do...hkurs_reloaded

p80286 8. Mär 2013 11:55

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
oder über google "grundlagen delphi"
dann findest Du das hier

Gruß
K-H

DeddyH 8. Mär 2013 13:47

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
E-Book vom Delphi-Treff

DeddyH 8. Mär 2013 18:56

AW: Strings in Stringgrid Spalten mit Währung Formatieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich habe mal eine kleine Demo gebaut. Sie ist zwar längst nicht perfekt, sollte aber das Prinzip zumindest andeuten.


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