Delphi-PRAXiS
Seite 1 von 3  1 23      

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 16:34


eigene Konsole -> Readln Problem
 
Hi Leute :)

Ich steh mal wieder vor einem kleinen Problemchen und bevor es mich wieder die ganze Nacht kostet hoff ich dass ihr mir da weiterhelfen könnt ^^

"Wird F weggelassen, wird die globale Variable Output verwendet, die auf die Standardausgabedatei der Prozesse zugreift. Beim Einsatz von Output in GUI-Anwendungen muss auf ein spezielles Vorgehen geachtet werden."

"spezielles Vorgehen" ? Also wie stell ich dass an eigene Prozeduren fürs Schreiben und Lesen umzusetzen ? Was hat es mit dieser Dateivariable auf sich ?

Edit: Die Hilfe meint noch weiter:
"Unter Windows haben die meisten Prozesse keine Standardausgabedatei und das Schreiben in Output löst einen Fehler aus. Wenn Delphi-Programme als Konsolenanwendungen gelinkt sind, verfügen sie über eine Standardausgabedatei."

Nur wie stellt delphi das an ? Ich hätte da gern meine eigene Konsole ^^

scp 3. Jan 2005 16:48

Re: eigene Konsole -> writeln output ?
 
Dies dürfte entweder über Pipes, nachzuschlagen unter Hier im Forum suchenCreatepipe und Hier im Forum suchenTStartUpInfo funktionieren, oder wie anno dazumal über Assign(OUTPUT, ), zu letzterem steht unter Assign etwas in der Hilfe.

PS: Fürdie Standardkonsole reicht wentweder {$APPTYPE CONSOLE} oder eine Kombination von AllocConsole und FreeConsole.

hboy 3. Jan 2005 16:51

Re: eigene Konsole -> writeln output ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
cool thx gleich mal gucken... btw state-of-the-art is ne nonvcl-kompo die so ausschaut ^^

scp 3. Jan 2005 16:56

Re: eigene Konsole -> writeln output ?
 
Wie hast du das bwerkstelligt? Das Problem bei Pipes ist nämlich, das die zunächst nur zweifarbig funktionieren.

hboy 3. Jan 2005 17:00

Re: eigene Konsole -> writeln output ?
 
bis jetzt wird die Konsole noch als Objekt angesprochen und nicht über die Standardausgabedatei, da bin ich gerade dabei, aber ich werds in ne Unit packen und dann kann man die Farbparameter über das Objekt anpassen. Mal sehn wie weit ich jetzt komm :) stay tuned

hboy 3. Jan 2005 17:13

Re: eigene Konsole -> writeln output ?
 
noch n btw: jemand lust mir bei meiner component library zu helfen ^^ awas kleiner Scherz ;)

hboy 3. Jan 2005 19:47

Re: eigene Konsole -> writeln output ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
sodele... es beginnt zu funktionieren..



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

ich weiß... Zeilenumbrüche fehlen halt ^^ gemach gemach :D
Jetzt wie mach ich Readln ? läuft doch bestimmt auch wieder über InOut ?

schaut dann so aus:

hboy 3. Jan 2005 20:15

Re: eigene Konsole -> writeln output ?
 
danke erst mal das ich so weit gekommen bin.

und weiter gehts mit der fragerei ^^

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

kleiner Einblick in den Code :

Delphi-Quellcode:
unit CCONSOLE;

interface

var TextColor, BackgroundColor: Cardinal;

implementation
  uses ConsoleWnd;

var
  ConsoleWin : TConsoleWnd;
  killed: Boolean;

Function DevOpen(var F: TTextRec): Integer;
begin
  // und was geht hier ???
  result :=0;
end;

Function DevInOut(var F: TTextRec): Integer;
begin
  case f.Mode of
    fmOutput:
      begin
        if not killed then ConsoleWin.proto.AddLine(F.Buffer,BackgroundColor,TextColor);
      end;
    fmInput:
      begin

      end;
    fmInOut:
      begin

      end;
  end;
  result :=0;
end;

Function DevFlush(var F: TTextRec): Integer;
begin
  case f.Mode of
    fmOutput:
      begin
        DevInOut(F);
        FillChar(F.Buffer,F.BufPos-1,0);
        F.BufPos := 0;
      end;
    fmInput:
      begin
      end;
    fmInOut:
      begin
      end;
  end;
  result :=0;
end;

Function DevClose(var F: TTextRec): Integer;
begin
  result :=0;
end;


procedure AssignDev(var F: Text);
begin
  with TTextRec(F) do
  begin
    Mode := fmClosed;
    BufSize := SizeOf(Buffer);
    BufPtr := @Buffer;
    OpenFunc := @DevOpen;
    InOutFunc := @DevInOut;
    FlushFunc := @DevFlush;
    CloseFunc := @DevClose;
    Name[0] := #0;
  end;
end;

initialization
  ConsoleWin := TConsoleWnd.Create(0);
  ConsoleWin.Caption := system.ParamStr(0)+ ' - NVConsole';
  ConsoleWin.Show;
  ConsoleWin.proto.AddLine('NonVCL Console by hbw-technology 2005 ',$0,$00C000);
  ConsoleWin.proto.AddLine('',0,0);
  AssignDev(Output);
finalization
  killed:= true;
end.

hboy 3. Jan 2005 23:17

Re: eigene Konsole -> writeln output ?
 
ja leute ich bin imma noch nich weiter hiiiiiiiiiiiiiiiiiilfeeee ^^

Sprint 3. Jan 2005 23:38

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 ?

Zitat:

ja leute ich bin imma noch nich weiter hiiiiiiiiiiiiiiiiiilfeeee ^^
Vielleicht solltest du dich mal klar und deutlich ausdrücken wo dein Problem liegt.

Delphi-Quellcode:
var
  S: String;
begin
  Readln(S);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:18 Uhr.
Seite 1 von 3  1 23      

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