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:

Ausgabe auf Console, trotz grafik (gelöst)

 
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
Wh1sper



Anmeldungsdatum: 25.02.2016
Beiträge: 10

BeitragVerfasst am: 27.02.2016, 18:56    Titel: Ausgabe auf Console, trotz grafik (gelöst) Antworten mit Zitat

Hi,
ich versuche mich in freebasic einzuarbeiten.
Ein einfaches Grafik Programm mit der Standard Grafik möchte ich beim Laufen "zusehen"
Ich möchte mir Variablen auf die Konsole ausgeben und nicht auf die Grafik um die nicht zu zerstören.
Das sollte dorch irgendwie gehen....
Mit Print gehts nicht so direkt.
Oder fehlt mir ein Parameter, den ich in der Referenz nicht gefunden habe?
mit dem Kopf durch die Mauer wollen
Ps: Typischer Neuling, kaum angemeldet gleich ne blöde Frage


Zuletzt bearbeitet von Wh1sper am 01.03.2016, 15:53, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 27.02.2016, 19:00    Titel: Antworten mit Zitat

OPEN CONS
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Wh1sper



Anmeldungsdatum: 25.02.2016
Beiträge: 10

BeitragVerfasst am: 27.02.2016, 19:22    Titel: Antworten mit Zitat

Uih, das ging schnell, danke.
Musste etwas basteln, weil das wohl nicht ganz so toll unter Linux geht, klappt aber.
cool
Zur Info, ich habe hier Debian Jessi,
Code:
FreeBASIC Compiler - Version 1.01.0 (12-28-2014), built for linux-x86_64 (64bit)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 27.02.2016, 20:16    Titel: Antworten mit Zitat

Funktioniert hervorragend auch unter Linux; allerdings wird da die Konsole nicht automatisch geöffnet (was mir auch lieber ist). Also: Programm aus der Konsole heraus starten oder im Dateibrowser einstellen, dass es in der Konsole gestartet werden soll. Falls du als IDE Geany verwendest - da starten die Programme standardmäßig in einer extra Konsole.

Übrigens ist inzwischen FreeBASIC 1.05 draußen; aber das für sollte OPEN CONS nicht relevant sein.
https://sourceforge.net/projects/fbc/files/
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wh1sper



Anmeldungsdatum: 25.02.2016
Beiträge: 10

BeitragVerfasst am: 28.02.2016, 09:09    Titel: Antworten mit Zitat

Ok, war keine Linux Meckerung, das wäre ja noch schoner.
Ich nahm an, das sowas hier geht:
Code:
     Dbg = FREEFILE
     OPEN CONS FOR OUTPUT AS #Dbg
     print #Dbg, "Spalte, Zeile    ";spalte;zeile;felddata(spalte, zeile)

' Hie sind ein paar schleifen, die aus einem FILE lesen mit anderem Pointer FREEFILE
' und es soll noch was  auf die Console ausgegeben werden
 
    print #Dbg, " Irgendwas  ";felddata(spalte, zeile)
   CLOSE #Dbg

