Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Größter Wert aus StringGrid (https://www.delphipraxis.net/195177-groesster-wert-aus-stringgrid.html)

peetfree 12. Feb 2018 11:28

AW: Größter Wert aus StringGrid
 
Delphi-Quellcode:
If (Form3.Checkbox2.Checked=True) Then Form8.StringGrid1.Cells[1,4]:= '3';
If (Form3.Checkbox2.Checked=True) Then Form8.StringGrid1.Cells[2,4]:= '2';


 // Beginn Eintragen neuer Versuch

function GetMaxFromStringGrid():Integer;
var aRow, max:Integer ;
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:=StrToFloat(Form8.StringGrid1.Cells[1, aRow]);
     end;

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




//Füllen von stringgrid 1 am anfang

 If (Form8.RadioButton1.Checked= True) Then Form8.StringGrid2.Hide;

Befindet sich alles innerhalb einer button click procedure, da passieren recht viele Dinge.

Fehler 2. & 3. : Ups :oops:

Dafür kam noch dazu: Incompatible types "byte" and "extended" (analog dazu auch mit integer)

Jasocul 12. Feb 2018 13:39

AW: Größter Wert aus StringGrid
 
Delphi-Quellcode:
function GetMaxFromStringGrid():Integer;
var aRow, max:Integer ;
begin
   max:=0;
   for aRow:=0 to 6 do
     if (Form8.StringGrid1.RowHeights[aRow]>-1) then
     begin
       if (StrToInt(Form8.StringGrid1.Cells[1, aRow]) > max) then
         max:=StrToInt(Form8.StringGrid1.Cells[1, aRow]);
     end;

  Form8.Edit6.Text:= IntToStr(max);

  Result := max;
end;

procedure abcdef; // Du musst nachsehen, wie deine procedure heißt
var
  MaxWert : Integer;
begin
...
If (Form3.Checkbox2.Checked=True) Then Form8.StringGrid1.Cells[1,4]:= '3';
If (Form3.Checkbox2.Checked=True) Then Form8.StringGrid1.Cells[2,4]:= '2';


  // Beginn Eintragen neuer Versuch

MaxWert := GetMaxFromStringGrid;


//Füllen von stringgrid 1 am anfang

  If (Form8.RadioButton1.Checked= True) Then Form8.StringGrid2.Hide;
...
end;
Das jetzt mal ohne große Erläuterungen, da ich wirklich nicht weiß, wo ich anfangen soll.

Ich denke, du solltest dich mit den Grundlagen der Delphi-Programmierung auseinandersetzen, ansonsten wirst du weiteren Aufgaben erheblich mehr Probleme bekommen.
Tutorials gibt es reichlich im Internet.

haentschman 12. Feb 2018 15:15

AW: Größter Wert aus StringGrid
 
Delphi-Quellcode:
Form8.RadioButton1.Checked= True
...ein NoGo. Siehe: http://www.delphipraxis.net/57121-ue...t-boolean.html

bcvs 13. Feb 2018 08:18

AW: Größter Wert aus StringGrid
 
Zitat:


Befindet sich alles innerhalb einer button click procedure, da passieren recht viele Dinge.

Du kannst nicht einfach eine function mitten in eine procedure reinschreiben. Die muss davon oder dahinter stehen und dann aus deiner procedure aufgerufen werden.

Jasocul 13. Feb 2018 09:30

AW: Größter Wert aus StringGrid
 
Zitat:

Zitat von bcvs (Beitrag 1393712)
Du kannst nicht einfach eine function mitten in eine procedure reinschreiben. Die muss davon oder dahinter stehen und dann aus deiner procedure aufgerufen werden.

DAVOR! Ich möchte einen Anfänger nicht auch noch mit Forward-Deklarationen verwirren. :wink:

Blup 14. Feb 2018 13:35

AW: Größter Wert aus StringGrid
 
Eine einfache Funktion sollte keine Abhängigkeiten zu bestimmten globalen Formvoriablen (Form8) haben.
Benötigte Informationen sollten als Parameter übergeben werden.
Ergebnisse werden zurückgegeben, die Ausgabe gehört nicht in die Funktion zum Ermitteln des Wertes.
-> wiederverwendbar
-> testbar

Eingabewerte sind hier das Grid und welcher Bereich zu durchsuchen ist.
Rückgabewert ist der gefundene Maximalwert.
Delphi-Quellcode:
function GetMaxFromStringGrid(AGrid: TStringGrid; ARange: TRect): Integer;
var
  col, row, value: Integer;
begin
  // Ergebnis initialisieren
  Result := 0;
  for col := ARange.Left to ARange.Right do
  begin
    for row := ARange.Top to ARange.Bottom do
    begin
      // ungültigen Inhalte als "0" interpretieren und damit ignorieren
      value := StrToIntDef(AGrid.Cells[col, row], 0)
      // Wert mit bisherigem Ergebnis vergleichen, Ergebnis anpassen
      if Result < value then
        Result := value;
    end;
  end;
end;

procedure abcdef; // Du musst nachsehen, wie deine procedure heißt
var
  MaxWert : Integer;
begin
  // ...
  If (Form3.Checkbox2.Checked=True) Then Form8.StringGrid1.Cells[1,4]:= '3';
  If (Form3.Checkbox2.Checked=True) Then Form8.StringGrid1.Cells[2,4]:= '2';


  // Beginn Eintragen neuer Versuch
 
  // MaxWert für den Bereich "Spalte 1, Zeile 0" bis "Spalte 1, Zeile 6"
  MaxWert := GetMaxFromStringGrid(Form8.StringGrid1, Rect(1, 0, 1, 6));
  Form8.Edit6.Text:= IntToStr(MaxWert);

  //Füllen von stringgrid 1 am anfang

  If (Form8.RadioButton1.Checked= True) Then Form8.StringGrid2.Hide;
  //...
end;

peetfree 15. Feb 2018 10:49

AW: Größter Wert aus StringGrid
 
Hallo,

vielen Dank für Eure umfassende Hilfe! Es hat alles geklappt und gestern habe ich das Projekt und die Prüfung vor Ort bestanden :-D .

Zitat:

Zitat von Blup (Beitrag 1393838)
Eine einfache Funktion sollte keine Abhängigkeiten zu bestimmten globalen Formvoriablen (Form8) haben.
Benötigte Informationen sollten als Parameter übergeben werden.
Ergebnisse werden zurückgegeben, die Ausgabe gehört nicht in die Funktion zum Ermitteln des Wertes.
-> wiederverwendbar
-> testbar

Eingabewerte sind hier das Grid und welcher Bereich zu durchsuchen ist.

[/delphi]

--> Das StringGrid befindet sich allerdings auf einem anderen Formular.

Zitat:

Zitat von Jasocul (Beitrag 1393644)

Das jetzt mal ohne große Erläuterungen, da ich wirklich nicht weiß, wo ich anfangen soll.

Ich denke, du solltest dich mit den Grundlagen der Delphi-Programmierung auseinandersetzen, ansonsten wirst du weiteren Aufgaben erheblich mehr Probleme bekommen.
Tutorials gibt es reichlich im Internet.

Danke, schon alleine zu sehen wie es richtig ist hat viel geholfen. Im Nachhinein ist das ja immer alles logisch :D

Das mit den Grundlagen stimmt sicherlicher, allerdings kann ich für kleinere Teilfächer des Studiums halt auch nich zu tief gehn, sonst bin ich noch in 10 Jahren an meinem Bachelor.


--> Nochmal Danke an alle!


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

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