Seite 1 von 2
Schriftgrad
Verfasst: 11.06.2010 21:19
von Wilfried
Hallo Profis,
ich bin mit PureBasic gestrandet. Vor unendlich langer Zeit beschäftigte ich mich mit QBasic. Mit dem Untergang von DOS hat sich das erledigt. Die meisten assemblierten Programme gehen wohl noch, eine Weiterentwicklung ist nicht mehr möglich. Deshalb möchte ich auf PureBasic umsteigen. Es geht um die Berechnung von Abschlüssen in der Abiturstufe.
Um ein ermüdungsarmes Arbeiten zu ermöglichen möchte ich einen größeren Zeichensatz benutzen – habe ich mit der Console nicht geschafft. Auch ein Input geht nur mit der Console. Nun bin ich ratlos.
Ich muss die Eingabe einiger Strings in einem größeren Zeichensatz realisieren. Die Verarbeitung schaffe ich dann schon. Die Ausgabe soll wieder im großen Zeichensatz erfolgen. Kann mir jemand mit einem lauffähigen (sonst eigentlich sinnlosen) Programm auf die Sprünge helfen? Schon im voraus vielen Dank!
Gruß Wilfried
Re: Schriftgrad
Verfasst: 11.06.2010 21:43
von Jilocasin
In der Console kannst du nur per Hand die Größe des Zeichensatzes einstellen. Ich nehme mal an, du beziehst dich mit "Input" auf die gleichnamige Funktion in PB? Klar, das ist die einzige, die es ermöglichst in einer COnsole Daten einzulesen.
Daher würde ich an deiner Stelle vollkommen auf Consolenbenutzung verzichten und alles modern mit den PB-Gadgets in eigenen Fenstern einlesen und anzeigen lassen.
Ist ein ziemlich einfaches Beispiel, aber so kannst du z.B. selbst im Programm die Schriftgröße von Eingabe- und Ausgabefeldern setzen:
Code: Alles auswählen
Enumeration
#Gadget_Eingabe
#Gadget_Button
#Gadget_Ausgabe
EndEnumeration
Enumeration
#Font_Large
EndEnumeration
If LoadFont(#Font_Large, "Arial", 14) = 0
Debug "Huch.. haste kein Arial?"
End
EndIf
If OpenWindow(0, 0, 0, 400, 300, "Berechnung", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) = 0
Debug "Huch.. jetzt haste kein Fenster"
End
EndIf
StringGadget(#Gadget_Eingabe, 10, 10, 380, 30, "Lesbar?")
SetGadgetFont(#Gadget_Eingabe, FontID(#Font_Large))
ButtonGadget(#Gadget_Button, 150, 140, 100, 24, "Berechnen")
TextGadget(#Gadget_Ausgabe, 10, 260, 380, 30, "", #PB_Text_Border)
SetGadgetFont(#Gadget_Ausgabe, FontID(#Font_Large))
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case #Gadget_Button
SetGadgetText(#Gadget_Ausgabe, "Berechnung... usw.")
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Re: Schriftgrad
Verfasst: 11.06.2010 22:03
von Wilfried
Danke für die schnelle Antwort! Die muss ich erst mal verstehen. Dann melde ich mich noch mal. Gruß Wilfried
Re: Schriftgrad
Verfasst: 12.06.2010 13:43
von Wilfried
Hallo, habe versucht das Programmbeispiel zu verstehen - leider ohne Erfolg. Also drücke ich mich besser aus: Über die Tastatur möchte ich ein Zeichen einlesen und in A$ speichern. Wenn das eingelesene Zeichen ein A ist, soll mittig auf dem Schirm ein großes A erscheinen, andernfalls rechts unten groß das eingegebene Zeichen. Das Programm soll minimal, lauffähig und aucch für Anfänger verständlich sein.
Im voraus nochmals danke für die Hilfe!
Gruß Wilfried
Re: Schriftgrad
Verfasst: 12.06.2010 14:35
von Jilocasin
Ach herrje.. muss es denn unbedingt ein Programm im QBasic-Stil sein, dass ein verpixeltes Consolenfenster im Fullscreen-Modus öffnet?

Ganz ehrlich, ich finde diese Art und Weise
Abschlüssen in der Abiturstufe zu bearbeiten überholt. Ich sehe es ja an meiner eigenen Schule, wenn unsere Informatiklehrer versuchen uns TurboPascal beizubringen, da schauderts mich.
Wenn du darauf bestehst den ganzen Bildschirm benutzen zu wollen, dann ist das in PB - besser als mit Console - mit den Sprite-Befehlen gut machbar. Da muss man sich aber auch um die Ereignisbehandlung selbst kümmern. Soll heißen: Du wirst nicht einen Programmcode schreiben können, der Schritt für Schritt
einliest, dann
auswertet, dann
anzeigt, und wieder von vorne.
So blöd es nun klingt, ich würde dir dennoch das Arbeiten im Fenstermodus (wie im obigen Beispiel) ans Herz legen. Dort sind in PureBasic entsprechende Befehle für Eingabefelder bereits vorhanden, außerdem lässt sich einfach die Schriftgröße ändern und die Elemente beliebig auf dem Fenster anordnen.
Wie bereits gesagt, ein Arbeiten auf diese Art und Weise:
Code: Alles auswählen
A$ = Input()
If Input = "A"
Print("Juhu ein A")
Else
Print(A$)
Endif
...ist heutzutage nur noch in der Console machbar. Da man hier aber nur selbst die Schriftgröße verändern kann, bietet es sich an, diese Arbeitsschritte alle dynamisch (beim Klicken auf Buttons, etc.) in Fenstern ausführen zu lassen.
Re: Schriftgrad
Verfasst: 12.06.2010 15:30
von edel
ich will es auch mal versuchen

(sorry ts

)
Code: Alles auswählen
; hier wird ein Fenster geoeffnet, #PB_Window_SystemMenu sorgt dafuer dass
; das Fenster ein Menu bzw ein Knopf zum schliessen hat
; #PB_Window_ScreenCentered zentriert das Fenster
If OpenWindow(0, 0, 0, 230, 180, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; hier definieren wir die unten benotigeten Variablen. Nicht zwingend erforderlich, aber ratsam
Define.i Event = 0
Define.i Schrift = 0
Define.i Ausgabe0 = 0
Define.i Ausgabe1 = 0
Define.i char = 0
; hier wird ein Schriftart (ARIAL) mit der Groesse 40 geladen und die Daten werden in einer Variable gespeichert
Schrift = LoadFont(#PB_Any, "Arial", 40)
; hier werden alle Controls (unter PB Gadgets) die zuvor geladenen Schriftart zugewiesen.
SetGadgetFont(#PB_Default, FontID(Schrift))
; erstellen von 2 Textgadgets, diese koennen nichts, ausser Text anzeigen.
; damit man diese auch sieht, erstellt man sie mit einem Rand (#PB_Text_Border)
Ausgabe0 = TextGadget(#PB_Any, 10, 10, 210, 70, "", #PB_Text_Border)
Ausgabe1 = TextGadget(#PB_Any, 10, 90, 210, 70, "", #PB_Text_Border)
; ab hier beginnt die Eventschleife, diese wird auch
; erst wieder verlassen wenn man das Fenster schliesst, siehe das untere "Until"
Repeat
; Das Event wird abgefragt, WaitWindowEvent sollte nur einmal pro schleifendurchlauf (repeat) aufgerufen werden.
Event = WaitWindowEvent()
;#WM_CHAR waere das richtige Event, die Konstante gibt es in der Demo aber nicht.
;hier wird auf das Event #WM_CHAR gewartet, das ist ein Windows- und kein Purebasicevent
If Event = 258
; EventwParam() gibt es nur unter dem OS Windows, diese Funktion holt zusaetzliche Informationen zu einem (#WM_) Event.
char = EventwParam()
Select char
; Im folgendem Case darf "Char" nur A oder a sein
Case 'A' , 'a'
; hier wird Char, mit Hilfe der Funktion CHR(), in ein String umgewandelt
; und an das TextGadget Ausgabe0 geschickt
SetGadgetText(Ausgabe0, Chr(Char))
; Im folgendem Case darf "Char" B bis Z oder b bis z sein.
Case 'B' To 'Z', 'b' To 'z'
; hier wird Char, mit Hilfe der Funktion CHR(), in ein String umgewandelt
; und an das TextGadget Ausgabe1 geschickt
SetGadgetText(Ausgabe1, Chr(Char))
EndSelect
EndIf
; wenn Event = #PB_Event_CloseWindow ( also beim Mausklick auf das Fenster X) wird
; die Eventschleife verlassen
Until Event = #PB_Event_CloseWindow
EndIf
@Jilocasin & DrFalo
Nein, ich habe aber angenommen dass das Smilie (

) ihm gehoert

Re: Schriftgrad
Verfasst: 12.06.2010 15:57
von Jilocasin
edel hat geschrieben:sorry ts

Aber unser ts hat doch noch garkeinen Beitrag hier geschrieben

Re: Schriftgrad
Verfasst: 12.06.2010 16:03
von rolaf
Jilocasin hat geschrieben:Aber unser ts hat doch noch garkeinen Beitrag hier geschrieben

Wahrscheinlich weil der Code so krüppelig ist und ts sowas immer gleich moniert.
Edit: Nachdem edel sich erklärt hat nehme ich alles zurück und behaupte nun das Gegenteil.
@DrFalo: Versuch doch du eine überzeugende Lösung zu finden

.. (Hups)
Neeee, heute hab ich schon zuviel Bananensaft intus.

Re: Schriftgrad
Verfasst: 12.06.2010 16:40
von Jilocasin
Kann man auf 15 x 15 Pixel Smilies ein Patent anmelden?
@DrFalo: Versuch doch du eine überzeugende Lösung zu finden

.. (Hups)
Edit: Bananensaft ist nice.

(Hups, die zweite) Nur bisher hatte ich noch kein Doppelkorn dazu..
Re: Schriftgrad
Verfasst: 12.06.2010 17:16
von ts-soft
Muß ich mich wohl umstellen:
