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:

groessere Schrift

 
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
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 23.10.2016, 16:21    Titel: groessere Schrift Antworten mit Zitat

Kann mir jemand sagen, wie ich in mein Programm 'S A T Z B A U' (kleine Helferlein) eine groessere Schrift einbauen kann (freeimage, freetype)?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 23.10.2016, 17:13    Titel: Antworten mit Zitat

Mit Freetype kannst du die Schriftgröße frei wählen. Ich habe in meinem Projekt Lengua eine Datei font.bi beiliegen, vielleicht hilft dir die. Da stecken ein paar Funktionen zur Ausgabe auf den Bildschirm, in einen Bildschirmpuffer und zentrierte Ausgabe drin - vorher muss natürlich ein Font korrekt geladen werden (passiert in der Hauptdatei lengua.bas). Und die Texte müssen in UTF-8 übergeben werden (oder natürlich ASCII).
_________________
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
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 23.10.2016, 18:26    Titel: fehlende Datei Antworten mit Zitat

Lieber Nemored, vielen Dank fuer die schnelle Antwort. Beim Versuch, Lengua.bas zu compilieren, erhalte ich die Meldung: fbthread.bi fehlt. Die Datei befindet sich auch nicht auf meiner Festplatte.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 23.10.2016, 19:11    Titel: Antworten mit Zitat

Hast du die neuste Version von FreeBASIC? (>= 1.01, für alles andere übernehme ich keine Garantie; besser natürlich 1.05)

font.bi braucht allerdings die fbthread.bi nicht; du kannst im Prinzip auch in der include/spanish/basic.bi das entsprechende #include herausnehmen und den Inhalt der Funktion speakThread() auskommentieren. Sprachausgabe funktioniert sowieso nur bei installiertem espeak.
_________________
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
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 24.10.2016, 09:47    Titel: -lfreetype? Antworten mit Zitat

Unter FB 1.05 fehlt mir gem. compiler jetzt -lfreetype. Gruss HD
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 24.10.2016, 13:13    Titel: Antworten mit Zitat

Dazu bitte ich die Hinweise auf der Projektseite zu beachten.
https://www.freebasic-portal.de/projekte/lengua-102.html hat Folgendes geschrieben:
Zur Ausgabe des Zeichensatzes wird die Bibliothek Freetype verwendet. Die zur Ausführung des Programms benötigten dll-Dateien (Windows 32bit) liegen dem Download-Paket bei. Um das Programm selbst zu compilieren, wird die Bibliothek libfreetype.a benötigt, die im lib-Ordner der FreeBASIC-Installation liegen muss.
An dieser Stelle ein herzliches Dankeschön an St_W für die Bereitstellung der compilierten Windows-Bibliothek!

libfreetype.a ist auf der Projektseite verlinkt.
_________________
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
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 24.10.2016, 15:41    Titel: Danke nemored Antworten mit Zitat

Das programm lengua laeuft. Gegen meines ist es sehr kompliziert. ausser fuer fehlermeldungen habe ich keine einfachen print-anweisungen gefunden.
Im Laufschrift-programm von Volta wird die Schrift mit put ausgegeben. Aber einfache put-anweisungen habe ich in lengua auch nicht gefunden.
Offenbar ist es sehr schwierig, in FreeBasic mit groesserer schrift zu arbeiten. wenn ich Voltas programm zugrunde lege, kann ich wohl eine deutlich groessere Schrift erreichen. Ich hoffe, dass ich dabei keine urheberrechte verletze. Aber es ist auch so schon recht umstaendlich, auf diese art eine groessere schriftausgabe zu erreichen. Ich dachte, dass ich mit freeimage, freetype einfach einen font fuer die normale print-ausgabe auswaehlen kann.
Gruss HD
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 24.10.2016, 16:06    Titel: Antworten mit Zitat

Nein, es muss nicht kompliziert sein.

nemored's "font.bi" enthält gerade einmal 10 Methoden die eigentlich alle einen recht aussagekräftigen Namen haben. Du wirst vermutlich zuerst einmal eine Schriftart mit "getFont" laden und dann mit "printFT" Text ausgeben.

Alternativ zu nemored's Lösung: Im englischen Forum wurde kürzlich ein Projekt vorgestellt, das ebenso deine Wünsche erfüllen sollte:
http://www.freebasic.net/forum/viewtopic.php?f=14&t=25083
Es verwendet allerdings nicht FreeType sondern stb_truetype und unterstützt deswegen auch manche Features nicht die eben von dieser Bibliothek nicht unterstützt werden (die aber für übliche Anwendungszwecke i.A. vernachlässigbar sind).
_________________
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: 24.10.2016, 16:40    Titel: Antworten mit Zitat

