Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Consolefenster löschen...wie geht das?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 22.01.2016, 18:35    Titel: Consolefenster löschen...wie geht das? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 23.01.2016, 13:33    Titel: Antworten mit Zitat

In Windows z.B. so wie auf folgender Seite beschrieben:
https://support.microsoft.com/en-us/kb/99261
Das Handle kannst du übrigens mit GetConsoleWindow() bekommen.
Funktioniert natürlich nur auf Windows.

Eine schöne plattformübergreifende Lösung fällt mir gerade keine ein.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 23.01.2016, 20:29    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 23.01.2016, 21:55    Titel: Antworten mit Zitat

Wer sagt's denn? In einem ordentlichen Haushalt findet sich alles wieder... grinsen

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! lächeln

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 24.01.2016, 19:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 25.01.2016, 00:30    Titel: Antworten mit Zitat

Zitat:
kann man den Text auch Farbig darstellen ? Wenn ja, bitte wie ?
Du hast Wünsche...! lächeln

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 25.01.2016, 14:49    Titel: Antworten mit Zitat

Hallo, vielen dank für die Consolenhilfe.

Da kann man ja doch einiges mit anstellen und die Console sehenswert gestalten.

Danke.
Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz