AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Größter Wert aus StringGrid

Ein Thema von peetfree · begonnen am 8. Feb 2018 · letzter Beitrag vom 15. Feb 2018
Antwort Antwort
Seite 1 von 2  1 2      
peetfree

Registriert seit: 31. Jan 2018
6 Beiträge
 
#1

Größter Wert aus StringGrid

  Alt 8. Feb 2018, 15:51
Hallo zusammen,

ich bin Peter, 22 Jahre alt und studiere Energietechnik. In eben diesem Studium muss ich auch ein Projekt mit Delphi programmieren.

Ich habe nun das Problem, dass ich in meinem Programm ein StringGrid habe, welches immer die gleichen Werte zeigt.
Das ganze ist mit 5 Checkboxen verknüpft, welche veranlassen dass einzelne Reihen ausgeblendet werden (RowHeight= -1). Nun soll von den Daten die noch zu sehen sind (manche aufgrund der Checkboxen ausgeblendet) die größte Zahl gefunden werden.

Ich hätte zwar eine Idee wie ich das mit einer >= Abfrage zusammen mit 25 verschiedenen Fällen realisieren kann, allerdings ist dieser Weg sicher nicht besonders Clever.

Ich hoffe ihr könnt mir weiter helfen, wie das ganze eleganter zu lösen ist.

Gruß
Peter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Größter Wert aus StringGrid

  Alt 8. Feb 2018, 15:56
Alle Rows durchgehn und dort wo RowHeight>0 die Werte auslesen und davon den größten merken.

z.B. am Anfang SuchWert mit 0 initialisiert und dann wenn RowHeight>0 und Wert>SuchWert halt SuchWert := Wert

Zitat:
Abfrage zusammen mit 25 verschiedenen Fällen
1 Fall, wenn vorher schon gefilter wurde (RowHeight=-1)
$2B or not $2B
  Mit Zitat antworten Zitat
peetfree

Registriert seit: 31. Jan 2018
6 Beiträge
 
#3

AW: Größter Wert aus StringGrid

  Alt 8. Feb 2018, 16:19
Da steh ich momentan noch auf dem Schlauch...
Ob ich jetzt über die Checkbox oder RowHeights prüfe macht doch eigentlich keinen unterschied.

Auch versteh ich die Vorgehensweise mit dem Suchwert noch nicht ganz... auch wenns wahrscheinlich peinlich ist, bisher hatte ich das so geprüft:

If (Form8.StringGrid1.Cells[1,1] > Form8.StringGrid1.Cells[1,2] + Form8.StringGrid1.Cells[1,3]
+ Form8.StringGrid1.Cells[1,4] + Form8.StringGrid1.Cells[1,5]) then
Form8.Edit2.Text:= Form8.StringGrid1.Cells[1,1];

Die Werte in meiner StringGrid gehen von 1-30, aber welchen Wert ich suche (den größten) weiß ich ja vorher noch nicht..
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Größter Wert aus StringGrid

  Alt 8. Feb 2018, 17:10
Hallo peetfree,

evtl. so:
Delphi-Quellcode:
function GetMaxFromStringGrid():Integer;
var aRow, aCol, max:Integer;
begin
  max:=0;
  for aRow:=0 to StringGrid1.RowCount-1 do
    if (StringGrid1.RowHeights[aRow]<>-1) then
  begin
    for aCol:=0 to StringGrid1.ColCount-1 do
      if (StringGrid1.Cells[aCol, aRow].ToInteger > max) then
        max:=StringGrid1.Cells[aCol, aRow].ToInteger;
    // oder
    //if (StrToInt(StringGrid1.Cells[aCol, aRow]) > max) then
    // max:=StrToInt(StringGrid1.Cells[aCol, aRow]);
  end;
  Result:=max;
end;
Alle Angaben ohne Gewähr
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#5

AW: Größter Wert aus StringGrid

  Alt 9. Feb 2018, 07:21
Moin...
Zitat:
In eben diesem Studium muss ich auch ein Projekt mit Delphi programmieren.
...möööp! Das muß heißen "will"...
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Größter Wert aus StringGrid

  Alt 9. Feb 2018, 07:28
Hallo,
nein

"habe ich das große Glück, ein Delphi-Projekt zu machen"
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Größter Wert aus StringGrid

  Alt 9. Feb 2018, 08:16
Ein paar grundlegende Verständnisprobleme, die du hast:
If (Form8.StringGrid1.Cells[1,1] > Form8.StringGrid1.Cells[1,2] + Form8.StringGrid1.Cells[1,3]
+ Form8.StringGrid1.Cells[1,4] + Form8.StringGrid1.Cells[1,5]) then
Form8.Edit2.Text:= Form8.StringGrid1.Cells[1,1];
Beispiel:
Zelle 1 Inhalt 5
Zelle 2 Inhalt 1
Zelle 3 Inhalt 2
Zelle 4 Inhalt 7
Zelle 5 Inhalt 21

Dann vergleichst du:
if 5 > 12721 then Der Inhalt der Zellen sind Strings. das "+" verkettet die Strings. Dein "+" ist kein logisches "and". Würdest du diesen Weg weiter verfolgen, müsstest du es in Delphi so verwenden:
Delphi-Quellcode:
If (Form8.StringGrid1.Cells[1,1] > Form8.StringGrid1.Cells[1,2]) and
   (Form8.StringGrid1.Cells[1,1] > Form8.StringGrid1.Cells[1,3]) and
   (Form8.StringGrid1.Cells[1,1] > Form8.StringGrid1.Cells[1,4]) and
   (Form8.StringGrid1.Cells[1,1] > Form8.StringGrid1.Cells[1,5]) then