Das ging nicht.
Vermutlich, weil ich das nicht schachteln kann.
Oder es liegt daran, dass man auf die Console über einen Buffer schreibe?
Bei C würde ich flush(#Dbg) benutzen

I
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 28.02.2016, 19:31    Titel: Antworten mit Zitat

Wh1sper hat Folgendes geschrieben:
Ok, war keine Linux Meckerung, das wäre ja noch schoner.

Habe ich auch nicht so verstanden. happy

Code:
screenres 800, 600, 32
print "GRAFIK"
dim as integer Dbg = FREEFILE
open cons for output as #Dbg
print #Dbg, "KONSOLE"
print "noch mehr GRAFIK"
close #Dbg
sleep

funktioniert soweit. Jetzt wäre die Frage, was der auskommentierte Teil macht. Zwei Datenströme mit OPEN CONS gleichzeitig geöffnet zu halten, macht bei mir auch keine Probleme, wenn du allerdings einen schließt, ist der andere auch zu.

Code:
screenres 800, 600, 32
dim as integer Dbg1 = FREEFILE
open cons for output as #Dbg1
print #Dbg1, "KONSOLE 1 (1)"
Dbg1 = FREEFILE
dim as integer Dbg2 = FREEFILE
open cons for output as #Dbg2
print #Dbg2, "KONSOLE 2 (1)"
print #Dbg1, "KONSOLE 1 (2)"
close #Dbg1
print #Dbg2, "KONSOLE 2 (2)"
close #Dbg2
sleep


Ich verwende da einen festen "Konsolenkanal" für alle Programmteile, den man bei Bedarf ja an die Prozeduren übergeben kann.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elor



Anmeldungsdatum: 12.07.2013
Beiträge: 205
Wohnort: Konstanz

BeitragVerfasst am: 29.02.2016, 11:34    Titel: Antworten mit Zitat

Zitat:
...Zwei Datenströme mit OPEN CONS gleichzeitig geöffnet zu halten, macht bei mir auch keine Probleme, wenn du allerdings einen schließt, ist der andere auch zu.

Es werden deshalb beide Kanäle geschlossen weil Du versehentlich den ersten Dateikanal überschreibst.
Code:

screenres 800, 600, 32
dim as integer Dbg1 = FREEFILE ' erstes Dateihandle
open cons for output as #Dbg1
print #Dbg1, "KONSOLE 1 (1)"
Dbg1 = FREEFILE                ' hier wird das erste handle überschrieben ohne das es geschlossen wurde!
dim as integer Dbg2 = FREEFILE ' jetzt besitzen beide Datei-Variablen die selbe Nummer!
open cons for output as #Dbg2
print #Dbg2, "KONSOLE 2 (1)"
print #Dbg1, "KONSOLE 1 (2)"
close #Dbg1
print #Dbg2, "KONSOLE 2 (2)"
close #Dbg2
sleep   
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 29.02.2016, 15:19    Titel: Antworten mit Zitat

Oh ja, ist richtig, da hat sich ein Fehler eingeschlichen. Muss ich nochmal testen, ob es dann ohne der fehlerhaften FREEFILE-Anweisung funktioniert. Ich weiß noch von früher, dass es (speziell unter Linux) Probleme beim Schließen gab, und es ist so noch in der Referenz vermerkt; kann aber sein, dass das zwischenzeitlich behoben ist.

Das kommt davon, wenn man unter Zeitdruck ein Programm schreiben soll. grinsen
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elor



Anmeldungsdatum: 12.07.2013
Beiträge: 205
Wohnort: Konstanz

BeitragVerfasst am: 29.02.2016, 16:33    Titel: Antworten mit Zitat

Das Funktioniert wunderbar! Aber... was mich im Moment ärgert ist, dass ich mit
Code:

Shell "/bin/sh" 'z.B.

zwar eine Konsole öffnen kann, hab aber (bin ja noch nicht so alt mit Linux) keine Ahnung wie ich die mit meinem Programm verbinden soll. Vielleicht weiß hier jemand wie das geht?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wh1sper



Anmeldungsdatum: 25.02.2016
Beiträge: 10

BeitragVerfasst am: 29.02.2016, 18:57    Titel: Antworten mit Zitat

Wollte mich nur mal melden.
Das Problem ist nicht mehr akut, ich habe mir ein kleines sub geschrieben, was zum Debuggen völlig ausreicht.


Code:
/'
'  declare sub CONSDBG (txt AS STRING) ' Zum debuggen auf Console

   CONSDBG:
   Zweck: Printausgabe auf die Console
   Aufruf: CONSDBG txt 
   Beispiel:
   CONSDBG "Ausgang: ausgx=" & ausgx
       ' Merken: & ist der String Concatenator
'/
sub CONSDBG (txt AS STRING)
DIM Dbg AS INTEGER
Dbg = FREEFILE
OPEN CONS FOR OUTPUT AS #Dbg
print #Dbg, "DBG:" & txt
CLOSE #Dbg
end sub
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 29.02.2016, 23:06    Titel: Antworten mit Zitat

Elor hat Folgendes geschrieben:
Das Funktioniert wunderbar! Aber... was mich im Moment ärgert ist, dass ich mit
Code:

Shell "/bin/sh" 'z.B.

zwar eine Konsole öffnen kann, hab aber (bin ja noch nicht so alt mit Linux) keine Ahnung wie ich die mit meinem Programm verbinden soll. Vielleicht weiß hier jemand wie das geht?

Da wirst du wohl eher mit OPEN PIPE arbeiten müssen. OPEN CONS öffnet nur zum bereits bekannten stdin bzw. stdout.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elor



Anmeldungsdatum: 12.07.2013
Beiträge: 205
Wohnort: Konstanz

BeitragVerfasst am: 01.03.2016, 11:56    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:

Da wirst du wohl eher mit OPEN PIPE arbeiten müssen. OPEN CONS öffnet nur zum bereits bekannten stdin bzw. stdout.

Für die Pipe's braucht man aber auch erst wieder eine Konsole, die ja nicht Automatisch geöffnet wird.
Ich hab Gestern nach einem Argument gesucht, das der Konsole sagt, gib die Kontrolle wieder an das aufrufende Programm zurück, ohne dich zu schließen.
Beispiel: Gibt zufällig farbige Punkte auf dem Bildschirm aus.
Code:

/' ProgName: rndPoint.bas '/
#include "fbgfx.bi"

Dim hCon As Integer

  hCon= FreeFile ()
  Open Cons For OutPut As hCon
  Print #hCon, "Zufallsgenerator initialisieren"
  Randomize (Timer)
  Print #hCon, "Grafik einschalten"
  ScreenRes (800, 600, 8)
  Print #hCon, "Zufällig Punkte mit zufälliger Farbe ausgeben, bis eine Taste gedrückt wird..."
  Do
    PSet ((Rnd* 799), (Rnd* 599)), (Rnd* 255)
    Sleep (1)
  Loop Until (InKey <> "")
  Print #hCon, "Das Programm wird beendet!"
  Close (hCon)

Wenn ich das aus dem File Browser starte, dann wird natürlich nur das Grafikfenster geöffnet. Entweder startet man das Programm aus der Konsole heraus, oder man stellt im Browser ein, dass dieses Programm mit der Konsole gestartet wird.
Es gibt ja noch die Möglichkeit das Programm mit Befehl "SHELL" zu starten.
Beispiel:
Code:

/' ProgName: rndStart.bas '/
  Shell "x-terminal-emulator -e ./rndPoint"

Meine Vorstellung war jetzt, dass ich diese Zeile in "rndPoint.bas" einfüge und den Dateinamen durch ein Argument ersetzte wie oben beschrieben (so ähnlich wie unter Windows die "cmd-start-argumente". Aber leider ist Linux doch nicht ganz so einfach gestrickt, schade!
Ach ja, das mit "x-terminal..." bezieht sich auf Linux Mint 17.1.
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