Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehlermeldung EInOut Error (https://www.delphipraxis.net/6759-fehlermeldung-einout-error.html)

thorstenf01 21. Jul 2003 13:21


Fehlermeldung EInOut Error
 
Hallo!
Wer kann mir dabei helfen, den folgenden Fehler in der folgenden Ausgabeprozedur zu
finden, so daß die Ausgabe funktioniert.
Ich erhielt beim compilieren folgende Meldung:
"...Exception der Klasse EInOut Error...Meldung:'E/A-Fehler6'...

Code:
procedure TForm3.Button5Click(Sender: TObject);
var
  jk, jj, ss, kk  : integer;
  min, Sum, Sum1, Dif                       : real;
begin
  with StringGrid1 do
 begin
  StringGrid1.FixedCols:=0; StringGrid1.FixedRows:=1;
  StringGrid1.ColCount:=5; StringGrid1.RowCount:=367;
  StringGrid1.Cells[0,0]:='Tag';
  StringGrid1.Cells[1,0]:='Datum';
  StringGrid1.Cells[2,0]:='Abschattungsbeginn';
  StringGrid1.Cells[3,0]:='Abschattungsende';
  StringGrid1.Cells[4,0]:='Belastungszeit';
  kk:=0;
  for jk:=1 to 366 do
    if gSchatA[jk]>0 then begin
      kk:=kk+1;
      Tag:=jk;
      Deklination(Tag);
      AU(Tag);
      tAnfang:=0.1*SchatA[jk]+0.9*gSchatA[jk];
      Besser(tAnfang);
      Dif:= abs(gSchatA[jk]-gZeit);
      if (Dif < 0.00025) or (gZeit=0) then
        gSchatA[jk]:=gZeit
      else
        repeat
          tAnfang:=gSchatA[jk];
          Besser(tAnfang);
          Dif:=abs(gSchatA[jk]-gZeit);
          gSchatA[jk]:=gZeit;
        until Dif < 0.00025;
      tAnfang:=0.1*SchatE[jk]+0.9*gSchatE[jk];
      Besser(tAnfang);
      Dif:= abs(gSchatE[jk]-gZeit);
      if (Dif < 0.00025) or (gZeit=0) then
        gSchatE[jk]:=gZeit
      else
        repeat
          tAnfang:=gSchatE[jk];
          Besser(tAnfang);
          Dif:=abs(gSchatE[jk]-gZeit);
          gSchatE[jk]:=gZeit;
        until Dif < 0.00025;
      if gSchatA[jk]=0 then
        if gSchatE[jk] >0 then
          gSchatA[jk]:=gSchatE[jk];
      if gSchatE[jk]=0 then
        if gSchatA[jk] >0 then
          gSchatE[jk]:=gSchatA[jk];
      Belastung[jk]:=(SchatE[jk]-SchatA[jk])*60;
      gBela[jk]:=(gSchatE[jk]-gSchatA[jk])*60;

      // Zeitumwandlung in Stunden und Minuten
      ss:=trunc(gSchatA[jk]);
      min:=round((gSchatA[jk]-SS)*60);
      if min=60 then begin
        ss:=ss+1;
        min:=0;
      end;
      gSchatA[jk]:=ss+min/100;
      ss:=trunc(gSchatE[jk]);
      min:=round((gSchatE[jk]-ss)*60);
      if min=60 then begin
        ss:=ss+1;
        min:=0;
      end;
      gSchatE[jk]:=ss+min/100;
      Tag:=jk;
      Datum(Tag);
      jj:=Trunc(kk/20);
      if jj= kk/20 then Readln;
      StringGrid1.Cells[0,jk]:=InttoStr(jk);
      StringGrid1.Cells[1,jk]:=InttoStr(Dat)+' '+Monat;
      StringGrid1.Cells[2,jk]:=FormatFloat('0.00', gSchatA[jk]);
      StringGrid1.Cells[3,jk]:=FormatFloat('0.00', gSchatE[jk]);
      StringGrid1.Cells[4,jk]:=FormatFloat('0.0', gBela[jk]);
      StringGrid1.RowCount:=StringGrid1.RowCount+1;
    end;end;
  Sum:=0;
  Sum1:=0;
  for jk:=1 to 366 do begin
    Sum:=Sum+Belastung[jk];
    Sum1:=Sum1+gBela[jk];
  end;
  Jahrbela:=Sum/60;
  Jahrbe:=Sum1/60;
  StringGrid1.RowCount:=StringGrid1.RowCount+1;
  StringGrid1.Cells[0,StringGrid1.RowCount]:='Jahresbelastung:';
  StringGrid1.Cells[1,StringGrid1.RowCount]:=FormatFloat('0.0', Jahrbe);
  StringGrid1.Cells[2,StringGrid1.RowCount]:=FormatFloat('0.0', Jahrbela);
  readln; // Hier ist die Unterbrechnug des Programmes
end;
Danke für die Hilfe
Gruß
TF

Luckie 21. Jul 2003 13:45

Re: Fehlermeldung EInOut Error
 
Könntest du den Fehler etwas eingrenzen? Ich habe keine Lust das Code-Monster erst zu zerlegen.

HellAngel666 21. Jul 2003 14:17

Re: Fehlermeldung EInOut Error
 
HI!

Hast schon mal probiert, das READLN einfach durch
ein ShowMessage(''); zu ersetzen ???

Sollte dann gehen.... hoffentlich :D

thorstenf01 21. Jul 2003 14:18

Re: Fehlermeldung EInOut Error
 
Hy,
der Pfeil (Fehlermeldung) zeigt auf die vorletzte Zeile.
Gruß
Thorsten

Chewie 21. Jul 2003 14:21

Re: Fehlermeldung EInOut Error
 
Was hat das ReadLn hier zu suchen? Damit liest du von der Standardeingabe. Was hat das in einem GUI-Programm zu suchen?

Christian Seehase 21. Jul 2003 14:26

Re: Fehlermeldung EInOut Error
 
Moin Thorsten,

lass mal das ReadLn weg.
Was soll das überhaupt bewirken?

Da Du ein fensterorientiertes Programm hast, hast Du standardmässig auch keine Konsole, und somit schlägt ein einfacher ReadLn auch fehl.

Error 6 ist ERROR_INVALID_HANDLE, da Dein ReadLn auf ein nicht vorhandenes StdIn Handle zugreifen will.

Oder Du lässt Deinem Programm eine Konsole zuweisen.

Delphi-Quellcode:
  AllocConsole;
  ReadLn;
  FreeConsole;

thorstenf01 21. Jul 2003 15:03

Re: Fehlermeldung EInOut Error
 
Hallo noch einmal,
das 'readln' stammt aus der Übersetzung aus dem Pascal Quellcode.
Ich wusste bisher nicht, mit welchen Delphi Befehl readln ersetzt werden
kann. Vielleicht ist dies auch nicht notwendig, da ja ein stringgrid
verwendet wird.
Wenn er doch ersetzt werden muß, welchen Befehl benötige ich?
Gruß
Thorsten

Luckie 21. Jul 2003 15:09

Re: Fehlermeldung EInOut Error
 
Gar keinen. readln liest eine Eingabe von der Konsole. Wo bekommst du denn deine Eingaben her?

Aber ich habe den Verdacht, dass readln stand da aus einem anderen Grund, nämlich dass sich das Programm nicht gleich beendet und die Konsole geschlossen wird bevor man das Ergebnis gelesen hat. Das readln am Ende erfordert erst noch ein Return. Was auch für meine Theorie spricht, ist die Tatsache, dass die Eingabe nirgens gespeichert wird.

thorstenf01 21. Jul 2003 15:20

Re: Fehlermeldung EInOut Error
 
Hy,
vielleicht gibt der ursprüngliche Pascal Quellcode Aufschluss:
Code:
procedure Ausgabe;
var  jk,jj,ss,kk                                          :integer;
      min, Sum, Sum1, Dif                                  :real;
begin ClrScr;
      writeln; writeln; Write('         ');
      writeln('                Schattenwurfzeiten'); writeln;
      Write('  ');
      writeln(' Tag   Datum Abschattungsbeginn Abschattungsende Belastungszeit');
      Write('   ');
      Writeln('____________________________________________________________________');
      kk:=0;
      for jk:=1 to 366 do begin
      if gSchatA[jk]>0 then begin
      kk:=kk+1;
      Tag:=jk; Deklination(Tag); AU(Tag);
      tAnfang:=0.1*SchatA[jk]+0.9*gSchatA[jk];
               Besser(tAnfang);
               Dif:= abs(gSchatA[jk]-gZeit);
      if (Dif < 0.00025) or (gZeit=0) then gSchatA[jk]:=gZeit else begin
      repeat
               tAnfang:=gSchatA[jk]; Besser(tAnfang);
               Dif:=abs(gSchatA[jk]-gZeit);
               gSchatA[jk]:=gZeit;
      until Dif < 0.00025; end;

      tAnfang:=0.1*SchatE[jk]+0.9*gSchatE[jk];
               Besser(tAnfang);
               Dif:= abs(gSchatE[jk]-gZeit);
      if (Dif < 0.00025) or (gZeit=0) then gSchatE[jk]:=gZeit else begin
      repeat
               tAnfang:=gSchatE[jk]; Besser(tAnfang);
               Dif:=abs(gSchatE[jk]-gZeit);
               gSchatE[jk]:=gZeit;
      until Dif < 0.00025; end;

      if gSchatA[jk]=0 then begin
                       if gSchatE[jk] >0 then gSchatA[jk]:=gSchatE[jk]; end;
      if gSchatE[jk]=0 then begin
                       if gSchatA[jk] >0 then gSchatE[jk]:=gSchatA[jk]; end;
      Belastung[jk]:=(SchatE[jk]-SchatA[jk])*60;
      gBela[jk]:=(gSchatE[jk]-gSchatA[jk])*60;

      {Zeitumwandlung in Stunden und Minuten}
      ss:=trunc(gSchatA[jk]);
      min:=round((gSchatA[jk]-SS)*60);
      if min=60 then begin ss:=ss+1; min:=0; end;
      gSchatA[jk]:=ss+min/100;
      ss:=trunc(gSchatE[jk]);
      min:=round((gSchatE[jk]-ss)*60);
      if min=60 then begin ss:=ss+1; min:=0; end;
      gSchatE[jk]:=ss+min/100;

      Tag:=jk;
      Datum(Tag);

      jj:=Trunc(kk/20);
      if jj= kk/20 then readln;
      Write('   ');
      writeln(jk:4,Dat:6,Monat:5, gSchatA[jk]:10:2,' Uhr', gSchatE[jk]:14:2,' Uhr',
                                             gBela[jk]:13:1,' min');

                                                                    end; end;
      Sum:=0;    Sum1:=0;
      for jk:=1 to 366 do begin
      Sum:=Sum+Belastung[jk];
      Sum1:=Sum1+gBela[jk]; end;
      Jahrbela:=Sum/60;   Jahrbe:=Sum1/60;


      Writeln;Write('    ');
      Writeln('Jahresbelastung:', Jahrbe:8:1,' Stunden', Jahrbela:14:1 );
      readln;
end;
Gruß
Thorsten

Luckie 21. Jul 2003 15:25

Re: Fehlermeldung EInOut Error
 
Sieht so aus, als ob ich Recht hätte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:13 Uhr.
Seite 1 von 2  1 2      

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