|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
arduno
Anmeldungsdatum: 12.05.2011 Beiträge: 252
|
Verfasst am: 22.01.2016, 19:35 Titel: Consolefenster löschen...wie geht das? |
|
|
Hallo, guten Tag.
Ich habe hier ein Consolenfenster und ein Screen.
Mit welchen Befehl kann ich jetzt bitte das Consolenfenster löschen ?
Danke.
Gruss
Code: |
#include once "fbgfx.bi"
#include once "vbcompat.bi"
Using FB
Declare Sub zeichnen(bild as Any Ptr, farbe as Integer, x as Integer, y as Integer)
Dim DateiNr As Integer
Dim AS Any Ptr meinBild
DateiNr = FreeFile
OPEN CONS FOR OUTPUT AS #DateiNr
screenres (300,300,32)
ScreenControl SET_WINDOW_POS, 600, 10
meinBild = ImageCreate (100, 100)
PRINT #DateiNr, "hallo, console und grafik funktioniert..."
zeichnen( meinBild, &hFFFF00, 100, 100)
Put (20, 50), meinBild
CLOSE #DateiNr
Sleep
End
Sub zeichnen(bild as Any Ptr, farbe as Integer, x as Integer, y as Integer)
Circle bild, (x/2, y/2), 25, farbe
End Sub
|
|
|
Nach oben |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 23.01.2016, 21:29 Titel: |
|
|
Hallo,
als einfachen, plattformübergreifenden Workaround hätte ich da diese Lösung anzubieten: Code: | #include once "fbgfx.bi"
#include once "vbcompat.bi"
Using FB
Declare Sub zeichnen(bild as Any Ptr, farbe as Integer, x as Integer, y as Integer)
Dim DateiNr As Integer
Dim AS Any Ptr meinBild
DateiNr = FreeFile
OPEN CONS FOR OUTPUT AS #DateiNr
screenres (300,300,32)
ScreenControl SET_WINDOW_POS, 600, 10
meinBild = ImageCreate (100, 100)
PRINT #DateiNr, "hallo, console und grafik funktioniert..."
zeichnen( meinBild, &hFFFF00, 100, 100)
Put (20, 50), meinBild
'*********************************
Sleep 3000
For x As Integer = 0 To 25
Print #DateiNr, String(80," ")
Next
'*********************************
CLOSE #DateiNr
Sleep
End
Sub zeichnen(bild as Any Ptr, farbe as Integer, x as Integer, y as Integer)
Circle bild, (x/2, y/2), 25, farbe
End Sub |
Unter Windows kannst du auch direkt auf den Konsolenpuffer zugreifen. Ich habe sowas mal programmiert, aber ich weiß nicht mehr genau, wo. Ich werde mal sehen, ob ich es finde...
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 23.01.2016, 22:55 Titel: |
|
|
Wer sagt's denn? In einem ordentlichen Haushalt findet sich alles wieder...
Code: |
#include once "fbgfx.bi"
#include once "vbcompat.bi"
#include once "windows.bi" '<<<<<<<<<<<<<<<<<<<
Using FB
Declare Sub zeichnen(bild as Any Ptr, farbe as Integer, x as Integer, y as Integer)
Declare Sub ccls()
Declare Sub clocate(clin As UShort, ccol As UShort)
Declare Sub cprint(text As String)
Dim DateiNr As Integer
Dim AS Any Ptr meinBild
DateiNr = FreeFile
OPEN CONS FOR OUTPUT AS #DateiNr
screenres (300,300,32)
ScreenControl SET_WINDOW_POS, 600, 10
meinBild = ImageCreate (100, 100)
PRINT #DateiNr, "hallo, console und grafik funktioniert..."
zeichnen( meinBild, &hFFFF00, 100, 100)
Put (20, 50), meinBild
CLOSE #DateiNr
'*********************************
Sleep 2000
ccls
Sleep 1000
clocate(10,10)
cprint("geloescht :-)")
Sleep 2000
ccls
'*********************************
Sleep
Sub zeichnen(bild as Any Ptr, farbe as Integer, x as Integer, y as Integer)
Circle bild, (x/2, y/2), 25, farbe
End Sub
Sub clocate(clin As UShort, ccol As UShort)
Dim As HANDLE cha
Dim As COORD cursorpos
cha = CreateFile("CONOUT$",GENERIC_WRITE,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0)
cursorpos.x = ccol - 1
cursorpos.y = clin - 1
SetConsoleCursorPosition(cha,cursorpos)
CloseHandle(cha)
End Sub
Sub cprint(text As String)
Dim As HANDLE cha
Dim As Integer noc
cha = CreateFile("CONOUT$",GENERIC_WRITE,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0)
WriteConsole(cha,StrPtr(text),Len(text),@noc,0)
CloseHandle(cha)
End Sub
Sub ccls()
For x As Integer = 1 To 25
clocate(x,1)
cprint(String(80," "))
Next
clocate(1,1)
End Sub |
Viel Spaß damit!
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
arduno
Anmeldungsdatum: 12.05.2011 Beiträge: 252
|
Verfasst am: 24.01.2016, 20:46 Titel: |
|
|
Hallo, danke für die Hilfe.
Ich wusste nicht, das man so tief rein greifen muss, was ich als Lai nicht beherrsche. Hmmm..., kann man den Text auch Farbig darstellen ? Wenn ja, bitte wie ?
Gruss |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 25.01.2016, 01:30 Titel: |
|
|
Zitat: | kann man den Text auch Farbig darstellen ? Wenn ja, bitte wie ? | Du hast Wünsche...!
Ja, kann man, das ist dann aber noch "tiefer". Ich hab mal ein paar Kommentare dazugeschrieben: Code: |
#include once "fbgfx.bi"
#include once "vbcompat.bi"
#include once "windows.bi"
Using FB
Enum 'alle konsolenfarben
schwarz = 0
blau
gruen
cyan
rot
magenta
braun
hellgrau
grau
hellblau
hellgruen
hellcyan
hellrot
pink
gelb
weiss
End Enum
Declare Sub zeichnen(bild as Any Ptr, farbe as Integer, x as Integer, y as Integer)
Declare Sub ccls(farbe As UByte = schwarz)
Declare Sub cprint(text As String = "", zeile As UShort = 1, spalte As UShort = 1, _
zeichenfarbe As UByte = hellgrau, hintergrund As UByte = schwarz)
Dim DateiNr As Integer
Dim AS Any Ptr meinBild
DateiNr = FreeFile
OPEN CONS FOR OUTPUT AS #DateiNr
screenres (300,300,32)
ScreenControl SET_WINDOW_POS, 600, 10
meinBild = ImageCreate (100, 100)
PRINT #DateiNr, "hallo, console und grafik funktioniert..."
zeichnen( meinBild, &hFFFF00, 100, 100)
Put (20, 50), meinBild
CLOSE #DateiNr
'*********************************
Sleep 1000
ccls
Sleep 1000
ccls(hellgruen)
Sleep 1000
cprint("geloescht :-)",5,10,hellrot,hellblau)
Sleep 2000
ccls
'*********************************
Sleep
Sub zeichnen(bild as Any Ptr, farbe as Integer, x as Integer, y as Integer)
Circle bild, (x/2, y/2), 25, farbe
End Sub
Sub cprint(text As String = "", zeile As UShort = 1, spalte As UShort = 1, _
zeichenfarbe As UByte = hellgrau, hintergrund As UByte = schwarz)
Dim As HANDLE cha
Dim As COORD BufferSize, BufferCoord
Dim As SMALL_RECT WriteRegion
Dim As CHAR_INFO quellpuffer(Len(text),0) '2 - dimensionales array
'handle zum konsolenpuffer erstellen
cha = CreateFile("CONOUT$",GENERIC_WRITE,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0)
'text und farbattribute in quellpuffer schreiben
For x As Integer = 0 To Len(text) - 1
With quellpuffer(x,0)
.char.asciichar = text[x] 'ASCII - zeichen (geht wahlweise auch mit unicode)
.Attributes = zeichenfarbe + (hintergrund Shl 4) 'farbattribute
End With
Next
BufferSize.x = Len(text) 'anzahl der zeichen (textlänge)
BufferSize.y = 1 'anzahl der zeilen
BufferCoord.x = 0 'beginn des quellpuffers oben links
BufferCoord.y = 0 '
WriteRegion.Left = spalte - 1 'beginn des bildschirmpuffers links (locate -> spalte)
WriteRegion.Top = zeile - 1 'beginn des bildschirmpuffers oben (locate -> zeile)
WriteRegion.Right = WriteRegion.Left + Len(text) 'ende des bildschirmpuffers rechts
WriteRegion.Bottom = WriteRegion.Top 'ende des bildschirmpuffers unten
'quellpuffer in bildschirmpuffer übertragen
WriteConsoleOutput(cha,@quellpuffer(0,0),BufferSize,BufferCoord,@WriteRegion)
CloseHandle(cha) 'handle freigeben
End Sub
Sub ccls(farbe As UByte = schwarz)
For x As Integer = 1 To 25
cprint(String(80," "),x,1,schwarz,farbe)
Next
End Sub |
Beachte bitte, daß es bei dieser Zugriffsmethode weder einen Zeilenumbruch noch einen Zeilenvorschub gibt. Was über den sichtbaren Fensterbereich hinausgeht, wird abgeschnitten.
Auf ähnliche Weise kannst du übrigens auch Text (und Farben) vom Konsolenfenster lesen.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
arduno
Anmeldungsdatum: 12.05.2011 Beiträge: 252
|
Verfasst am: 25.01.2016, 15:49 Titel: |
|
|
Hallo, vielen dank für die Consolenhilfe.
Da kann man ja doch einiges mit anstellen und die Console sehenswert gestalten.
Danke.
Gruss |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|