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:

SCREEN Funktion

 
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
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 15.04.2006, 11:13    Titel: SCREEN Funktion Antworten mit Zitat

Ist das ein Bug oder ist das Normal?
Code:
locate 1,1
? chr$(219)

? screen(1,1)

sleep

In der Doku steht nichts brauchbares dazu:
Freebasic.net

Wieso gibt es einen Minus Wert aus?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Lee



Anmeldungsdatum: 15.04.2006
Beiträge: 5

BeitragVerfasst am: 15.04.2006, 12:30    Titel: Re: SCREEN Funktion Antworten mit Zitat

Code:

locate 1,1
? chr$(219)

? cUByte(screen(1,1))

sleep


So gehts

219-256=-37
Kappiert warum das ergebnis in deiner Variant rauskommt?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 15.04.2006, 12:46    Titel: Antworten mit Zitat

Die Entwickler haben Byte mit UByte verwechselt?

Das ist doch nur ein Work-A-Round und geht nicht auf meine Frage ein.
Auf so eine Idee bin ich auch gekommen ...

Nochmal:
Ist der Rückgabewert korrekt (=liegt der Fehler bei mir)?
Oder ist der Befehl fehlerhaft?

Ich geh ins Englische Forum und stelle dort die Frage zusätzlich, ich bin der Meinung das es ein Bug ist.
Meldung im Englischen Forum
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 15.04.2006, 13:43    Titel: Antworten mit Zitat

Mmmm..
Michael Frey hat Folgendes geschrieben:
Die Entwickler haben Byte mit UByte verwechselt?
Woher soll den ein 'Entwickler' wissen was du als Ergebnis möchtest (Byte oder UByte)?
Das solltest du vorher festlegen.
Code:
Dim i as Ubyte
locate 1,1
i=219
? chr$(i)
i=screen(1,1)
?i
sleep

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 15.04.2006, 14:04    Titel: Antworten mit Zitat

Code:
? chr$(219)
? asc(chr$(219))
? chr$(asc(chr$(219)))

sleep

Irgendwie gibt es mit dem erweiterten Zeichensatz allgemein Probleme ...

Also ich bin der Meinung, das es üblich sei die Erweitertet Zeichen mit
128 ... 255 darzustellen und nicht mit -1 ... -128.
(Beziehungsweise den entsprechenden Hex Werten)
Siehe z.B. Wikipedia:
http://en.wikipedia.org/wiki/Code_page_437
(Auf diese Seite wird man über die Befehlsreferenz verwissen)

oder auch
http://de.wikipedia.org/wiki/Ascii

Auch deine Lösung ist meiner Meinung nach nur ein Work a round, weil wenn ich IF Abfragen mache ist das recht unelegent:
Code:
locate 1,1
? chr$(219)

if CUBYTE(screen(1,1))=219 then
    locate 10,1
    ? "ja"
end if

sleep

Klar geht es, aber ich finde es logischer wenn es so wäre:
Code:
locate 1,1
? chr$(219)

if screen(1,1)=219 then
    locate 10,1
    ? "ja"
end if

sleep

Ich hab offengesagt respekt davor das ich jetzt Code schreibe, denn ich bei einem Compiler Update wegen eines Bugfixes ändern muss.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 15.04.2006, 20:00    Titel: Antworten mit Zitat

nochmal mmmm,
wenn du keine Variable dimensionierst nimmt FB immer an du willst in Integer (32bit, vorzeichenbehaftet) arbeiten.
Code:
locate 1,1
? chr$(219)
? hex$(screen(1,1))
sleep

Erst wenn du deinen Willen erklärst in einem anderen Zahlenbereich zu arbeiten wird umgewandelt, und dann wird auch nach einem 'Bugfix' weiter richtig verglichen.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Lee



Anmeldungsdatum: 15.04.2006
Beiträge: 5

BeitragVerfasst am: 15.04.2006, 21:06    Titel: Antworten mit Zitat

Die erweiterten Zeichen werden bei C++ mit Minus zahlen angeben. Da dort der Typ für Zeichen char ist. Welcher einen Wertebereich von -128 bis 127 hat.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 16.04.2006, 08:27    Titel: Antworten mit Zitat

@volta
Wenn ich deiner Logik jetzt folge, müsste die Ausgabe (bei ? screen(1,1)) eben 219 sein, also 0000 0000 0000 0000 0000 0000 1101 1011 b.

Wenn die -37 Korrekt wären, dann ist aber die Doku falsch:
Doku

Zitat:
Differences from QB:

* None

Weil QBasic gibt 219 aus.

@Lee
Mit der Antwort könnte ich leben, dann muss aber in der Dokumentation der entsprechende Eintrag gemacht werden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 16.04.2006, 12:39    Titel: Antworten mit Zitat

Michael Frey hat Folgendes geschrieben:
@volta
Wenn ich deiner Logik jetzt folge, müsste die Ausgabe (bei ? screen(1,1)) eben 219 sein, also 0000 0000 0000 0000 0000 0000 1101 1011 b.
Nein, das ist bestimmt nicht meine Logik (und überhaupt nicht logisch?)!
1101 1011b ist als Byte ein negative Zahl, siehe MSB = 1.
Die wird von FB logischerweise auch als negativer Integerwert übernommen also 1111 1111 1111 1111 1111 1111 1101 1011 b.

Zitat:
Differences from QB:

* None

Wenn das so in der Doku steht, ist die Doku falsch.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 16.04.2006, 13:38    Titel: Antworten mit Zitat

und die Moral von der Gesichte?
Ich warte auf die Antwort im Englischen Forum, wenn's so ist muss die Doku angepasst werden.
In der Zwischenzeit mach ich einfach CUByte(screen(1,1)) .

Was mir einfach nicht in den dick Schadel passt ist das:
Code:
? chr$(219)
input a$
? asc(a$)
sleep

Wenn man hier die Box kopiert und wieder einfügt wird 219 ausgeben.
Irgendwie inkonsequent ...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 16.04.2006, 13:57    Titel: Antworten mit Zitat

Michael Frey hat Folgendes geschrieben:

In der Zwischenzeit mach ich einfach CUByte(screen(1,1)) .


Da würd ich einfach ganz am Anfang deines Programms folgendes schreiben:
Code:

#define screen_(x,y) CUByte(Screen(x,y))

'jetzt kannst du ganz einfach alles wie normal benutzen:

Locate 1,1
Print Chr(219)
Print Screen_(1,1)


So sollte 219 ausgegeben werden.

Michael
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 16.04.2006, 14:23    Titel: Antworten mit Zitat

Michael Frey hat Folgendes geschrieben:
Was mir einfach nicht in den dick Schadel passt ist das:
Code:
? chr$(219)
input a$
? asc(a$)
sleep

Wenn man hier die Box kopiert und wieder einfügt wird 219 ausgeben.
Irgendwie inkonsequent ...
wieder nicht...
Ein ASCII - Zeichen ist als UByte (Wertebereich 0 - 255) definiert, das benutzt du doch bei chr$(219).
Bei screen(1,1) machst du einen Speicherzugriff auf den Videospeicher, das Ergebnis ist ein Binärwert (1101 1011 b) den du dann ohne Zuweisung an eine Variable als Integer (vorzeichenbehaftet) bekommst.
So verstanden?
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 17.04.2006, 12:24    Titel: Antworten mit Zitat

Zur Infomation:
Sourceforge Bug Report
v1ctor hat Folgendes geschrieben:
Fixed, the changes are in the CVS repository, the runtime library must be recompiled.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
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