Delphi-PRAXiS

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:12


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:
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;
Gruß sascha

DeddyH 12. Jun 2008 09:16

Re: Text in die letze Zeile vom StringGrid
 
Delphi-Quellcode:
StringGrid1.Cells[0,Pred(StringGrid1.RowCount)] := Format('%.6f <-min. sek.->',[summe1/60]);
Sollte den Text in die erste Spalte der letzten Zeile schreiben.

SaFu 12. Jun 2008 09:23

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

soulies 12. Jun 2008 09:25

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:

StringGrid1.Cells[0,Pred(StringGrid1.RowCount)] := Format('%.6f <-min. sek.->',[summe1/60]);
StringGrid1.Cells[x,Pred(StringGrid1.RowCount)] := Format('%.6f <-min. sek.->',[summe1/60]);


cya

SaFu 12. Jun 2008 09:26

Re: Text in die letze Zeile vom StringGrid
 
Dat hab ich ja schon gemacht wird aber nicht in die spalte geschrieben :-D

DeddyH 12. Jun 2008 09:28

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:
StringGrid.Rows[0].Cols.IndexOf('gesuchte Überschrift')
den Index der gesuchten Überschrift ermitteln, sofern ich keinen Denkfehler mache.

soulies 12. Jun 2008 09:31

Re: Text in die letze Zeile vom StringGrid
 
ist eigentlich
Zitat:

Delphi-Quellcode:
 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;

das 'begin' in zeile 7 verrutscht oder ...

SaFu 12. Jun 2008 09:34

Re: Text in die letze Zeile vom StringGrid
 
nee warum ist so

SaFu 12. Jun 2008 09:42

Re: Text in die letze Zeile vom StringGrid
 
Ich glaube das sitimmt doch nicht so

Delphi-Quellcode:
StringGrid.Rows[0].Cols.IndexOf('gesuchte Überschrift')
und wenn ich es so schreibe
Delphi-Quellcode:
StringGrid.Rows[0].IndexOf('gesuchte Überschrift')
bekomme ich immer -1 zurück und es wird nichts in das ender der Spalte geschrieben??

DeddyH 12. Jun 2008 09:44

Re: Text in die letze Zeile vom StringGrid
 
Versuch mal
Delphi-Quellcode:
StringGrid.Cols[0].IndexOf('gesuchte Überschrift')
[edit] Nee, das ist wahrscheinlich auch Quatsch. [/edit]

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;

SaFu 16. Jun 2008 09:48

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 13:14 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