Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 04.04.2022, 09:46 Titel: kleinere Schriftart |
|
|
Ich hab schon wieder eine Frage:
ich brache eine Liste in der Console in der ich je Zeile mehr anzeigen soll als es mit dem grötmöglichen Fenster und der normal eingestellten Schrift möglich ist.
Daher möchte ich für diese Ausgabe eine kleinere Schriftart verwenden.
Derzeit ist die Console auf Consolas 24 eingestellt.
ich habe auf www.freebasic-portal.de die Funktion Set_ConsoleFont gefunden mit der man mehrere Fonts und Schriftarten einstellen können soll. Nachdem diese Funktion nur einen Integer-Parameter habe ich mit Werten von 1 bis 16 versucht die Schriftart zu ändern - aber leider ohne Erfolgt. In der Beschreibung zur Funktion ist leider auch nicht angegeben wie sie zu verwenden ist.
Code: | #Include Once "windows.bi"
Function Set_ConsoleFont(typ As Integer) As Integer
Dim As Any Ptr Kernel32
Dim SetConsoleFont As Function(ByVal As HANDLE, ByVal As Integer) As Integer
Kernel32 = DylibLoad("Kernel32.dll")
If Kernel32 Then
SetConsoleFont = DyLibSymbol(Kernel32,"SetConsoleFont")
Function = SetConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE),typ)
DyLibFree Kernel32
EndIf
End FUNCTION
DIM I AS integer
FOR I=1 TO 16
Set_ConsoleFont(I)
PRINT STR(I);": ","ABCDEFGabcdefg123456"
next
GETKEY |
Leider hat sich mit den unterschiedlichen I-Werten gar nichts verändert.
Gibt es da eine Liste mit Zahlen für die Schriftarten? _________________ Grüße
kilix |
|
Nach oben |
|
|
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 04.04.2022, 10:10 Titel: |
|
|
ich habe da noch etwas gefunden. Hier wird auf ein Grafikfenster umgeschaltet. Die Schrift ist schön klein aber ich verstehe nicht warum sie rot ist.
Code: | Function set_fbfont (ByVal x As Integer) As Integer
Dim As Integer breit, hoch
ScreenInfo breit, hoch
Select Case x
Case 8, 14, 16 'nur 8, 14 oder 16 funktioniert richtig
Width breit\8, hoch\x ' hier wird auto. Cls ausgeführt
Case Else
Return 0 'etwas lief schief
End Select
Return 1 'Font erfolgreich gesetzt
End Function
Screen 20, 32
set_fbfont(14)
Print "Mein FBFont_14"
Draw String (20*8, 15*14),"Schrifttyp 8x14 Font (Draw String)",&Hff0000
sleep |
Mir würde für meine Anwendung die erste Funktion besser gefallen - wenn ich wüsste welche Parameter der Funktion übergeben werden können. _________________ Grüße
kilix |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 04.04.2022, 14:24 Titel: |
|
|
kilix hat Folgendes geschrieben: | ...ich verstehe nicht warum sie rot ist. |
Weil du das in der Zeile Code: | Draw String (20*8, 15*14),"Schrifttyp 8x14 Font (Draw String)",&Hff0000 | so angegeben hast.
Der letzte Parameter, &Hff0000, ist die Zeichenfarbe im RGB - Format: &Hff (=255) für Rot und jeweils 0 für Grün und Blau. Mit Code: | Draw String (20*8, 15*14),"Schrifttyp 8x14 Font (Draw String)",&Hffffff | oder alternativ Code: | Draw String (20*8, 15*14),"Schrifttyp 8x14 Font (Draw String)",RGB(255,255,255) | bekommst du eine weiße Schrift.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 04.04.2022, 14:52 Titel: |
|
|
Danke grindstone!
Nachdem mich die Farbe und auch das Aussehen verwirrt hatte, gab mir deine Antwort den Einstieg und ich habe ich mich jetzt intensiver mit dieser Funktion auseinander gesetzt.
Habe mir den Befehl auch in der Befehlsreferenz angesehen. Mit der habe ich immer wieder Probleme weil zwar die Regeln beschrieben sind aber mir die Anwendung dazu fehlt. Damit ist das alles sehr abstrakt.
Ich verstehe die Funktion jetzt gut. Mich stört daran aber, dass ich damit für eine einfache Liste (wenn auch mit langen Zeilen) in den Grafikmodus wechseln muss. Daher wäre mir die erste oben gezeigte Funktion lieber. Allerdings steht noch die Frage im Raum was als Variable "typ" dort einzusetzen ist. Mit den Zahlen 1 bis 32 habe ich nichts erreicht. _________________ Grüße
kilix |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 05.04.2022, 15:37 Titel: |
|
|
kilix hat Folgendes geschrieben: | Allerdings steht noch die Frage im Raum was als Variable "typ" dort einzusetzen ist. | Die zur Verfügung stehenden Fonts sind durchnummeriert, von 0 bis <Anzahl der Fonts> - 1. "typ" ist die Nummer des gewünschten Fonts.
Welche Windows - Version hast du?
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Zuletzt bearbeitet von grindstone am 05.04.2022, 16:08, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
|
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 05.04.2022, 15:49 Titel: |
|
|
ich habe Windows 10, aktuelle Version.
ich verstehe die Durchnummerierung der Fonts nicht. Ich habe der Reihe nach dir Werte von 1 bis 256 eingesetzt aber das hat an der Schrift nicht verändert _________________ Grüße
kilix |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 05.04.2022, 16:15 Titel: |
|
|
Du kannst den Font übrigens auch direkt beim geöffneten Konsolenfenster ändern: Rechtsklick auf die Titelleiste > Eigenschaften > Schriftart
Volta hat hier drei Beispielprogramme zu diesem Thema vorgestellt, die du dir ansehen solltest (und die auch funktionieren, zumindest bei mir).
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
hhr
Anmeldungsdatum: 15.07.2020 Beiträge: 88
|
Verfasst am: 05.04.2022, 16:15 Titel: |
|
|
Im ersten Programm muss Getkey in der For-Schleife stehen. Sonst rast die Schleife einfach durch. |
|
Nach oben |
|
|
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 05.04.2022, 16:28 Titel: |
|
|
hatte in meiner Verion am PC ein SLEEP 600 eingebaut und jetzt zusätzlich mit GETKEY gebremst aber dadurch hat sich die Schrift nicht verändert. _________________ Grüße
kilix |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 05.04.2022, 16:33 Titel: |
|
|
Tut sie nicht, weil sie von gebremst wird. Man könnte für mehr Muße beim Betrachten allerdings den Wert erhöhen.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
hhr
Anmeldungsdatum: 15.07.2020 Beiträge: 88
|
Verfasst am: 05.04.2022, 16:36 Titel: |
|
|
Code: | #Include Once "windows.bi"
Function Set_ConsoleFont(typ As Integer) As Integer
Dim As Any Ptr Kernel32
Dim SetConsoleFont As Function(Byval As HANDLE, Byval As Integer) As Integer
Kernel32 = Dylibload("Kernel32.dll")
If Kernel32 Then
SetConsoleFont = Dylibsymbol(Kernel32,"SetConsoleFont")
Function = SetConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE),typ)
Dylibfree Kernel32
End If
End Function
Dim I As Integer
For I=1 To 16
Set_ConsoleFont(I)
Print Str(I);": ","ABCDEFGabcdefg123456",Wstr("Taste drücken...")
Getkey
Next |
|
|
Nach oben |
|
|
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 05.04.2022, 16:45 Titel: |
|
|
genau so hatte ich es aber an der Schrift hat sich nichts verändert, egal wie groß I ist.
Wenn das bei dir funktioniert dann hat bei mir wohl einen anderen Grund weshalb es nicht richtig läuft. Vermutlich wäre irgendwo eine Einstellung zu ändern ...... _________________ Grüße
kilix |
|
Nach oben |
|
|
hhr
Anmeldungsdatum: 15.07.2020 Beiträge: 88
|
Verfasst am: 05.04.2022, 17:10 Titel: |
|
|
Bei Windows 7 und Windows XP funktioniert es nach der Korrektur. |
|
Nach oben |
|
|
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 05.04.2022, 18:27 Titel: |
|
|
wahrscheinlich liegt es daran, dass ich Windows10 habe.
Leider habe ich mir nicht notiert wo ich diese Funktion gefunden habe.
Die zweite Funktion (oben) stellt aber auf eine Grafik-Konsole um und das passt mir nicht in das textbasierte Projekt.
Wenn es da keine Möglichkeit gibt die Schrift in der Konsole zu ändern überlege ich von Anfang an eine etwas kleinere Schrift zu verwenden. _________________ Grüße
kilix |
|
Nach oben |
|
|
hhr
Anmeldungsdatum: 15.07.2020 Beiträge: 88
|
Verfasst am: 05.04.2022, 19:30 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Du kannst den Font übrigens auch direkt beim geöffneten Konsolenfenster ändern: Rechtsklick auf die Titelleiste > Eigenschaften > Schriftart
Volta hat hier drei Beispielprogramme zu diesem Thema vorgestellt, die du dir ansehen solltest (und die auch funktionieren, zumindest bei mir).
Gruß
grindstone |
grindstone hat einen Link angegeben: Volta hat hier...
Bei mir funktionieren nur die ersten beiden Beispiele ohne Überarbeitung. |
|
Nach oben |
|
|
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 05.04.2022, 20:28 Titel: |
|
|
Das tut mir Leid, diesen Link habe ich überlesen.
Allerdings ist die ersste Funktion exakt die über die wir diskutiert hatten. Die anderen muss ich testen. Ich werde zwar wahrscheinlich die Schrift generell in der Konsole einstellen aber sie ändern zu können wenn es nötig ist wäre schön. _________________ Grüße
kilix |
|
Nach oben |
|
|
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 05.04.2022, 21:13 Titel: |
|
|
Habe mir die 3 Programme angesehen:
1. Programm:
die Funktion "Set_ConsoleFont" ist die über die wir diskutiert hatten, jetzt aber ergänzt durch die Funktion "NumberOfFonts" und einem Programm mit den doe Konsolengröße und Farbe eingestellt wird und das in der ersten Schleife viele Zeichen ausgibt. Das verstehe ich.
Die zweite For-Schleife verstehe ich nicht denn der Printbefehl wurde nicht ausgeführt.
Der gedruckte Font ist zwar kleiner als der in der Konsole eingestellte aber ich kann (mit meinen noch bescheidenen Kenntnissen) nicht erkennen wo/wie ich angeben kann welche Größe der Font haben soll bzw. wo die ausgegebene Zeichengröße definiert wurde - oder geschieht das nur durch die Fenstergröße? Das kann aber nicht sein weil ich diese doppelt so groß machte und sich die Schrift nicht veränderte.
2. Programm:
neuere Form des ersten, macht auch das gleiche. Dieses Programm holt die beiden deklarierten Funktionen offenbar aus windows.bi. Was das Programm selbst betrifft s.o.
3. Programm:
habe es kopiert, kann es aber wegen Fehlern nicht kompilieren. Ich erhalte für Type und Funktionen die Meldung "Duplicate definition" und dann noch Folgefehler. Leider kann ich nicht feststellen warum das so ist oder hängst das mit windows.bi zusammen?
Alles in allem kann ich mit diesen Funktionen/Programmen meinen Wunsch nach einstellbarer Fontgröße bzw. Fonts nicht erfüllen (oder ich verstehe einfach nicht wie das geht). _________________ Grüße
kilix |
|
Nach oben |
|
|
hhr
Anmeldungsdatum: 15.07.2020 Beiträge: 88
|
Verfasst am: 06.04.2022, 00:09 Titel: |
|
|
Keine Sorge, ich verstehe es auch nicht. Ich wünsche mir auch, dass man alle Einstellungen, die man in der Konsole vornehmen kann, auch im Programm vornehmen könnte. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 06.04.2022, 12:27 Titel: |
|
|
"Duplicate definition" wird ausgeworfen, wenn die DIMensionierte Variable schon vorher im Programm definiert wurde (z.B. in einer der #INCLUDE - Dateien). Meistens hilft es, die betreffende(n) Zeile(n) im eigenen Programm auszukommentieren und es erneut zu versuchen.
Zu Windows 10: Möglicherweise benötigt man zum Ändern der Konsolenschrift Administratorrechte. Windows wird ja von Version zu Version immer restriktiver.
Probier mal das hier: Code: | #Include "windows.bi"
Dim As Any Ptr Kernel32 = DylibLoad("Kernel32.dll")
Dim SetConsoleFont As Function (hConsoleOutput As HANDLE, index As ULong) As Boolean
If Kernel32 Then
SetConsoleFont = DylibSymbol( Kernel32, "SetConsoleFont" )
Else
End
EndIf
SetConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE),0)
? "Hallo Welt"
Sleep |
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
hhr
Anmeldungsdatum: 15.07.2020 Beiträge: 88
|
Verfasst am: 06.04.2022, 16:42 Titel: |
|
|
Ich habe auch noch einen Vorschlag, der bei Windows 7 funktioniert.
Für breite und hoehe kann man die Zahlen einsetzen, die im Konsolenmenü wählbar sind.
Bei Consolas und Lucida Console wird nur eine Zahl, die Höhe, angegeben.
Code: | #include "windows.bi"
SetWindowPos(GetConsoleWindow, HWND_TOP, 20, 20, 500, 300, 0)
Sub changefontsize(w As Long, h As Long, ftype As String = "")
Dim As _CONSOLE_FONT_INFOEX info
With info
.cbSize = Sizeof(info)
.dwFontSize.X = w
.dwFontSize.Y = h
.FaceName = ftype
End With
SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), NULL, @info)
End Sub
Dim As Long breite, hoehe
breite = 12
hoehe = 16
changefontsize(breite, hoehe)
Print "Rasterschriftart", WStr("Taste drücken...")
Getkey
Cls
breite = 0
hoehe = 36
changefontsize(breite, hoehe, "Consolas")
Print "Consolas", WStr("Taste drücken...")
Getkey
Cls
breite = 0
hoehe = 28
changefontsize(breite, hoehe, "Lucida Console")
Print "Lucida Console", WStr("Taste drücken...")
Sleep
|
https://www.freebasic.net/forum/viewtopic.php?p=291160#p291160
http://www.cplusplus.com/forum/general/118967/ |
|
Nach oben |
|
|
|