Größe der Console

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
EgonEprom
Beiträge: 24
Registriert: 15.02.2010 18:18
Computerausstattung: Windows2000-XP-Vista-7
Wohnort: Saarwellingen

Größe der Console

Beitrag 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
Wer offen für alles ist - ist nicht ganz dicht ?
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Größe der Console

Beitrag 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 <) )
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
EgonEprom
Beiträge: 24
Registriert: 15.02.2010 18:18
Computerausstattung: Windows2000-XP-Vista-7
Wohnort: Saarwellingen

Re: Größe der Console

Beitrag 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
Wer offen für alles ist - ist nicht ganz dicht ?
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Größe der Console

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
EgonEprom
Beiträge: 24
Registriert: 15.02.2010 18:18
Computerausstattung: Windows2000-XP-Vista-7
Wohnort: Saarwellingen

Re: Größe der Console

Beitrag 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?)
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Größe der Console

Beitrag 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
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Marvin
Beiträge: 497
Registriert: 17.07.2005 14:42
Wohnort: Krikkit

Re: Größe der Console

Beitrag 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:
Benutzeravatar
EgonEprom
Beiträge: 24
Registriert: 15.02.2010 18:18
Computerausstattung: Windows2000-XP-Vista-7
Wohnort: Saarwellingen

Re: Größe der Console / Ausklang

Beitrag 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)
Antworten