Wenn deine Ansprüche nicht allzu hoch sind, hilft dir vielleicht diese kleine Function weiter.

Code:
Function zoom(text As String) As Any Ptr
   Dim As Any Ptr img, imgz
   Dim As Integer w, h
   Dim As ULong pnt
   
   img = ImageCreate(Len(text) * 8, 8, RGB(255, 0, 255), 32)
   ImageInfo img, w, h
   imgz = ImageCreate(w * 2, h * 2, RGB(255, 0, 255), 32)
   Draw String img, (0,0), text, RGB(255, 255, 255)
   For x As Integer = 0 To w - 1
      For y As Integer = 0 To h - 1
         pnt = Point(x, y, img)
         PSet imgz, (x * 2, y * 2), pnt
         PSet imgz, (x * 2 + 1, y * 2), pnt
         PSet imgz, (x * 2, y * 2 + 1), pnt
         PSet imgz, (x * 2 + 1, y * 2 + 1), pnt
      Next
   Next
   ImageDestroy img
   Return imgz
   
End Function

ScreenRes 300,300,32
Dim As Any Ptr tp = zoom("abcABC")
Put (100, 100), tp, Trans
Sleep


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
nemored



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

BeitragVerfasst am: 24.10.2016, 17:28    Titel: Antworten mit Zitat

Minimales Beispiel mit font.bi - du brauchst
  • font.bi (natürlich)
  • libfreetype.a
  • freetype.dll (im Programmordner)
  • eine ttf-Fontdatei mit Namen font.ttf (im Programmordner)

(und ich hoffe mal, dass ich nichts wichtiges vergessen habe happy)

Code:
#include once "fbgfx.bi"
#include once "utf_conv.bi"
#include once "include/font.bi"

screenres 800, 600, 32
dim shared font as FT_Face

' Font initialisieren
FT_Var.ErrorMsg = FT_Init_FreeType(@FT_Var.Library)
if FT_Var.ErrorMsg then print "Could not load library"
font = getFont("font.ttf")

' Textausgabe
printFT  10,  10, "oben links, klein in gelb", font, 10, rgb(255, 255, 0)
centerFT 400, 300, "zentriert und in rot"    , font, 50, rgb(255,   0, 0)
sleep

end

_________________
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
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 25.10.2016, 07:17    Titel: Danke fuer die konkreten Hilfen! Antworten mit Zitat

Danke fuer die konkreten Hilfen!
Brauche nun etwas Zeit, um sie zu verarbeiten.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 25.10.2016, 16:10    Titel: Das mit den schriftgroessen klappt hervorragend. Antworten mit Zitat

Das mit den schriftgroessen klappt hervorragend, nur mit der schriftfarbe habe ich noch probleme. der jeweilige printFt-befehl sieht so aus:
printFT 300,150,"xy",font,30,&hFFFFFF.
sicher ist es moeglich, die schriftfarbe im voraus festzulegen um sie dann nicht bei jedem neuen printFt-befehl wiederholen zu muessen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 25.10.2016, 18:26    Titel: Antworten mit Zitat

In der font.bi ist in den Funktionen eine Schriftfarbe voreingestellt; da ich die Bibliothek auf einem weißen Hintergrund verwende, ist die voreingestellte Schriftfarbe schwarz (0). Du kannst das selbstverständlich durch eine beliebige andere Farbe ersetzen. Dasselbe gilt für die voreingestellte Schriftgröße.

Wenn du willst, dass sich die jeweilige Funktion die letzte verwendete Schriftfarbe merkt, könntest du z. B. mit STATIC arbeiten. Das wäre ein bisschen Bastelarbeit.
_________________
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
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 26.10.2016, 15:27    Titel: na prima! Antworten mit Zitat

jetzt muss ich wohl noch den input-befehl fuer die grossbuchstaben umschreiben. Ich versuche es gerade.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HD



Anmeldungsdatum: 14.11.2015
Beiträge: 35
Wohnort: Polen

BeitragVerfasst am: 29.10.2016, 08:48    Titel: Hier ist mein erster Entwurf: Was haltet ihr davon? Antworten mit Zitat

Code:
'Beispiel-Text zum Verwuerfeln:
'Er muss als Textfile vorliegen, wenn kein anderer Text vorhanden ist.
'Es war abends und dunkel.
'Ich musste in die Kueche.
'Da sah ich vor mir einen Geist.
'Der Geist flog durch die Luft.
#lang "fblite"
#include "dir.bi"
Dim shared As Any Ptr s
DIM shared AS INTEGER an,Breite,hoehe,wo,z1,z2
dim shared as string aas,aKo,eingabe,er,fi,n,w,za
dim shared as string auf(400),fbD(3),ink(30)
DECLARE Sub list_files (ByRef filespec As String, ByVal attrib As Integer)
DECLARE Function zoom(text As String) As Any Ptr
fbD(1)="richtig"
fbD(2)="gut"
fbD(3)="ja"
screeninfo Breite,hoehe
SCREENRES breite,hoehe,32
color,RGB(139,90,43)'hintergrund Schokolade "tan4"
CLS
s=zoom("Programm  S A T Z B A U . 0 2")
put (20,50),s,TRANS
s=zoom("Copyright (C): HD")
put (20,100),s,TRANS
s=zoom("Vorsicht! Die Anzahl der Woerter wird an Hand")
put (20,150),s,TRANS
s=zoom("der Luecken zwischen den Woertern festgestellt.")
put (20,190),s,TRANS
s=zoom("Deshalb zaehlen Leerstellen wie Woerter.")
put (20,230),s,TRANS
s=zoom("Trennungszeichen am Zeilenende werden nicht")
put (20,270),s,TRANS
s=zoom("beruecksichtigt. Bitte entfernen Sie sie")
put (20,310),s,TRANS
s=zoom("ebenso wie unsichtbare Leerstellen")
put (20,350),s,TRANS
s=zoom("am Zeilenende vor Erstellung des verwuerfelten")
put (20,390),s,TRANS
s=zoom("Textes!")
put (20,430),s,TRANS
s=zoom("Weiter -> Taste enter")
put (20,490),s,TRANS
s=zoom("Ende   -> Taste E + Taste enter")
put (20,530),s,TRANS
line INPUT aas
if aas="e" or INKEY="E" then end
startSB:
Width breite\8,hoehe\8
cls:CLOSE 1:CLOSE 2
wo=0
s=zoom("Text verwuerfeln    -     -> Taste V")
put (50,100),s,TRANS
s=zoom("Verwuerfelten Text ordnen -> Taste O")
put (50,140),s,TRANS
s=zoom("Ende -> Taste E ")
put (383,180),s,TRANS
w= INPUT(1):w= UCASE(w)
IF w="E" THEN END ELSE cls
IF w<>"V" THEN GOTO ordnen
?:?:list_files "*.txt", fbArchive
?:?" Welcher Text soll verwuerfelt werden ";:INPUT aas
IF aas="E" OR aas="e" THEN END
OPEN aas FOR INPUT AS #1:BEEP
?:?" Unter welchem Namen soll der Einsetztext gespeichert werden,"
?:?" - max. 8 Buchstaben?"
?:?" Die Endung ";CHR (34);".SB";CHR (34);
?" wird automatisch hinzugefuegt."
?:?:INPUT " ";fi:fi=LEFT (fi,8)+".SB"
?:?" Bitte warten!"
OPEN fi FOR OUTPUT AS #2
eintrag:FOR an=1 TO z2+1:ink(an)="":NEXT an:z2=0
IF EOF(1) THEN GOTO AD
LINE INPUT #1, eingabe
Li=LEN(eingabe)
x=1
leerz:IF MID (eingabe,x,1)<>" " THEN GOTO z100
wo=wo+1:auf(wo)=LEFT (eingabe,x-1)
z2=z2+1:ink(z2)=LEFT (eingabe,x-1)
LW=LEN(auf(wo))
IF Li <=LW THEN GOTO z100
eingabe=RIGHT (eingabe,(Li-LW-1)):Li=Li-LW-1
x=1:GOTO leerz
z100:x=x+1
IF Li=0 THEN GOTO AD
IF x < Li THEN GOTO leerz
wo=wo+1:auf(wo)= eingabe
z2=z2+1:
ink(z2)= eingabe
IF auf(wo)="" THEN wo=wo-1
FOR an=1 TO z2 STEP 2
IF ink(an+1) <> "" THEN SWAP ink(an),ink(an+1)
NEXT an
n="":FOR an=z2 TO 1 STEP -1
n=n+ink(an)+" ":
NEXT an:? #2,n
n=""
GOTO eintrag
AD:?:?" Der Text enthaelt";wo;" Woerter.":getkey:GOTO startSB
ordnen:
Width breite\8,hoehe\16
?:?:list_files "*.txt",fbArchive
?:?:list_files "*.sb", fbArchive
?:input" Name des unverwuerfelten Textes ";aas
IF UCASE(aas)="E" THEN GOTO startSB
?:INPUT" Name des verwuerfelten Textes mit der Endung .SB ";fi
OPEN aas FOR INPUT AS #1
OPEN fi FOR INPUT AS #2
CLS:?
eintrag0:IF EOF(2) THEN GOTO z1200
LINE INPUT #2,za:?:?" Bitte ordne:"
?:?" ";za
?:?" ";:LINE INPUT #1,aKo
z1=z1+1:LINE INPUT er:IF UCASE(er)="E" THEN END
IF er=aKo THEN rn=INT(RND(1)*3)+1 ELSE GOTO z1040
?:?" ";fbD(rn)
GOTO eintrag0
z1040:
F=F+1:?:?" Bitte vergleiche mit meiner Loesung:"
?:?" ";aKo
?:? " Weiter mit jeder Taste!":w=INPUT(1)
CLS:GOTO eintrag0
z1200:CLS
?:? " Du warst fleiáig. Weiter so! ";z1-F;" von ";z1;" Zeilen richtig."
?:? " Wenn du keine Saetze bearbeitet hast, hast du die Namen der Texte"
?:? " nicht richtig eingegeben.":getkey
GOTO startSB

