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:

Komplette Hintergrundfarbe ändern
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 24.10.2004, 13:12    Titel: Antworten mit Zitat

Mit OUT lässt sich sowohl unter SCREEN 1 als auch SCREEN 7 die Hintergrundfarbe nicht ändern. Der Paletteneintrag 0 bleibt dort immer schwarz und lässt sich nicht setzen. Auch alle 255 anderen Einträge ändern die Hintergrundfarbe (experimentell festgestellt) nicht. Ansonsten ist das eine ganz gute Möglichkeit. Im Textmodus SCREEN 0 hat die Schriftfarbe übrigens den Eintrag Nr. 7 und nicht wie man vielleicht annehmen könnte 1.

Als grafische Lösung fallen mir zwei Möglichkeiten ein.

Zum einen könnte man ganz einfach alle Pixel im Bereich der Schrift mittels zweier FOR...NEXT-Schleifen mit POINT durchprüfen und diejenigen die Hintergrundfarbe haben, mit PSET durch welche in der gewüschten Farbe ersetzen. Ist einfach zu verstehen, aber natürlich auch sehr langsam.

Man könnte aber auch zu Beginn einen Bildschirmbereich der so gross ist wie ein Zeichen (also z.B. 8x16 Pixel) mit der neuen Farbe füllen und mit GET z.B. in hg% speichern. Dann den Text ausgeben und den vorher gespeicherten Hintergrund Zeichen für Zeichen darüberlegen. Ungefähr so:

Zitat:

SCREEN 12
DIM hg%(33)
hgfarbe = 1
LINE (0, 0)-(7, 15), hgfarbe, BF
GET (0, 0)-(7, 15), hg%
CLS
text$ = "Hallo Welt"
zeile = 8
spalte = 11
LOCATE zeile, spalte
PRINT text$
y = (zeile - 1) * 16
FOR zeichen = 1 TO LEN(text$)
x = (spalte + zeichen - 2) * 8
PUT (x, y), hg%, OR
NEXT


Bei 16 Farben und weisser Schrift kann man den Hintergund so direkt ersetzen, weil ja bei 15 schon alle vier Bit gesetzt sind und die OR-Verknüpfung daran nichts mehr ändert. Bei anderen Schriftfarben muss man etwas tricksen und evtl. auch das OR durch ein XOR oder so ersetzen.

Oder man verbindet beide Methoden. Man gibt einmal den gesamten Zeichensatz aus und ändert mit POINT/PSET den Hintergrund. Dann speichert man alle 8x8- bzw. 8x16-Felder mit GET in einem entsprechenden Array. Dann kann man anstelle von PRINT text$ die einzelnen Zeichen des Strings durch die vorher gespeicherten "Sprites" ersetzen und mit PUT ausgeben. Auf diese Art liessen sich auch andere Schriftarten importieren, die man zuvor z.B. als .bmp gespeichert hat.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 24.10.2004, 17:39    Titel: Antworten mit Zitat

Skilltronic hat Folgendes geschrieben:
Man könnte aber auch zu Beginn einen Bildschirmbereich der so gross ist wie ein Zeichen (also z.B. 8x16 Pixel) mit der neuen Farbe füllen und mit GET z.B. in hg% speichern. Dann den Text ausgeben und den vorher gespeicherten Hintergrund Zeichen für Zeichen darüberlegen.

Eigentlich exakt das macht meine Grafik-PRINT-Ersatzbibliothek.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
SN00py



Anmeldungsdatum: 24.10.2004
Beiträge: 4
Wohnort: Vinxel/Königswinter

BeitragVerfasst am: 25.10.2004, 09:40    Titel: Antworten mit Zitat

Zitat:
Vielleicht wäre an dieser Stelle auch INT 10h, AX=1010h (einzelne Farbe im DAC-Register setzen wie PALETTE) und INT 10h, AX=1012h (mehrere Farben in den DAC-Registern setzen wie PALETTE USING) mit CALL INTERRUPT aufs VGA-BIOS eine willkommene Alternative.


das wäre wohl die schnellste möglichkeit, die ich auch in meiner grafik unit für turbo benutze...

ansonsten kenn deine grafik lib ha die früher zu meinen qb zeiten selber verwendet...

mfg
_________________
Ein Lächeln kann die Welt verzaubern, bringt ins Dunkel Sonnenschein, erfreut das Herz, erfreut die Sinne und man ist nicht ganz allein -- von mir
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail 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 QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
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