Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Text in die letze Zeile vom StringGrid (https://www.delphipraxis.net/115448-text-die-letze-zeile-vom-stringgrid.html)

SaFu 12. Jun 2008 09:48

Re: Text in die letze Zeile vom StringGrid
 
Ok

Delphi-Quellcode:
StringGrid.Rows[0].IndexOf('gesuchte Überschrift')
So hats gestimmt wenn ich im string einen schreibfehler mache kann es ja nicht gehen und wenn ich dann noch die variable benutze die ich in der Procdure wo anders eingesetzt habe kann es auch nicht gehen

jetzt funzt es aber danke

SaFu 12. Jun 2008 10:00

Re: Text in die letze Zeile vom StringGrid
 
hab doch nochmal ne frage warum werden bei manschen dateien nicht die zwei zeilen angehängt, sonder das ergebnis wird in die letzte Zeile geschrieben in denen noch werte stehen??

Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
Var i,x,y : integer;
 summe1,ErgebnisSwichedDuration : double;
begin
Label3.Caption:= '';
Label7.Caption:= '';
y:= StringGrid1.Rows[0].IndexOf('SwitchedDuration');
 begin

   for I := 0 to StringGrid1.RowCount - 1 do
   if StringGrid1.Cells[i,0] = 'Way' then
    for x := 0 to StringGrid1.ColCount -1 do
    if StringGrid1.Cells[x,0] = 'SwitchedDuration' then


      ErgebnisSwichedDuration:= (findStrings(StringGrid1.Cols[i],StringGrid1.Cols[x]));
      summe1:= (ErgebnisSwichedDuration);

     StringGrid1.RowCount:= StringGrid1.RowCount +2;
     StringGrid1.Cells[y,Pred(StringGrid1.RowCount)]:= Format('%.6f',[summe1/(60)])+' min.';
     StringGrid1.Cells[0,Pred(StringGrid1.RowCount)]:= 'Gesamt';
 end;
end;

DeddyH 12. Jun 2008 10:06

Re: Text in die letze Zeile vom StringGrid
 
Ist das eigentlich richtig, dass Du erst y ermittelst und dann in einer Schleife noch einmal nach SwitchedDuration suchst? Wieso er die Zeilen nicht anfügt, weiß ich im Moment allerdings auch nicht.

SaFu 12. Jun 2008 10:14

Re: Text in die letze Zeile vom StringGrid
 
Stimmt hast recht kann mir eigentlich zwei zeilen sparen vielleicht fällt ja noch jemanden was auf warum manschmal die zwei zeilen nicht angehängt wereden

Hansa 12. Jun 2008 10:46

Re: Text in die letze Zeile vom StringGrid
 
Da sind for's und if's drin. Der Source ist schlecht formatiert. Vielleicht ist es im Original ja besser, aber so hagelt es eben Fehler der einfachsten Sorte. Die Abfrage über strings ist auch nicht gerade das Gelbe vom Ei. Und : schreibe mal normalen Text etwas leserlicher, ist so zu anstrengend zu lesen. :stupid:

SaFu 12. Jun 2008 10:57

Re: Text in die letze Zeile vom StringGrid
 
besser so

wenn du mir jetzt noch den fehler sagen könntest oder verbesserungsvorschläge hast nur her damit.

Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
Var i,y : integer;
    summe1,ErgebnisSwichedDuration : double;
begin
 ErgebnisSwichedDuration:= 0;
 Label3.Caption:= '';
 Label7.Caption:= '';
 y:= StringGrid1.Rows[0].IndexOf('SwitchedDuration');
  begin
   if StringGrid1.Rows[0].IndexOf('SwitchedDuration') = 4 then
     begin
      for I := 0 to StringGrid1.RowCount - 1 do
       if StringGrid1.Cells[i,0] = 'Way' then

        ErgebnisSwichedDuration:= (findStrings(StringGrid1.Cols[i],StringGrid1.Cols[y]));
        summe1:= (ErgebnisSwichedDuration);

        StringGrid1.RowCount:= StringGrid1.RowCount +2;
        StringGrid1.Cells[y,Pred(StringGrid1.RowCount)]:= Format('%.6f',[summe1/(60)])+' min.(OUT)';
        StringGrid1.Cells[0,Pred(StringGrid1.RowCount)]:= 'Gesamt';
     end
   else
  exit;
  end
end;

Hansa 12. Jun 2008 11:14

Re: Text in die letze Zeile vom StringGrid
 
Ich würde in der Gegend von Zeile 19 einen Breakpoint setzen oder eine showmesage mit der Stringgrid-Zeilennummer. Hehe, was seh ich denn da noch ? Wie vermutet ist die Logik wohl falsch. Die for-Schleife läuft über RowCount und das wird in der for- Schleife selber dann erhöht ? :shock:

SaFu 16. Jun 2008 08:09

Re: Text in die letze Zeile vom StringGrid
 
Guten morgen

Da ich immer noch das Problem habe, das manchmal da Ergebnis in die letzte, statt in die letzte +2 geschrieben wird muss ich das Thema doch nochmal aufgreifen.


Das mit dem Brakepoint und Showmessage hat mich nicht weiter gebracht bekomme immer das Ergebnis was es eigentlich sein soll vielleicht hat jemand noch ne idee

Gruß Sascha

marabu 16. Jun 2008 09:21

Re: Text in die letze Zeile vom StringGrid
 
Moin Sascha,

vielleicht solltest du mal einen ScreenShot von deinem Grid anhängen, damit man besser versteht was du da machen willst.

Zu deinem Code:

Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
Var
  i, iLastRow, iSD, iWay: Integer;
  summe1, ErgebnisSwichedDuration: Double;
begin
  ErgebnisSwichedDuration := 0;
  Label3.Caption := '';
  Label7.Caption := '';
  iSD := StringGrid1.Rows[0].IndexOf('SwitchedDuration');
  iWay := StringGrid1.Rows[0].IndexOf('Way');

  // warum diese Prüfung? 
  // if StringGrid1.Rows[0].IndexOf('SwitchedDuration') = 4 then

  // i läuft über die Zeilen inklusive Titelzeile
  for i := 0 to StringGrid1.RowCount - 1 do
    // warum suchst du mit dem Zeilenindex eine Spalte ?
    if StringGrid1.Cells[i, 0] = 'Way' then
      // was macht FindStrings()?
      ErgebnisSwichedDuration := findStrings(StringGrid1.Cols[i], StringGrid1.Cols[y]);

  summe1 := ErgebnisSwichedDuration;
  StringGrid1.RowCount := StringGrid1.RowCount + 2;
  iLastRow := Pred(StringGrid1.RowCount);
  StringGrid1.Cells[y, iLastRow] := Format('%.6f min.(OUT)', [summe1 / 60]);
  StringGrid1.Cells[0, iLastRow] := 'Gesamt';
end;
Freundliche Grüße

SaFu 16. Jun 2008 09:37

Re: Text in die letze Zeile vom StringGrid
 
Liste der Anhänge anzeigen (Anzahl: 2)
So ghab mal die screenshoots angehängt

Delphi-Quellcode:
  // warum diese Prüfung?
  // if StringGrid1.Rows[0].IndexOf('SwitchedDuration') = 4 then
damit nur nur in die schleife gegeangen wird wenn diese überschrift vorhanden ist.

Hier nochmal alles mit findStrings

Delphi-Quellcode:
function findStrings(sl:TStrings;s:TStrings;cSeparator: char = '.'): double;
var i :Integer;
    ergebnis :Tstrings;
    OldSep: char;  
begin
  OldSep := DecimalSeparator; //Sichern des alten Zustandes
  DecimalSeparator := cSeparator; //Umstellen des Dezimalseparators
  Result := 0;
  ergebnis:= TStringList.Create;
  try
   for i := 1 to Pred(sl.Count)-1 do
    if (sl[i]) = 'OUT' then
     begin
      ergebnis.Add(s[i]); //hier die änderung
      Result := Result + StrToFloatDef(s[i],0); //hier die Ergänzung
     end;
    ergebnis.SaveToFile('c:\test.txt');
   finally
  ergebnis.Free;
  end;
  DecimalSeparator := OldSep; //Wiederherstellen des alten Zustandes
end;

procedure TForm1.Button6Click(Sender: TObject);
Var i,y : integer;
 summe1,ErgebnisSwichedDuration : double;
begin
 ErgebnisSwichedDuration:= 0;
 Label3.Caption:= '';
 Label7.Caption:= '';
 y:= StringGrid1.Rows[0].IndexOf('SwitchedDuration');
  begin
   if StringGrid1.Rows[0].IndexOf('SwitchedDuration') = 4 then
     begin
      for I := 0 to StringGrid1.RowCount - 1 do
       if StringGrid1.Cells[i,0] = 'Way' then

        ErgebnisSwichedDuration:= (findStrings(StringGrid1.Cols[i],StringGrid1.Cols[y]));
        summe1:= (ErgebnisSwichedDuration);

        StringGrid1.RowCount:= StringGrid1.RowCount +2;
        StringGrid1.Cells[y,Pred(StringGrid1.RowCount)]:= Format('%.6f',[summe1/(60)])+' min.(OUT)';
        StringGrid1.Cells[0,Pred(StringGrid1.RowCount)]:= 'Gesamt';
     end
   else
  exit;
  end
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 Uhr.
Seite 2 von 3     12 3      

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