Sub list_files (ByRef filespec As String, ByVal attrib As Integer)
Dim As String filename = Dir(filespec, attrib)
z1=0
Do While Len(filename) > 0
Print:? tab(30);filename
filename = Dir()
z1=z1+1:if z1=16 then getkey:cls:z1=0
Loop
End Sub

Function zoom(text As String) As Any Ptr
   Dim As Any Ptr img, imgz
   Dim As Integer w, h
   Dim As ULong pnt 
   img = ImageCreate(Len(text) * 8, 8, RGB(255, 0, 255), 32)
   ImageInfo img, w, h
   imgz = ImageCreate(w * 2, h * 2, RGB(255, 0, 255), 32)
   Draw String img, (0,0), text, RGB(255, 255, 255)
   For x As Integer = 0 To w - 1
      For y As Integer = 0 To h - 1
         pnt = Point(x, y, img)
         PSet imgz, (x * 2, y * 2), pnt
         PSet imgz, (x * 2 + 1, y * 2), pnt
         PSet imgz, (x * 2, y * 2 + 1), pnt
         PSet imgz, (x * 2 + 1, y * 2 + 1), pnt
      Next
   Next
   ImageDestroy img
   Return imgz
End Function
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 29.10.2016, 17:32    Titel: Antworten mit Zitat

Habe mir vorhin auch

http://www.freebasic.net/wiki/wikka.php?wakka=KeyPgDrawString

angeschaut; ist natürlich ein Stück weit recht rudimentär. Weiss nur von der Java-Programmierung her mit AWT/Swing, dass es dort ein ganzes Arsenal an Methoden gibt, um unter anderem auch Dinge wie Geometriewerte (z.B. wie viele Pixel breit wird ein bestimmter Text? Höhe der Ober- und Unterlänge?) zu bestimmten (Klasse FontMetrics). Und natürlich die auf einem System verfügbaren Schriftarten bestimmen gehört ebenfalls dazu (bei den genannten Java-Klassen aus meiner Sicht sogar recht gut dort gelöst). Meines Wissen benützt die JVM hier die Standard-Fontrendering-Routinge des jeweiligen Betriebssystems, so dass typografische Feinheiten wie bei "AVA" die Buchstaben etwas näher zusammenrücken (sog. Kerning) bei der Geometrieberechnung alles auch berücksichtigt wird.

=> Alles solche Sachen müsste ein "font.bi" sinnvollerweise auch zur Verfügung stellen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



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

BeitragVerfasst am: 29.10.2016, 19:29    Titel: Antworten mit Zitat

Falls das in Bezug auf meine "font.bi" gemeint war - die ist natürlich auch nur ein Versuch, auf möglichst einfachem Weg für Lengua eine Nutzung von FreeType hinzubekommen (hätte ich keine Spezialzeichen benötigt, hätte ich es gar nicht versucht happy).

Eine allgemeine Font-Bibliothek zur Nutzung beliebiger Schriftarten des Betriebssystems wäre natürlich eine tolle Sache. FreeType hat allerdings auch noch das Problem, dass es für Windows schwer zu bekommen ist (bzw. selbst compiliert werden muss) - vielleicht gibt es da wegen der WinAPI wenig Interesse. Wie auch immer, so eine Font-Bibliothek wäre auf jeden Fall super.
_________________
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
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