- Abfrage der Cursorposition
- Abfrage von Vor- und Hintergrundfarbe
- Text in Zeile zentrieren
- Rahmen (auch farbig ausgefüllt)
- Erweiterung der Input-Funktion: Editieren eines vorbelegten String mit Längenbegrenzung.
Beispielprogramm:
Code: Alles auswählen
;==============================================================================
; KonsoleDemo.pb
; Konsolen-Demoprogramm
; Erstellt am 14.07.2012
; Letzte Bearbeitung am 24.02.13
;==============================================================================
EnableExplicit
IncludeFile "Konsole.pbi"
Define.s key, Name, Strasse, Ort, Tel
Define.i i, x0, y0
Define. d dx, x
;- Konsole öffnen
OpenConsole()
EnableGraphicalConsole(1)
ConsoleColor(15, 1)
ClearConsole()
ConsoleTitle("Konsolen-Demoprogramm")
Zentriert(12, "Druecken Sie eine beliebige Taste!")
Repeat
key = Inkey()
Until key <> ""
;- Menü
ClearConsole()
ConsoleTitle("Menue")
ConsoleColor(14, 3)
Rahmen(1, 1, 16, 8, "Datei")
ConsoleLocate(3, 3): Print("0 Neu")
ConsoleLocate(3, 4): Print("1 Oeffnen")
ConsoleLocate(3, 5): Print("2 Speichern")
ConsoleLocate(3, 6): Print("3 Schliessen")
Repeat
key = Inkey()
Until (key <> "" And Val(key) <= 3)
ConsoleColor(15, 1)
ConsoleLocate(1, 10)
Print("Gewaehlt: Menuepunkt " + key)
Zentriert(24, "Druecken Sie eine beliebige Taste zum Fortsetzen!")
Repeat
key = Inkey()
Until key <> ""
;- Eingabemaske
ClearConsole()
ConsoleTitle("Eingabemaske")
ConsoleColor(14, 3)
Rahmen(10, 7, 60, 8, "Telefonbuch-Eingabe")
ConsoleLocate(12, 9): Print("Name: ")
x0 = GetCursorX()
ConsoleLocate(12, 10): Print("Strasse: ")
ConsoleLocate(12, 11): Print("Wohnort: ")
ConsoleLocate(12, 12): Print("Telefon: ")
Repeat
ConsoleLocate(x0, 9): Name = Edit(Name, 45)
ConsoleLocate(x0, 10): Strasse = Edit(Strasse, 45)
ConsoleLocate(x0, 11): Ort = Edit(Ort, 45)
ConsoleLocate(x0, 12): Tel = Edit(Tel, 45)
ConsoleLocate(12, 13): Print("Werte uebernehmen j/n: ")
key = Input()
Until LCase(key) = "j"
ConsoleColor(15, 1)
ConsoleLocate(0, 17): PrintN("Eingegebene Daten:")
PrintN(Name)
PrintN(Strasse)
PrintN(Ort)
PrintN(Tel)
Zentriert(24, "Druecken Sie eine beliebige Taste zum Fortsetzen!")
Repeat
key = Inkey()
Until key <> ""
;- Tabelle
ClearConsole()
ConsoleTitle("Wertetabelle trigonometrischer Funktionen")
PrintN(RSet("x in Grad)", 10) + RSet("sin(x)", 10) + RSet("cos(x)", 10) + RSet("tan(x)", 10))
For i = 1 To 40
Print("-")
Next
PrintN("")
dx = 5
For i = 0 To 18
x = i * dx
PrintN(RSet(StrF(x, 5), 10) + RSet(StrF(Sin(Radian(x)), 5), 10) + RSet(StrF(Cos(Radian(x)), 5), 10) +
RSet(StrF(Tan(Radian(x)), 5), 10))
Next
Zentriert(24, "Druecken Sie eine beliebige Taste zum Beenden!")
Repeat
key = Inkey()
Until key <> ""
CloseConsole()
End
Code: Alles auswählen
;=========================================================================
; Konsolenfunktionen für einfache Bedienoberflächen
; mit EnableGraphicalConsole(1)
; Konsole.pbi
; Erstellt am 13.07.2012
; Letzte Bearbeitung am 24.02.13
;=========================================================================
EnableExplicit
Procedure.i GetCursorX()
; Gibt die x-Position des Cursors zurück
Protected.CONSOLE_SCREEN_BUFFER_INFO ConsoleInfo
Protected hConsoleOutput
hConsoleOutput = GetStdHandle_(#STD_OUTPUT_HANDLE )
GetConsoleScreenBufferInfo_(hConsoleOutput, ConsoleInfo)
ProcedureReturn ConsoleInfo\dwCursorPosition\x
EndProcedure
Procedure.i GetCursorY()
; Gibt die y-Position des Cursors zurück
Protected.CONSOLE_SCREEN_BUFFER_INFO ConsoleInfo
Protected hConsoleOutput
hConsoleOutput = GetStdHandle_(#STD_OUTPUT_HANDLE )
GetConsoleScreenBufferInfo_(hConsoleOutput, ConsoleInfo)
ProcedureReturn ConsoleInfo\dwCursorPosition\y
EndProcedure
Procedure.i GetFrontColor()
; Gibt die Zeichenfarbe zurück
Protected.CONSOLE_SCREEN_BUFFER_INFO ConsoleInfo
Protected hConsoleOutput
hConsoleOutput = GetStdHandle_(#STD_OUTPUT_HANDLE )
GetConsoleScreenBufferInfo_(hConsoleOutput, ConsoleInfo)
ProcedureReturn ConsoleInfo\wAttributes % 16
EndProcedure
Procedure.i GetBackColor()
; Gibt die Hintergrundfarbe zurück
Protected.CONSOLE_SCREEN_BUFFER_INFO ConsoleInfo
Protected hConsoleOutput
hConsoleOutput = GetStdHandle_(#STD_OUTPUT_HANDLE )
GetConsoleScreenBufferInfo_(hConsoleOutput, ConsoleInfo)
ProcedureReturn ConsoleInfo\wAttributes / 16
EndProcedure
Procedure Zentriert(y.i, Text.s)
; Zentrierter Text in Zeile y ohne Zeilenumbruch
ConsoleLocate((80 - Len(Text)) / 2, y)
Print(Text)
EndProcedure
Procedure Cls(x.i, y.i, Breite.i, Hoehe.i)
; Loescht einen Konsolenausschnitt durch Überschreiben mit der
; Hintergrundfarbe.
; - x, y = Position linke obere Ecke
; - Breite, Hoehe = Abmessungen des Ausschnittes
Protected.i i
For i = y To y + Hoehe - 1
ConsoleLocate(x, i)
Print(Space(Breite))
Next
EndProcedure
Procedure Rahmen(x.i, y.i, Breite.i, Hoehe.i, Titel.s)
; Zeichnet einen Rahmen mit Titel.
; - x, y = Position linke obere Ecke
; - Breite, Hoehe = Abmessungen des Rahmens
; - Titel = Titel, zentriert (falls Titel <> "")
; Der Rahmen wird zum Loeschen des Hintergrundes mit aktuellen Hintergrundfarbe
; gefuellt. Erfolgt vorher eine entsprechende ConsoleColor-Anweisung, wird ein farbiges
; Fenster mit Rahmen gezeichnet.
Protected.i i
Protected.s elo, ero, elu, eru, hlin, vlin
elo = Chr(218)
ero = Chr(191)
elu = Chr(192)
eru = Chr(217)
hlin = Chr(196)
vlin = Chr(179)
; Hintergrund loeschen:
Cls(x, y, Breite, Hoehe)
; Rahmen zeichnen:
ConsoleLocate(x, y)
Print(elo)
For i = 1 To Breite - 2
Print(hlin)
Next
Print(ero)
For i = y + 1 To y + Hoehe - 2
ConsoleLocate(x, i)
Print(vlin)
ConsoleLocate(x + Breite - 1, i)
Print(vlin)
Next
ConsoleLocate(x, y + Hoehe - 1)
Print(elu)
For i = 1 To Breite - 2
Print(hlin)
Next
Print(eru)
; Titel einfuegen:
If Titel <> ""
;ConsoleLocate(x + (Breite - Len(Titel) - 2) / 2, y)
ConsoleLocate(x + 2, y)
Print(Space(1) + Titel + Space(1))
EndIf
EndProcedure
Procedure.s Edit(Text.s, Laenge.i)
; Editieren eines String mit Vorbelegung und Längenbegrenzung.
; - Text = vorbelegter String
; - Laenge = maximale Laenge (Eingabebalken hellgrau bzw. weiss)
Protected.s key, s = Text
Protected.i x, y, fgColor, bkColor
x = GetCursorX()
y = GetCursorY()
fgColor = GetFrontColor()
bkColor = GetBackColor()
; Farbe für den Eingabebalken, je nach Hintergrundfarbe:
If bkColor = 7
ConsoleColor(0, 15)
Else
ConsoleColor(0, 7)
EndIf
; Eingabe:
Repeat
ConsoleLocate(x, y)
Print(Space(Laenge))
ConsoleLocate(x, y)
Print(s)
Repeat
Delay(1)
key = Inkey()
Until key <> ""
Select Asc(key)
Case 32 To 255
; druckbare Zeichen
If Len(s) < Laenge
s = s + key
EndIf
Case 8
; Backspace
s = Left(s, Len(s) - 1)
EndSelect
Until Asc(key) = 13 ; Enter
; Zurück zur ursprünglichen Farbe:
ConsoleColor(fgColor, bkColor)
ConsoleLocate(x, y)
Print(Space(Laenge))
ConsoleLocate(x, y)
PrintN(s)
ProcedureReturn s
EndProcedure