![]() |
StringGrid Zellen wie Excel Kommastellen unterdrücken
Hallo allerseits,
habe wieder mal ein Problem, finde aber keine Lösung, ggf. gibt es keine? Ich habe ein StringGrid in das ich berechnete werte schreibe. Es handelt sich dabei um Arbeitszeiten, dezimal. Ein beispiel: ich berechne die Differenz von 04:30 zu 13:20 und bekomme dezimal 8.33333333 Stunden raus. In Excel auch. Nun schreibe ich das in ein StringGrid, damit ich aber im StringGrid nur 8.33 angezeigt bekommen, also nur 2 Nachkommastellen schreibe ich es mit folgendem Code rein:
Delphi-Quellcode:
Das Problem ist nun, wenn ich nachfolgend Berechnungen mit den StringGrideinträgen durchführe, bekomme ich falsche Ergebnisse:
StringGrid2.Cells[7, i] := format('%2.2f',[xsum]);
Beispiel: 8.33 + 8.33 + 8.33 + 8.83 etc. ergibt ein kleineres Ergebnis als 8.3333333 + 8.3333333 + 8.3333333 + 8.8333333 etc. So, in Excel wird in der zelle 8,33 angezeigt, wenn ich die Anzeige ändere sehe ich jedoch das tatsächlich 8,33333333 drin steht. Im StringGrid scheint tatsächlich nur 8.33 drin zu stehen und die restlichen Nachkommastellen werden nicht nur nicht angezeigt, sie sind tatsächlich nicht da. Gibt es da eine Lösung? |
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
Hallo Stecky2000,
zum Unterschied zu Excel formatiertst Du im StringGrid nicht die Werte auf 2 Stellen sondern schreibst tatsächlich nur 2 Nachkomastellen rein. Das gleiche Ergebnis bekommt man in Excel auch wenn man 8.33 reinschreibt. Entweder schreibt man die original Werte ins StringGrid und formatiert die Werte jeder Zelle auf 2 Nachkommastellen, oder man führt die Berechnungen direkt mit den Zahlenwerte durch und zeigt sie im StringGrid nur an. Bis bald Chemiker |
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
Um das Verhalten von Excel nachzubilden, musst du die eigentlichen Werte getrennt speichern.
|
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
Ich hoffe ich verstehe Dich richtig.
1. Ich kann die Berechnungen nicht mit anderen Werten durchführen. Das StringGrid hat 9 Spalten und 25 Zeilen. Die erste Spalte trägt die laufenden Nr., die erste Zeile die Bezeichnung Mo, Di, Mi bis So und eine Summenspalte. In jeder Zeile werden die Werte der Tage addiert und in die Summenspalte geschrieben. Die Werte aller Zeilen in der Summenspalte werden wiederum addiert und der Wert dann zu weiteren Berechnung verwendet. 2. Du schreibst "die Werte original ins StringGrid schreiben und auf 2 Nachkommastellen formatieren". Genau das will ich, aber wie? |
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
Steht doch oben
|
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
Wo oben? Meinst Du deine Aussage mit dem getrennt speichern?
Das würe ich so verstehen, dass ich ein weiteres StringGrid einfüge und die Eigenschaft Visible auf False setze und das zum Rechnen nehme. |
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
Nein das Format()
|
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
Sorry, ich bin ja kein Programmierer.
Ich blicke nicht durch. Ich habe das Format zum in die Zellen schreiben benutzt, das kürzt doch aber die Stellen?! |
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
Ja deshalb der der Vorschlag mit dem getrennt speichern oder halt Ownerdraw
|
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
Danke, dann werde ich tatsächlich ein zweites unsichtbares Grid verwenden.
Ich hoffe es wird der Performance kein Abbruch tun ;-) |
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
Hallo Stecky2000,
ich würde versuchen, das mit der TStringGrid.Object – Eigenschaft zu lösen, damit ist es möglich hinter jeder Zelle ein Object dranzuhängen. In deinem Fall währe das der original Wert. Bis bald Chemiker |
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
Ich dachte da eher an einen Array o.ä.
|
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
oder am einfachsten OwnerDraw ... in den Zellen steht dann der richtige Wert, aber angezeigt/gezeichnet wird nur der per Format gerundete.
|
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
bau dir dich am besten 'n schönes objekt auf... in dem du die daten mit den algos speicherst. diese objekte hänst du in eine ObjectList. beim aufbau der objekte schreibst du zusätzlich die addresse in eine zeile/spalte. die berechnungen führst du dann easy über die objekte durch und scheibst nur die ausgabe ins stringgrid.
ist easy, zuverlässig und hinterlässt keine speicherlöcher :-) |
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
Schwer zu verdauen , Eure Kost....
Ich werde mal sehen, was ich hin bekomme. Werde mich mal in Ownerdrw einlesen und schauen, ob ich damit fertig werde. Array ist auch eine Alternative. Ich hatte damit bereits experimentiert. |
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
Hallo Stecky2000,
OwnerDraw ist der Überbegriff, bei StringGrid ist die Suche nach OnDrawCell erfolgreicher. Bis bald Chemiker |
Re: StringGrid Zellen wie Excel Kommastellen unterdrücken
So Jungs, sorry, hab ein wenig länger gebraucht um mich zu melden.
Ich hatte bereits heraus gefunden, das Ownerdraw nur der überbegriff war. Hab das Problem damit gelöst, war gar nicht so schwer ;-) Habs so gemacht:
Delphi-Quellcode:
Danke Euch für die Hilfe. Ich werde bestimmt mit mehr Fragen kommen ;-)
procedure TForm1.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); begin with (Sender as TStringGrid) do begin // Erste Reihe nicht einfärben if (ARow = 0) then Canvas.Brush.Color := clBtnFace else begin if (cells[ACol, ARow] <> '') and (cells[ACol, ARow] <> ' ') then Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Format('2.2f', [StrToFloat (cells[acol, arow])])); end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 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 by Thomas Breitkreuz