ABER:
Dann wäre es immer noch falsch, da es sich um Strings und nicht um Zahlen handelt. Der Vergleich findet daher alphanumerisch statt. D.h.: 5 ist größer als 21. Dein Ziel wäre verfehlt.

Somit musst du deine Zellen-Inhalte auch noch in Zahlen umwandeln:
Delphi-Quellcode:
If (StrToInt(Form8.StringGrid1.Cells[1,1]) > StrToInt(Form8.StringGrid1.Cells[1,2])) and
   (StrToInt(Form8.StringGrid1.Cells[1,1]) > StrToInt(Form8.StringGrid1.Cells[1,3])) and
   (StrToInt(Form8.StringGrid1.Cells[1,1]) > StrToInt(Form8.StringGrid1.Cells[1,4])) and
   (StrToInt(Form8.StringGrid1.Cells[1,1]) > StrToInt(Form8.StringGrid1.Cells[1,5])) then
Allerdings würde das kein Programmierer so lösen. Die Lösung von Gollum mit geschachtelten Schleifen ist da schon der richtige Ansatz. Es war man dieser Stelle nur wichtig, dass du auch verstehst, warum es bei dir nicht funktionieren kann und welche Fallen noch zusätzlich vorhanden sind.
Peter
  Mit Zitat antworten Zitat
peetfree

Registriert seit: 31. Jan 2018
6 Beiträge
 
#8

AW: Größter Wert aus StringGrid

  Alt 9. Feb 2018, 12:34
Hallo nochmal,

ich habe nun doch etwas neue Weisheit erlangt, und muss zugeben dass das nicht anders funktioniert als über eine Schleife. Auf andere Art und weiße kämen wohl ca. 30 Seiten Code zusammen.

Also habe ich nun doch das Glück mich noch etwas eingehender mit Delphi beschäftigen zu dürfen.

Ich habe den Text von @Gollum jetzt einfach mal bei mir ins Programm übernommen, allerdings läuft das so natürlich noch nicht. Das ganze sieht momentan so aus;

Delphi-Quellcode:
 function GetMaxFromStringGrid():Integer;
var aRow, aCol, max:Integer;
begin
  max:=0;
  for aRow:=0 to Form8.StringGrid1.RowCount-1 do
    if (Form8.StringGrid1.RowHeights[aRow]<>-1) then
  begin
    for aCol:=0 to Form8.StringGrid1.ColCount-1 do
      if (StrToInt(Form8.StringGrid1.Cells[aCol, aRow]) > max) then
     max:=StrToInt(Form8.StringGrid1.Cells[aCol, aRow]);

  end;
  Result:=max;
end;
1. function GetMaxFromStringGrid():Integer; Delphi bemängelt dass es gerne ein Statement hätte, aber nur ein Function gefunden. Wozu das überhaupt? Gibt das der Schleife einfach nur eine Namen?

2.   for aRow:=0 to Form8.StringGrid1.RowCount-1 do Ja, was soll Delphi für den Fall eigentlich machen? Denn danach folgt ja ein If, womit Delphi auch nicht klar kommt

3. Außerdem ist gegen ende Wohl noch ein ';' zu viel, da Delphi stattdessen ein Punkt erwartet.




Ich hoffe ihr könnt mir hier nochmal helfen und mir das ganze etwas verständlich machen. Doof bin ich eigentlich nicht, mit Programmieren hab ich leider nur echt wenig am Hut.

Geändert von peetfree ( 9. Feb 2018 um 22:18 Uhr)
  Mit Zitat antworten Zitat
peetfree

Registriert seit: 31. Jan 2018
6 Beiträge
 
#9

AW: Größter Wert aus StringGrid

  Alt 12. Feb 2018, 11:28
Soo, ich hab da nochmal etwas nachgelesen und den Code weiter angepasst. Allerdings hab ich jetzt noch mehr Fehlermeldungen als vorher, und weiß noch weniger wieso...

Hier mal mein Code

Delphi-Quellcode:
function GetMaxFromStringGrid():Integer;
var aRow, max: Byte ;
begin
  max:=0;
  for aRow:=0 to 6 do
    if (Form8.StringGrid1.RowHeights[aRow]>-1) then
  begin
      if (StrToFloat(Form8.StringGrid1.Cells[1, aRow]) > max) then
     max:=StringToFloat(Form8.StringGrid1.Cells[1, aRow]);
     end;

     Form8.Edit6.Text:= FloatToString(max) ;
end;

Und hier die Fehlermeldungen:

1. Statement expected but 'function' found
2. Undeclared Identifier 'StringToFloat'
3. Undeclared Identifier ' FloatToString'


und dann noch zwei die sich auf den nachfolgenden code beziehen, allerdings ohne das eingefügte nicht kommen:

4. Declaration expected but "If" found (Bezieht sich auf das was unmittelbar nach end kommt)
5. '.' expected but ';' found (bezieht sich auf das procedure end; ganz am ende)

Ich hoffe ihr könnt mir nochmal helfen.

Liebe Grüße Peter
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#10

AW: Größter Wert aus StringGrid

  Alt 12. Feb 2018, 11:51

1. Statement expected but 'function' found
2. Undeclared Identifier 'StringToFloat'
3. Undeclared Identifier ' FloatToString'
4. Declaration expected but "If" found (Bezieht sich auf das was unmittelbar nach end kommt)
5. '.' expected but ';' found (bezieht sich auf das procedure end; ganz am ende)
1. Wo steht denn deine function im Code? Kann es sein, dass die irgenwo steht, wo sie nicht hingehört? Zeig mal den Code drumherum.

2. Schau mal eine Zeile höher. Dann sieht man den Fehler ja schon rein optisch.
3. Analog 2.

4. S. 1. Dazu müsste man mehr Code sehen
5. Klar, nach dem letzten end in einer Unit muss ein . stehen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:23 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