write (Konsole) immer an der gleichen Stelle?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
br_klaus
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?

Beitrag von br_klaus »

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

Scotty
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?

Beitrag von Scotty »

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.
}

br_klaus
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?

Beitrag von br_klaus »

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.
}
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?)

Socke
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?

Beitrag von Socke »

br_klaus hat geschrieben:Ich habe aber nur da kleine Problem, dass ich gar keine Unit Crt eingebaut habe.
Damit du die Funktion(en) (tty)GotoXy nutzen kannst, wirst du das Wohl oder Übel tun müssen.
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?)
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).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Scotty
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?

Beitrag von Scotty »

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

br_klaus
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?

Beitrag von br_klaus »

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
Zum Link [1]: Ich dachte, Interrupts würden in Win32 nicht mehr verwendet und statt dessen Win API Funktionen?

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.

Benutzeravatar
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?

Beitrag von m.fuchs »

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.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
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?

Beitrag von af0815 »

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).

br_klaus
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?

Beitrag von br_klaus »

af0815 hat geschrieben:Mit BS (Backspace) den Cursor zurückbewegen. BS hat den ASCII Code 08.
Und wie schicke ich diese Information (Tastatureingabe) an die Konsole?
mit write(#8)? Werde es gleich auspropieren.

br_klaus
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?

Beitrag von br_klaus »

br_klaus hat geschrieben:
af0815 hat geschrieben:Mit BS (Backspace) den Cursor zurückbewegen. BS hat den ASCII Code 08.
Und wie schicke ich diese Information (Tastatureingabe) an die Konsole?
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?

Socke
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?

Beitrag von Socke »

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?
Neue Frage => neuer Thread.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten