Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stringgrid Zeilensumme in Label ausgeben (https://www.delphipraxis.net/148236-stringgrid-zeilensumme-label-ausgeben.html)

unchained 25. Feb 2010 15:45


Stringgrid Zeilensumme in Label ausgeben
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi Leute.

Ich arbeite wieder an einem Kassenprogramm und möchte die Gesamtsumme der Bestellwerte, welche in ein Stringgrid gelistet werden (Button Bestellung Abgeben) mit einem Knopfdruck in einem Label angezeigt haben (Button Gesamtverkauf des Abends).

ich habe schon verschiedene Methoden und Wege versucht aber nichts hat geklappt. Habs mit Stringgrid-Löschen funktion versucht und die irgendwie umzumodeln, dass sie statt löschen, addiert. Naja... erfolglos. Die Suche und Google spucken auch nichts verlässliches aus.

Das hat mir die suche ausgespuckt: Dort wird die Gesamtsumme im Ende des Stringgrids ausgegeben.

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
y, x : integer;
summe : double;

begin
summe := 0;
with stringgrid1 do
   begin
    for y:= fixedcols to colcount -1 do
      begin
       for x:= fixedrows to rowcount -3 do
         begin
          summe:= summe + strtofloat(cells[y,x]);
          cells[y,rowcount-1] := floattostr(summe);
         end;
      end;
   end;
end;
[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

DeddyH 25. Feb 2010 15:48

Re: Stringgrid Zeilensumme in Label ausgeben
 
Die Lösung für das gesamte StringGrid hast Du ja jetzt. Wenn das nur für eine Zeile gelten soll, musst Du die Zeilenschleife eben weglassen.

unchained 25. Feb 2010 15:59

Re: Stringgrid Zeilensumme in Label ausgeben
 
ja soweit war ich auch :) dennoch möchte ich das ergebnis ungern am ende der zeile haben, sondern als showmessage oder in einem label.

da liegt der hund begraben

FrankJ28 25. Feb 2010 16:02

Re: Stringgrid Zeilensumme in Label ausgeben
 
label.caption:=floattostr(summe);

oder verstehe ich deine Frage nicht?

DeddyH 25. Feb 2010 16:03

Re: Stringgrid Zeilensumme in Label ausgeben
 
Dann musst Du doch nur die Zeile
Zitat:

Delphi-Quellcode:
cells[y,rowcount-1] := floattostr(summe);

entsprechend ändern. Übrigens würde ich die Ausgabe nach außerhalb der Schleifen verlagern, das kostet ja sonst nur unnötig Zeit.

unchained 25. Feb 2010 16:10

Re: Stringgrid Zeilensumme in Label ausgeben
 
also so siehts aus:

"ergebnis" ist der wert der aus einer bestellung hervorgeht, quasi der einzelbestellwert.
Im stringgrid werden viele dieser einzelbestellwerte aufgelistet und sollen über "button6" addiert und in einem Label ausgegeben werden.
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);

var
y, x : integer;
ergebnis : double;

begin
ergebnis := 0;
with stringgrid1 do
    begin
       for x:= fixedrows to rowcount -3 do
         begin
          ergebnis:= ergebnis + strtofloat(cells[y,x]);

         end;
      end;
 label21.caption:=floattostr(ergebnis);
   end;



end.
[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

hoika 25. Feb 2010 16:19

Re: Stringgrid Zeilensumme in Label ausgeben
 
Hallo,

kleine Anmerkung.

Hast du die einzelnen Positionen nicht eh schon in deinem Programm (TList ?)

Dann würde ich dort summieren.


Heiko

DeddyH 25. Feb 2010 16:36

Re: Stringgrid Zeilensumme in Label ausgeben
 
Da hat Heiko vollkommen recht, aber falls nicht versuch es mal hiermit (heruntergetippt und nicht getestet):
Delphi-Quellcode:
function GridRowSum(const TheGrid: TStringGrid; RowIndex: integer; IgnoreFixedCols: Boolean = true): double;
var i, Start: integer;
begin
  Result := 0;
  if (RowIndex < 0) or (RowIndex >= TheGrid.RowCount) then
    raise Exception.CreateFmt('Zeilenindex %d ist nicht erreichbar',[RowIndex]);
  if IgnoreFixedCols then
    Start := TheGrid.FixedCols
  else
    Start := 0;
  for i := Start to TheGrid.ColCount - 1 do
    Result := Result + StrToFloatDef(TheGrid.Cells[i,RowIndex],0);
end;
[edit] Abfrage auf RowIndex < 0 eingebaut, falls später mal jemand auf diesen Thread stößt :roll: [/edit]

unchained 25. Feb 2010 17:06

Re: Stringgrid Zeilensumme in Label ausgeben
 
Sry, das funktioniert leider nicht. :(

Es funktioniert ja auch mit der funktion "Zellen löschen", dass auf alle zellen zugegriffen wird und diese "clear" werden.

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
 var
  I: Integer;
begin
  for I := 0 to StringGrid1.RowCount - 1 do
    StringGrid1.Rows[I].Clear();
  for I := 0 to StringGrid2.RowCount - 1 do
    StringGrid2.Rows[I].Clear();
  for I := 0 to StringGrid1.ColCount - 1 do
    StringGrid1.Cols[I].Clear();
  for I := 0 to StringGrid2.ColCount - 1 do
    StringGrid2.Cols[I].Clear();
end;
Klappt das nicht auch mit der Funktion "Addieren"? Dass ich quasi auf alle Zellen zugreife und sie statt "clear" einfach addiere?

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

DeddyH 25. Feb 2010 17:08

Re: Stringgrid Zeilensumme in Label ausgeben
 
Mit "das funktioniert nicht" kann ich leider nichts anfangen. Kompiliert es nicht oder kommt nicht das erwartete Ergebnis? Wie hast Du es aufgerufen?

unchained 25. Feb 2010 17:14

Re: Stringgrid Zeilensumme in Label ausgeben
 
er kompiliert nicht.

http://666kb.com/i/bh0beup4tonmb3lxw.jpg

http://666kb.com/i/bh0bhna9lbdncpj2s.jpg

[edit=mkinzler]Grafik entfernt und dem Beitrag angehängt Mfg, mkinzler[/edit]

DeddyH 25. Feb 2010 17:15

Re: Stringgrid Zeilensumme in Label ausgeben
 
Und mit welcher Meldung?

unchained 25. Feb 2010 17:19

Re: Stringgrid Zeilensumme in Label ausgeben
 
pardon, habe die bilder angehängt.

[Fehler] Unit1.pas(525): BEGIN erwartet, aber END gefunden
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden

DeddyH 25. Feb 2010 17:24

Re: Stringgrid Zeilensumme in Label ausgeben
 
Du hast die Funktion ja auch an die völlig falsche Stelle kopiert. Am besten schiebst Du sie gleich unter das {$R.dfm} unter implementation.

unchained 25. Feb 2010 18:24

Re: Stringgrid Zeilensumme in Label ausgeben
 
Kopiere ich die Funktion:

function GridRowSum(const TheGrid: TStringGrid; RowIndex: integer; IgnoreFixedCols: Boolean = true): double;

an die benannte Stelle werden weitere Fehler angezeigt.
[Fehler] Unit1.pas(140): ';' erwartet, aber '.' gefunden
-------------------------------------------------------------------------------------------------------------
implementation

{$R *.dfm}
function GridRowSum(const TheGrid: TStringGrid; RowIndex: integer; IgnoreFixedCols: Boolean = true): double;

procedure TForm1.Button1Click(Sender: TObject); // Bestellung aufgeben
begin
Label17.Font.Color := clred;





button1.Caption:='Erhalten';
sleep (400);
button1.caption:='Bestellung aufgeben';
inc (anzahl); // Zähler für Kunden

DeddyH 25. Feb 2010 18:26

Re: Stringgrid Zeilensumme in Label ausgeben
 
Und wenn Du unter Button6Click einmal begin und end schreibst? Die fehlen in der Grafik nämlich.

unchained 25. Feb 2010 18:30

Re: Stringgrid Zeilensumme in Label ausgeben
 
Grad probiert. Das ändert leider nichts. :(

unchained 25. Feb 2010 18:32

Re: Stringgrid Zeilensumme in Label ausgeben
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich habs mal komplett angehängt.

DeddyH 25. Feb 2010 18:34

Re: Stringgrid Zeilensumme in Label ausgeben
 
Du hast die Projektdatei angehängt, nimm stattdessen mal die Unit.

unchained 25. Feb 2010 18:35

Re: Stringgrid Zeilensumme in Label ausgeben
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier die unit :)

DeddyH 25. Feb 2010 18:39

Re: Stringgrid Zeilensumme in Label ausgeben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wie ist es hiermit (keine Garantie, da unter Notepad bearbeitet)?

unchained 25. Feb 2010 18:42

Re: Stringgrid Zeilensumme in Label ausgeben
 
Ich danke dir vielmals !!!! Es funktioniert super. Die Lösung ist ja dann unter Button6 recht simpel. Manchmal seh ich den Wald vor lauter Bäumen nicht :D.

Nochmals Dankeschön ! :) Der Abend ist gerettet.

DeddyH 25. Feb 2010 18:44

Re: Stringgrid Zeilensumme in Label ausgeben
 
Das war aber auch eine schwere Geburt :zwinker:

unchained 25. Feb 2010 18:44

Re: Stringgrid Zeilensumme in Label ausgeben
 
Bis man erstmal weiß was das Problem ist :D. Hab mich auch nen Wolf gegoogelt.


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