Seite 1 von 1

Größe der Console

Verfasst: 15.02.2010 18:26
von EgonEprom
Kann die Größe der Console (Zeichen x Zeilen im Buffer, nicht die Fenstergröße) irgendwie eingestellt werden?
Oder wie kann ich erfahren, wie groß die Console ist
Ich benötige eine 80x25 bzw. 80x50 Teichen-Console für ein Terminal-Programm, ein öffnen im "Vollbild-Modus" also maximale Fenstergröße/ohne Slider wäre dann echt genial.

mfg egon

Re: Größe der Console

Verfasst: 15.02.2010 19:36
von RSBasic
Das Ermitteln der Informationen deiner Konsole: http://www.rsbasic.q-soft.ch/index.php? ... &Itemid=59

Das Ändern höchstens so: http://www.purebasic.fr/german/viewtopi ... 63#p132363
Aber sonst kA, sry^^

Vollbild: http://www.rsbasic.q-soft.ch/index.php? ... &Itemid=59
Klappt aber nicht bei Windows 7, wurde abgeschafft. (Bei mir jedenfalls <) )

Re: Größe der Console

Verfasst: 15.02.2010 21:00
von EgonEprom
Zwischenzeitlich habe ich festgestellt, daß "meine Console" 80 Zeichen x 300 Zeilen groß ist, wovon die ersten 25 Zeilen im Fenster direkt angezeigt werden. Mit dem anderen Link (Verändern der Größe) kann nur das darstellende Fenster verändert werden - bis zur maximalen Textbuffergröße (=> max 80 Zeichen) bzw. Bildschirmgröße (bei mir z. Zt. ca. 97 Zeilen)
Wenn ich jetzt den Textbuffer auf 50 Zeilen stutzen könnte, würde mir dieser zweite Link helfen, das Fenster auf volle größe zu bringen.
Aus den MSN-Infos habe ich entnommen, daß der Textbuffer jedoch nur größer zu machen geht !?!
In wie weit mache ich mich mit solchen Eingriffen plattformabhängig ?

mfg egon

Re: Größe der Console

Verfasst: 15.02.2010 21:05
von RSBasic
Erstmal Herzlich Willkommen im Forum :allright:

Ich glaube hiermit: http://www.purearea.net/pb/CodeArchiv/I ... onsole.pbi
Da gibt es glaube ich eine Procedure, mit der du die Buffergröße der Konsole ändern kannst.

\\Edit:
Hab grad genauer angeschaut.
Da kannst du nur die Buffergröße der Zeichehn ändern, aber nicht die Konsole selber.

Vielleicht kennt sich hier jemand mehr aus.

Re: Größe der Console

Verfasst: 19.02.2010 15:46
von EgonEprom
Hab's jetzt wohl raus:

Code: Alles auswählen

 Procedure ConsoleInit(xch.l,ych.l)
 
  Define gStdOut.l 
  Define consoleInfo.CONSOLE_SCREEN_BUFFER_INFO 
  Define rect.SMALL_RECT 

  If OpenConsole()
  
    EnableGraphicalConsole(1)
    ConsoleTitle("VT52")
  
    If xch < $20                                          ; limit column range
      xch = $20
    ElseIf xch > $50
      xch = $50 
    EndIf
      
    If ych < $10                                          ; limit column range
      ych = $10
    ElseIf ych > $50
      ych = $50  
    EndIf
      
    gStdOut.l = GetStdHandle_(#STD_OUTPUT_HANDLE) 
     
    rect\right = xch - 1 
    rect\bottom = ych - 1 
    SetConsoleWindowInfo_(gStdOut, 1, @rect) 
    SetConsoleScreenBufferSize_(gStdOut, ych<<16 | xch) 
    Con = 1                                                ; console is running
  Else
     MessageRequester("VT52", "Console not availible")
  EndIf
EndProcedure
Sieht ganz gus aus bis jetzt, ist nur noch nicht grüdlich getestet (nur Win2KSP4).

Und schon taucht das nächste Problem auf: Anstatt daß ein eingetipptes Ctrl-C von 'meinem' Program verarbeitet wird, schießt eben dieses die Konsole gänzlich ab (lästg) !

Ist für dieses Problem evtl. schon eine Lösung bekannt?

(Oder hätte ich dadraus ein neues Thema machen sollen?)

Re: Größe der Console

Verfasst: 19.02.2010 16:18
von Mok
EgonEprom hat geschrieben:Anstatt daß ein eingetipptes Ctrl-C von 'meinem' Program verarbeitet wird, schießt eben dieses die Konsole gänzlich ab (lästg) !
Kann man in der Konsole überhaup sachen abfragen, die nicht über Input() eingelesen werden? Bild

Re: Größe der Console

Verfasst: 19.02.2010 16:31
von Marvin
EgonEprom hat geschrieben:Und schon taucht das nächste Problem auf: Anstatt daß ein eingetipptes Ctrl-C von 'meinem' Program verarbeitet wird, schießt eben dieses die Konsole gänzlich ab (lästg) !

Ist für dieses Problem evtl. schon eine Lösung bekannt?
It's not a bug, it's a feature.
Es ist halt so, dass Strg+C auf Consolen das laufende Programm beendet. Unter UNIX wird an das Programm da noch ein entsprechendes Signal gesendet, das vom Programm abgefangen werden kann, um das Beenden zu verhindern. Wie es unter Windows ist, weiß ich nicht.

Es ist nur kein Problem, sondern eben ein Feature. :wink:

Re: Größe der Console / Ausklang

Verfasst: 28.02.2010 00:29
von EgonEprom
Nach noch einigen Experimenten konnte ich das Konsolen-Projekt zu einem brauchbaren Abschluß bringen: Die Größe wird bei der Initialisierung als Parameter übergeben und die diversen Control-Signale werden brauchbar verarbeitet:

zuerst den Ctrl-Handler definieren ( da gibt's 5 verschiedene signale: 0 = ^C, 1= Ctrl-Break,
3,4 und 5 sind CloseWindow, Logoff und Shutdown)

Code: Alles auswählen

Procedure CtrlHandler(fdwCtrlType.l) 
  Select fdwCtrlType
  Case 0                                                              ; Ctrl-C 
    Send($03)
    
  Case 1                                                          ; Ctrl-Break
;    MessageRequester("VT52", "Ctrl Break detected ?")

  Default ; close-event, logoff, shutdown
    run = 0                                                     ; stop console 
  
  EndSelect
  ProcedureReturn(-1)                           ; cancel ctrl-signal executing
EndProcedure
Der CtrlHandler muß mit einem TRUE verlassen werden, damit die Control-Signale nicht noch weiter ausgewertet werden ( Dann würde Ctrl-C doch noch die Konsole abschießen)

Nun die Initialisierung:

Code: Alles auswählen

Procedure ConsoleInit(xch.l,ych.l)
  Define gStdOut.l 
  Define consoleInfo.CONSOLE_SCREEN_BUFFER_INFO 
  Define rect.SMALL_RECT 

  If OpenConsole()
    EnableGraphicalConsole(1)
    ConsoleTitle("VT52")
    xch = range(xch, $20, $80)
    ych = range(ych, $10, $50)
    gStdOut.l = GetStdHandle_(#STD_OUTPUT_HANDLE) 
    rect\right = xch - 1 
    rect\bottom = ych - 1 
    SetConsoleWindowInfo_(gStdOut, 1, @rect) 
    SetConsoleScreenBufferSize_(gStdOut, ych<<16 | xch) 
    SetConsoleWindowInfo_(gStdOut, 1, @rect) 
    SetConsoleCtrlHandler_(@CtrlHandler(),-1) 
    Con = 1                                                ; console is running
  Else
     MessageRequester("VT52", "Console not availible")
  EndIf
EndProcedure


Das öffnet eine Konsole, stellt die Buffergröße und - soweit möglich - das darstellende Fenster auf die gewünschte Größe (der zulässige Wertebereich wird von mir mit der Prozeduer "Range(wert,min,max) begrenzt) eingestellt. Abschließend wird noch der ControlHandler verbogen.

Zum Programm im Ganzen: es ist ein einfaches "Satellitenterminal", welches dem Zielsystem (ursprünglich: 65C02 mit 160KB(!) Ram) über die serielle Schnittstelle einen Massenspeicher zur Verfügung stellt und an sonsten ein irgendwie VT52-kompatibles "farbtaugliches" Terminal darstellt, welches alles, was vom Zielsystem zur Anzeige gebracht werden soll, auch noch mitprotokolliert. (Falls das noch jemand gebrauchen kann, bitte bei mir melden)