Consolenbreite und Höhe fest einstellen ohne Scrollbalken.
Consolenbreite und Höhe fest einstellen ohne Scrollbalken.
Hallo, guten Tag.
Wie kann ich mit Purebasic eine Console erstellen zb mit fester Grösse :40x25 die ohne Scollbalken ist ?
Oder kann man irgendwie eine künstliche Console herstellen mit einem Screen ?
Danke.
Gruss
peter
Wie kann ich mit Purebasic eine Console erstellen zb mit fester Grösse :40x25 die ohne Scollbalken ist ?
Oder kann man irgendwie eine künstliche Console herstellen mit einem Screen ?
Danke.
Gruss
peter
-
- Beiträge: 41
- Registriert: 30.04.2012 16:38
Re: Consolenbreite und Höhe fest einstellen ohne Scrollbalk
Ich habe es mal mit einem CanvasGadget ausprobiert, siehe: http://forums.purebasic.com/german/view ... =8&t=26439

Das Fenster scrollt allerdings nicht. Wenn die untere Zeile erreicht ist und man will noch weiter, muss man das CanvasGadget mit dem Box()-Befehl löschen.

Das Fenster scrollt allerdings nicht. Wenn die untere Zeile erreicht ist und man will noch weiter, muss man das CanvasGadget mit dem Box()-Befehl löschen.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Consolenbreite und Höhe fest einstellen ohne Scrollbalk
CanvasGadget in ein ScrollAreaGadget packen und schon sollte das Scrollen möglich seinLothar Schirm hat geschrieben:Das Fenster scrollt allerdings nicht. Wenn die untere Zeile erreicht ist und man will noch weiter, muss man das CanvasGadget mit dem Box()-Befehl löschen.

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 41
- Registriert: 30.04.2012 16:38
Re: Consolenbreite und Höhe fest einstellen ohne Scrollbalk
Funkheld wollte doch, glaube ich, keinen Scrollbalken? - Meine Erklärung, mit dem Box()-Befehl das CanvasGadget zu löschen, war auch nicht ganz vollständig, dazu habe ich ja die Prozedur C_Clear() erfunden, die setzt auch den Cursor an den Anfang zurück.
Aber das mit dem ScrollAreaGadget ist eine gute Idee. Das habe ich auch schon mal mit einem selbstgebauten DataGrid gemacht. Das ist einfach ein Array aus StringGadgets, die man direkt beschreiben kann, in Form einer Liste (eindimensionales Array) oder einer Tabelle (zweidimensionales Array). Die Spaltenüberschriften sind als TextGadgets realisiert. Die Gadget-Nummern werden mit #PB_ANY generiert und dementsprechend in einem ein- bzw. zweidimensionalen Array gespeichert, so dass jede Zelle im DataGrid mit SetGadgetText() oder GetGadgetText() angesprochen werden kann. Wenn es von Interesse ist, kann ich den Code und ein Beispielprogramm ja mal posten, weil es so schön einfach ist. Im Forum gab es schon vornehmere und kompliziertere Lösungen, deswegen habe ich mich bisher nicht getraut ...
Aber das mit dem ScrollAreaGadget ist eine gute Idee. Das habe ich auch schon mal mit einem selbstgebauten DataGrid gemacht. Das ist einfach ein Array aus StringGadgets, die man direkt beschreiben kann, in Form einer Liste (eindimensionales Array) oder einer Tabelle (zweidimensionales Array). Die Spaltenüberschriften sind als TextGadgets realisiert. Die Gadget-Nummern werden mit #PB_ANY generiert und dementsprechend in einem ein- bzw. zweidimensionalen Array gespeichert, so dass jede Zelle im DataGrid mit SetGadgetText() oder GetGadgetText() angesprochen werden kann. Wenn es von Interesse ist, kann ich den Code und ein Beispielprogramm ja mal posten, weil es so schön einfach ist. Im Forum gab es schon vornehmere und kompliziertere Lösungen, deswegen habe ich mich bisher nicht getraut ...
Re: Consolenbreite und Höhe fest einstellen ohne Scrollbalk
Hallo, guten Abend.
Lothar Schirm, deine vorgehensweise liest sich ja sehr interessant .
Könntest du mal den Code bitte hier einmal reinstellen ?
Ich möchte nämlich eine Screen-Oberfläche generieren wie beim Z1013 , 32x32 Horizontral/Vertikal.
Danke.
Gruss
peter
Lothar Schirm, deine vorgehensweise liest sich ja sehr interessant .
Könntest du mal den Code bitte hier einmal reinstellen ?
Ich möchte nämlich eine Screen-Oberfläche generieren wie beim Z1013 , 32x32 Horizontral/Vertikal.
Danke.
Gruss
peter
-
- Beiträge: 41
- Registriert: 30.04.2012 16:38
Re: Consolenbreite und Höhe fest einstellen ohne Scrollbalk
Hallo Peter,
dies ist die Datei zum Testen des DataGrids (Ausgabe von Testdaten erfolgt auf das Konsolenfenster):
Das ist die zugehörige pbf-Datei (DataGridTest.pbf):
Und dies ist die Include-Datei DataGrid.pbi mit den Prozeduren zur Definition einer Liste oder einer Tabelle:
Eine neugierige Frage: Was ist eine Screen-Oberfläche wie beim Z1013 , 32x32 Horizontal/Vertikal? Das klingt dann doch eher nach der "CanvasGadget-Konsole" (siehe oben, Link zum Code ist angegeben). Allerdings weiß ich nicht, wie man da eine feste Spaltenzahl definieren kann, da die Zeichenbreiten der verschiedenen Buchstaben und Zahlen nicht einheitlich sind. Oder weiß jemand, ob es einen Schriftfont mit einheitlicher Zeichenbreite gibt?
Oder nimm FreeBASIC, da genügt eine Programmzeile: WIDTH 32, 32. Ist für Konsolenanwendungen eh besser geeignet als PureBasic.
Viel Erfolg,
Lothar
dies ist die Datei zum Testen des DataGrids (Ausgabe von Testdaten erfolgt auf das Konsolenfenster):
Code: Alles auswählen
;==============================================================================
; DataGridTest.pb
; Test des DataGrid
; Erstellt am 09.02.2013
; Letzte Bearbeitung am 17.02.2013
;==============================================================================
EnableExplicit
IncludeFile "DataGrid.pbi"
IncludeFile "DataGridTest.pbf"
Global Dim sListID.i(30)
Global Dim sTabID.i(30, 3)
Dim SpBreite.i(3)
Dim Titel.s(3)
Define i, j, event
Procedure Button_List(EventType)
; DataList auslesen
Protected.i i
ClearConsole()
ConsoleTitle("Daten in der Liste")
For i = 0 To 30
PrintN(GetGadgetText(sListID(i)))
Next
EndProcedure
Procedure Button_Tab(EventType)
; Tabelle auslesen
Protected.i i, j
ClearConsole()
ConsoleTitle("Daten in der Tabelle")
For i = 0 To 30
For j = 0 To 3
ConsoleLocate(19 * j, i)
Print(GetGadgetText(sTabID(i, j)))
Next
Next
EndProcedure
; Hauptprogramm
For i = 0 To 3
SpBreite(i) = 100
Titel(i) = "Spalte Nr. " + Str(i)
Next
OpenConsole()
ConsoleTitle("DataGridTest")
EnableGraphicalConsole(1)
OpenWindow_DataGrid()
DataList(sListID(), 20, 20, 160, 340, "Datenliste")
DataTab(sTabID(), 200, 20, 380, 340, SpBreite(), Titel())
For i = 0 To 30
SetGadgetText(sListID(i), "Eintrag Nr. " + Str(i))
Next
For i = 0 To 30
For j = 0 To 3
SetGadgetText(sTabID(i, j), "Eintrag Nr. " + Str(i) + "," + Str(j))
Next
Next
Repeat
event = WaitWindowEvent()
Until Window_DataGrid_Events(event) = #False
CloseConsole()
End
Code: Alles auswählen
Enumeration #PB_Compiler_EnumerationValue
#Window_DataGrid
EndEnumeration
Enumeration #PB_Compiler_EnumerationValue
#Button_List
#Button_Tab
EndEnumeration
Declare Button_List(EventType)
Declare Button_Tab(EventType)
Procedure OpenWindow_DataGrid()
OpenWindow(#Window_DataGrid, 0, 0, 600, 400, "DataGrid-Test - editierbares DataGrid", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
ButtonGadget(#Button_List, 20, 370, 160, 20, "Liste auslesen")
ButtonGadget(#Button_Tab, 200, 370, 100, 20, "Tabelle auslesen")
EndProcedure
Procedure Window_DataGrid_Events(event)
Select event
Case #PB_Event_CloseWindow
ProcedureReturn #False
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_List
Button_List(EventType())
Case #Button_Tab
Button_Tab(EventType())
EndSelect
EndSelect
ProcedureReturn #True
EndProcedure
Code: Alles auswählen
;==============================================================================
; DataGrid.pbi
; Beschreibbare Datenliste oder Tabelle
; Erstellt am 09.02.2013
;==============================================================================
EnableExplicit
Procedure DataList(Array StringID.i(1), x.i, y.i, Breite.i, Hoehe.i, Titel.s)
; Einspaltige Datenliste aus StringGadgets (Höhe = 20), eingeschlossen durch ein
; ScrollAreaGadget. Parameter:
; - StringID() = Array mit den Gadget-Konstanten der StringGadgets
; - x, y, Breite, Hoehe = Position und Abmessungen des ScrollAreaGadgets
; - Titel = Ueberschrift
Protected.i i, ScrollAreaID, TextID, n = ArraySize(StringID())
ScrollAreaID = ScrollAreaGadget(#PB_Any, x, y, Breite, Hoehe, Breite, 20 * (n + 2))
TextID = TextGadget(#PB_Any, 0, 0, Breite, 20, Titel, #PB_Text_Border)
For i = 0 To ArraySize(StringID())
StringID(i) = StringGadget(#PB_Any, 0, 20 * (1 + i), Breite, 20, "")
Next
CloseGadgetList()
EndProcedure
Procedure DataTab(Array StringID.i(2), x.i, y.i, Breite.i, Hoehe.i, Array SpBreite.i(1),
Array Titel.s(1))
; Datentabelle aus StringGadgets (Höhe = 20), eingeschlossen durch ein ScrollAreaGadget.
; Parameter:
; - StringID() = Array mit den Gadget-Konstanten der StringGadgets (erster Index = Zeile,
; zweiter Index = Spalte)
; - x, y, Breite, Hoehe = Position und Abmessungen des ScrollAreaGadgets
; - SpBreite() = Array mit den Spaltenbreiten
; - Titel() = Spaltenüberschriften
Protected.i i, j, ScrollAreaID, m = ArraySize(StringID(), 1), n = ArraySize(StringID(), 2)
Protected Dim TextID.i(n)
Protected Dim Col.i(n)
; Spaltenpositonen berechnen:
Col(0) = 0
For j = 1 To n
Col(j) = Col(j - 1) + SpBreite(j - 1)
Next
; Tabelle erzeugen:
ScrollAreaID = ScrollAreaGadget(#PB_Any, x, y, Breite, Hoehe, Col(n) + SpBreite(n), 20 * (m + 2))
For j = 0 To n
TextID(j) = TextGadget(#PB_Any, Col(j), 0, SpBreite(j), 20, Titel(j), #PB_Text_Border)
Next
For i = 0 To m
For j = 0 To n
StringID(i, j) = StringGadget(#PB_Any, Col(j), 20 * (1 + i), SpBreite(j), 20, "")
Next
Next
CloseGadgetList()
EndProcedure
Oder nimm FreeBASIC, da genügt eine Programmzeile: WIDTH 32, 32. Ist für Konsolenanwendungen eh besser geeignet als PureBasic.
Viel Erfolg,
Lothar
Re: Consolenbreite und Höhe fest einstellen ohne Scrollbalk
Ist ein Screen von 32x32 Zeichen (je Zeichen 8 Bit Breit und 8 Bit Hoch).Eine Frage: Was ist eine Screen-Oberfläche wie beim Z1013 , 32x32 Horizontal/Vertikal? Das klingt dann doch eher nach der "CanvasGadget-Konsole" (siehe oben, Link zum Code ist angegeben).
Ich muss es anders machen.
Danke.
Gruss
peter
-
- Beiträge: 8
- Registriert: 16.03.2013 19:44
Re: Consolenbreite und Höhe fest einstellen ohne Scrollbalk
@Funkheld
Ich würde dies wiefolgt lösen:
Ich würde dies wiefolgt lösen:
Code: Alles auswählen
Global Cols.i = 40 ; Breite
Global Lines.i = 25 ; Hoehe
OpenConsole( "Console Test" )
RunProgram( GetEnvironmentVariable("COMSPEC") , "/c mode con: cols=" + Cols + " lines=" + Lines, "c:\" , #PB_Program_Wait )
ClearConsole()
Input()
PureBasic 5.60
Re: Consolenbreite und Höhe fest einstellen ohne Scrollbalk
Ja, danke für den Vorschlag.
Kann man auch irgendwie die Form der Zeichen verändern ?
Danke.
Gruss
peter
Kann man auch irgendwie die Form der Zeichen verändern ?
Danke.
Gruss
peter