![]() |
Text in die letze Zeile vom StringGrid
Mosche
Wie es son oben stehet versuche ich ein ergebnis vom label7 in die letzte seile in eine bestimmte Zeile vom StringGrid zu bekommen
Delphi-Quellcode:
Gruß sascha
procedure TForm1.Button6Click(Sender: TObject);
Var i,x,y : integer; summe1 : double; begin Label3.Caption:= ''; Label7.Caption:= ''; 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] = 'ergebnisspalte' then <------------------------------------------------ | Label3.Caption:= FloatToStr(findStrings(StringGrid1.Cols[i],StringGrid1.Cols[x])); | summe1:= StrToFloat(Label3.caption); | Label7.Caption:= Format('%.6f',[summe1/(60)])+' <-min. sek.-> '; | end; | StringGrid1.RowCount:= StringGrid1.RowCount +1; // hier wird eine hinzugefügt und in die soll der Text von label7 von der spalte end; |
Re: Text in die letze Zeile vom StringGrid
Delphi-Quellcode:
Sollte den Text in die erste Spalte der letzten Zeile schreiben.
StringGrid1.Cells[0,Pred(StringGrid1.RowCount)] := Format('%.6f <-min. sek.->',[summe1/60]);
|
Re: Text in die letze Zeile vom StringGrid
ja genau sowas hatte ich gemeint wie ich das jetzt in die richtige spalte bekomme schau ich mal
Dank dir |
Re: Text in die letze Zeile vom StringGrid
...
und da das ergebnis in der spalte 'ergebnisspalte' stehen soll merkst du dir die position von 'x' wenn die spalte gefunden wurde und übernimmst dann x statt 0 Zitat:
cya |
Re: Text in die letze Zeile vom StringGrid
Dat hab ich ja schon gemacht wird aber nicht in die spalte geschrieben :-D
|
Re: Text in die letze Zeile vom StringGrid
In der ersten Zeile stehen doch die Überschriften. Also könntest Du Dir doch theoretisch mit
Delphi-Quellcode:
den Index der gesuchten Überschrift ermitteln, sofern ich keinen Denkfehler mache.
StringGrid.Rows[0].Cols.IndexOf('gesuchte Überschrift')
|
Re: Text in die letze Zeile vom StringGrid
ist eigentlich
Zitat:
|
Re: Text in die letze Zeile vom StringGrid
nee warum ist so
|
Re: Text in die letze Zeile vom StringGrid
Ich glaube das sitimmt doch nicht so
Delphi-Quellcode:
und wenn ich es so schreibe
StringGrid.Rows[0].Cols.IndexOf('gesuchte Überschrift')
Delphi-Quellcode:
bekomme ich immer -1 zurück und es wird nichts in das ender der Spalte geschrieben??
StringGrid.Rows[0].IndexOf('gesuchte Überschrift')
|
Re: Text in die letze Zeile vom StringGrid
Versuch mal
Delphi-Quellcode:
[edit] Nee, das ist wahrscheinlich auch Quatsch. [/edit]
StringGrid.Cols[0].IndexOf('gesuchte Überschrift')
|
Re: Text in die letze Zeile vom StringGrid
Ok
Delphi-Quellcode:
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
StringGrid.Rows[0].IndexOf('gesuchte Überschrift')
jetzt funzt es aber danke |
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; |
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.
|
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
|
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:
|
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; |
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:
|
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 |
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:
Freundliche Grüße
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; |
Re: Text in die letze Zeile vom StringGrid
Liste der Anhänge anzeigen (Anzahl: 2)
So ghab mal die screenshoots angehängt
Delphi-Quellcode:
damit nur nur in die schleife gegeangen wird wenn diese überschrift vorhanden ist.
// warum diese Prüfung?
// if StringGrid1.Rows[0].IndexOf('SwitchedDuration') = 4 then 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; |
Re: Text in die letze Zeile vom StringGrid
Ok ich habe gefunden
Es ist mir anhand meines eigenes Screenshots aufgefallen ich habe schlicht und einfach vergessen das StringGrid zu leeren vor dem nächsten laden und somit waren die alten Einträge noch vorhanden. ist mir an der Datumsspalte aufgefallen nach dem 8 kann nicht der 7 kommen Danke trotzdem |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 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