Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi eigene Konsole -> Readln Problem (https://www.delphipraxis.net/37267-eigene-konsole-readln-problem.html)

hboy 3. Jan 2005 23:45

Re: eigene Konsole -> writeln output ?
 
hab gedacht das hier reicht... :(

"Also bei ReadLn wird wohl die Open-Prozedur aufgerufen... nur was muss ich ändern/zurückgeben damit die "datei" als lesbar gilt ? "

weil bei ReadLn Fehler 6 auftritt. Und genau dieses Readln tut eben nicht. *grübeö* wwwiiiessooo :gruebel:

Sprint 4. Jan 2005 00:00

Re: eigene Konsole -> writeln output ?
 
Zitat:

Zitat von hboy
"Also bei ReadLn wird wohl die Open-Prozedur aufgerufen... nur was muss ich ändern/zurückgeben damit die "datei" als lesbar gilt ? "

Mit diesem Satz kann ich überhaupt nichts anfangen.

hboy 4. Jan 2005 00:04

Re: eigene Konsole -> writeln output ?
 
sorry. Also es geht darum dass ein Fehler bei Readln auftritt. Ich weiß nicht wie ich ein Lesen realisieren soll. Testweise könnte man auch 'Test' in den Buffer schreiben.
Ich weiß allerdings nicht wo das Programm mit dem Fehler abbricht. Kleine Änderung:

Delphi-Quellcode:
Function ConsoleIn(var F: TTextRec): Integer;
begin
  // ???
  Result := 0;
end;

Function ConsoleOut(var F: TTextRec): Integer;
begin
  if not killed then ConsoleWin.proto.AddLine(F.Buffer,BackgroundColor,TextColor);
  FillChar(F.Buffer,F.BufPos-1,0);
  F.BufPos := 0;
  Result := 0;
end;

Function ConsoleIgnore(var F: TTextRec): Integer;
begin
  Result := 0;
end;


Function DevOpen(var F: TTextRec): Integer;
begin
  with F do begin
    BufPos := 0;
    BufEnd := 0;
    case Mode of
      fmInput: begin
        InOutFunc := @ConsoleIn;
        FlushFunc := @ConsoleIgnore;
      end;
      fmOutput: begin
        InOutFunc := @ConsoleOut;
        FlushFunc := @ConsoleOut;
      end;
      fmInOut: begin
        Mode := fmOutput;
        InOutFunc := @ConsoleOut;
        FlushFunc := @ConsoleOut;
      end;
    else
      Result := 1;
      Exit;
    end;
  end;
  Result := 0;
end;

Sprint 4. Jan 2005 00:06

Re: eigene Konsole -> writeln output ?
 
Bin ich blind oder kommt in deinem geposteten Beispiel kein Readln vor?

hboy 4. Jan 2005 00:07

Re: eigene Konsole -> writeln output ?
 
ich hab bis jetzt nur den Konsolencode gepostet. okay und das Prog schaut so aus:

Delphi-Quellcode:
program Project1;

uses
  Windows,messages,CConsole;
var msg:TMsg;
  a: string;
begin

  write('testing, testing.... *hust*');
  TextColor := $FF0000;
  write('.... everything seems to be in order');
  TextColor := $00FF00;
  BackgroundColor := $505050;
  write('Console test done.');

  sleep(1000);

  readln(a);

  write('Readln Successful !!!');

  while GetMessage(msg,0,0,0) do // aufhängen^^
  begin
    TranslateMessage(msg);
    DispatchMessage(msg);
    if not IsWindowVIsible(msg.hwnd) then break; // bis das Konsolenfenster geschlossen ist
  end;


end.

Sprint 4. Jan 2005 00:15

Re: eigene Konsole -> writeln output ?
 
Ich kann in deinem Code kein {$APPTYPE CONSOLE} finden. Ist das Ausgabe-Fenster kein Windows-Konsolenfenster, sondern dein eigenes Fenster? Wenn ja, hast du StdInput- StdOutput Handle gesetzt?

hboy 4. Jan 2005 00:59

Re: eigene Konsole -> Readln Problem
 
Richtig. Ich will mein eigenes Konsolenfenster verwenden, und wie in dem 2. Screenshot zu sehen ist funktioniert es über die Standardausgabedatei Output recht gut. Das Schreiben zumindest. Zum schreiben wird über Umwege ( F.FlushFunc enthält die Funktion, die folgendes aufruft : )

Delphi-Quellcode:
Function ConsoleOut(var F: TTextRec): Integer;
var IsLn: Boolean;
begin
  if (F.Buffer[F.BufPos-2] = #13) and (F.Buffer[F.BufPos-1] = #10) then
  begin
    IsLn := true; // future purpose
    F.Buffer[F.BufPos-2] := #0;
  end;
  if not killed then ConsoleWin.proto.AddLine(F.Buffer,BackgroundColor,TextColor);
  FillChar(F.Buffer,F.BufPos-1,0);
  F.BufPos := 0;
  Result := 0;
end;
beim Initiaisieren der Unit wird ein Fenster mit der Komponente erzeugt und in dieses wird der Buffer ausgegeben
Nur ein Lesen könnte man über Abfangen der WM_KEYDOWN messages in einem Loop realisieren, jedoch wird die Leseprozedur
Function ConsoleIn(var F: TTextRec): Integer;

nicht aufgerufen. Es wird nichtmal die InOutFunc aufgerufen oder die FlushFunc. OpenFunc auch nicht. Also frag ich mich was da geschieht das das Programm mit einem Fehler abbricht. Vielleicht muss ich auch F.Flags setzen ( wenn ich wüsste welche Flags zu setzen wären )


Also Wo steckt der Fehler ?

E/A Fehler 6

hboy 4. Jan 2005 01:00

Re: eigene Konsole -> Readln Problem
 
au meine fresse... sag nich es gibt extra input... neeiiiinn.... mom

hboy 4. Jan 2005 01:05

Re: eigene Konsole -> Readln Problem
 
okay also die Blindheit geht mal heute klar an mich ^^
Delphi-Quellcode:
  AssignDev(Output);
  AssignDev(Input);
bleibt jetzt nur noch das Problem, dass nichts gelesen wird

Sprint 4. Jan 2005 02:02

Re: eigene Konsole -> Readln Problem
 
Zitat:

Zitat von hboy
bleibt jetzt nur noch das Problem, dass nichts gelesen wird

Musst die Werte nach BufPtr schieben. Dabei auf BufSize, BufPos & BufEnd achten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 Uhr.
Seite 2 von 3     12 3      

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