write (Konsole) immer an der gleichen Stelle?
-
- Beiträge: 244
- Registriert: Do 21. Jan 2010, 22:33
- OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
- CPU-Target: 32Bit
- Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)
write (Konsole) immer an der gleichen Stelle?
Hallo,
habe ein kleines Konsolenprogramm und möchte da gerne die Ausgabe von write so lenken, daß immer an derselben Stelle geschrieben wird. Geht das? Früher gab es da in der Unit crt die Prozeduren Gotoxy(x,y) u.a. Geht das hier auch? Ich kenne bisher nur write und writeln.
Herzlichen Dank
habe ein kleines Konsolenprogramm und möchte da gerne die Ausgabe von write so lenken, daß immer an derselben Stelle geschrieben wird. Geht das? Früher gab es da in der Unit crt die Prozeduren Gotoxy(x,y) u.a. Geht das hier auch? Ich kenne bisher nur write und writeln.
Herzlichen Dank
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: write (Konsole) immer an der gleichen Stelle?
Ctrl+Linksklick öffnet die Unit (oder Datei) unter dem Cursor. Aber auch auf anderem Weg kommt man an den Quellcode von crt. Und dort steht u.a.:
procedure ttyGotoXY(x,y:longint);
{
Goto XY on the Screen, if a value is 0 the goto the current
postion of that value and always recalc the ansicode for it
}
Procedure GotoXy(X: tcrtcoord; Y: tcrtcoord);
{
Go to coordinates X,Y in the current window.
}
-
- Beiträge: 244
- Registriert: Do 21. Jan 2010, 22:33
- OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
- CPU-Target: 32Bit
- Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)
Re: write (Konsole) immer an der gleichen Stelle?
Ich habe aber nur da kleine Problem, dass ich gar keine Unit Crt eingebaut habe. Die muesste ich dann wohl erst noch extra angeben. Denn write und writeln funktionieren anscheinend auch ohne diese Unit (zumindest bruacht man sie nicht extra einzubiden, geschieht das vielleicht schon von zuhause aus?)Scotty hat geschrieben:Ctrl+Linksklick öffnet die Unit (oder Datei) unter dem Cursor. Aber auch auf anderem Weg kommt man an den Quellcode von crt. Und dort steht u.a.:procedure ttyGotoXY(x,y:longint);
{
Goto XY on the Screen, if a value is 0 the goto the current
postion of that value and always recalc the ansicode for it
}
Procedure GotoXy(X: tcrtcoord; Y: tcrtcoord);
{
Go to coordinates X,Y in the current window.
}
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: write (Konsole) immer an der gleichen Stelle?
Damit du die Funktion(en) (tty)GotoXy nutzen kannst, wirst du das Wohl oder Übel tun müssen.br_klaus hat geschrieben:Ich habe aber nur da kleine Problem, dass ich gar keine Unit Crt eingebaut habe.
Die Funktionen Write und WriteLn gehören zu der Sprache Pascal; sie sind in der Unit System definiert. Die Unit System wird implizit in jedem Programm/jeder Bibliothek eingebunden (man muss sie nicht angeben).br_klaus hat geschrieben:Die muesste ich dann wohl erst noch extra angeben. Denn write und writeln funktionieren anscheinend auch ohne diese Unit (zumindest bruacht man sie nicht extra einzubiden, geschieht das vielleicht schon von zuhause aus?)
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: write (Konsole) immer an der gleichen Stelle?
Wenn du, warum auch immer, die Unit crt nicht einbinden willst, dann lässt sich vielleicht die Funktionen nachbauen. Im Quellcode findest du ausgehend von gotoxy() irgendwann fpWrite(), mit dem man offensichtlich den Cursor verschieben kann. Vermutlich gibt es auch einfache Assembler-Anweisungen dazu [1].
Ich vertraue Konsolenanwendungen, die eigenartige Dinge machen, nicht unbedingt. Warum muss der Cursor platziert werden?
[1] http://assemblytutorial.blogspot.de/201 ... ursor.html
Ich vertraue Konsolenanwendungen, die eigenartige Dinge machen, nicht unbedingt. Warum muss der Cursor platziert werden?
[1] http://assemblytutorial.blogspot.de/201 ... ursor.html
-
- Beiträge: 244
- Registriert: Do 21. Jan 2010, 22:33
- OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
- CPU-Target: 32Bit
- Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)
Re: write (Konsole) immer an der gleichen Stelle?
Zum Link [1]: Ich dachte, Interrupts würden in Win32 nicht mehr verwendet und statt dessen Win API Funktionen?Scotty hat geschrieben:Wenn du, warum auch immer, die Unit crt nicht einbinden willst, dann lässt sich vielleicht die Funktionen nachbauen. Im Quellcode findest du ausgehend von gotoxy() irgendwann fpWrite(), mit dem man offensichtlich den Cursor verschieben kann. Vermutlich gibt es auch einfache Assembler-Anweisungen dazu [1].
Ich vertraue Konsolenanwendungen, die eigenartige Dinge machen, nicht unbedingt. Warum muss der Cursor platziert werden?
[1] http://assemblytutorial.blogspot.de/201 ... ursor.html
Wenn ich gotoxy() oder wherex verwende, gibt es eine Fehlermeldung: unbekannt. D.h. es scheinen nur write und writeln fest implementiert zu sein.
Gibt es denn keine internen Variablen, wo zB das Fensterhandle der Konsole gespeichert wird und man dann mit der Message WM_Gettext bzw WM_Settext u.ä. darauf zugreifen kann? Oder eine Variable, die die letzte Schreibposition sich merkt und die man dann verändern kann?
Ich wollte nur einfach in einer Zeile den Fortschritt einer bestimmten Prozedur in % angeben lassen (mit write() ) und dazu müsste der SchreibCursur (aber nicht der MausCursor) immer wieder an dieselbe Stelle zurückkehren und die jeweilige Zahl schreiben.
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2827
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: write (Konsole) immer an der gleichen Stelle?
Was stört dich denn an der Verwendung der Unit Crt?
Die hat mir immer nur Schwierigkeiten bereitet, wenn es um Konsolenprogramme ging die Daten per Pipe übergeben bekommen. Für ein interaktives Programm (und warum sonst solltest du sonst eine Fortschrittsanzeige verwenden) sehe ich da erst einmal keine Probleme.
Die hat mir immer nur Schwierigkeiten bereitet, wenn es um Konsolenprogramme ging die Daten per Pipe übergeben bekommen. Für ein interaktives Programm (und warum sonst solltest du sonst eine Fortschrittsanzeige verwenden) sehe ich da erst einmal keine Probleme.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
- af0815
- Lazarusforum e. V.
- Beiträge: 6874
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: write (Konsole) immer an der gleichen Stelle?
Mit BS (Backspace) den Cursor zurückbewegen. BS hat den ASCII Code 08.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 244
- Registriert: Do 21. Jan 2010, 22:33
- OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
- CPU-Target: 32Bit
- Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)
Re: write (Konsole) immer an der gleichen Stelle?
Und wie schicke ich diese Information (Tastatureingabe) an die Konsole?af0815 hat geschrieben:Mit BS (Backspace) den Cursor zurückbewegen. BS hat den ASCII Code 08.
mit write(#8)? Werde es gleich auspropieren.
-
- Beiträge: 244
- Registriert: Do 21. Jan 2010, 22:33
- OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
- CPU-Target: 32Bit
- Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)
Re: write (Konsole) immer an der gleichen Stelle?
br_klaus hat geschrieben:Und wie schicke ich diese Information (Tastatureingabe) an die Konsole?af0815 hat geschrieben:Mit BS (Backspace) den Cursor zurückbewegen. BS hat den ASCII Code 08.
mit write(#8)? Werde es gleich auspropieren.
Hat geklappt! Herzlichen Dank!
Theoretisch könnte man damit wahrscheinlich sogar eine Zeile zurückgehen (80 mal #8).
Jetzt hätte ich nur noch eine Frage. Bei der Assembler-Ausgabe wird immer ein Format genommen, das für mich schwer zu lesen ist, ich bin den Intel gewohnt (wie er auch in MASM und TASM und anderen ASM-Programmen üblich ist). Gib es eine Möglichkeit, die Ausgabe dahingehend umzuändern?
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: write (Konsole) immer an der gleichen Stelle?
Neue Frage => neuer Thread.br_klaus hat geschrieben:Jetzt hätte ich nur noch eine Frage. Bei der Assembler-Ausgabe wird immer ein Format genommen, das für mich schwer zu lesen ist, ich bin den Intel gewohnt (wie er auch in MASM und TASM und anderen ASM-Programmen üblich ist). Gib es eine Möglichkeit, die Ausgabe dahingehend umzuändern?
- fpc -h
- RTFM: http://www.freepascal.org/docs.var
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein