Schriftgrad

Anfängerfragen zum Programmieren mit PureBasic.
Wilfried
Beiträge: 6
Registriert: 05.03.2010 15:17

Schriftgrad

Beitrag 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
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Re: Schriftgrad

Beitrag 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
Bild
Wilfried
Beiträge: 6
Registriert: 05.03.2010 15:17

Re: Schriftgrad

Beitrag von Wilfried »

Danke für die schnelle Antwort! Die muss ich erst mal verstehen. Dann melde ich mich noch mal. Gruß Wilfried
Wilfried
Beiträge: 6
Registriert: 05.03.2010 15:17

Re: Schriftgrad

Beitrag 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
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Re: Schriftgrad

Beitrag 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.
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Schriftgrad

Beitrag von edel »

ich will es auch mal versuchen :mrgreen: (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 ( :mrgreen: ) ihm gehoert ;)
Zuletzt geändert von edel am 12.06.2010 16:11, insgesamt 2-mal geändert.
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Re: Schriftgrad

Beitrag von Jilocasin »

edel hat geschrieben:sorry ts ;)
Aber unser ts hat doch noch garkeinen Beitrag hier geschrieben :lol:
Bild
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Schriftgrad

Beitrag von rolaf »

Jilocasin hat geschrieben:Aber unser ts hat doch noch garkeinen Beitrag hier geschrieben :lol:
Wahrscheinlich weil der Code so krüppelig ist und ts sowas immer gleich moniert. :mrgreen:

Edit: Nachdem edel sich erklärt hat nehme ich alles zurück und behaupte nun das Gegenteil. :mrgreen:
@DrFalo: Versuch doch du eine überzeugende Lösung zu finden :mrgreen: .. (Hups)
Neeee, heute hab ich schon zuviel Bananensaft intus. :wink:
Zuletzt geändert von rolaf am 12.06.2010 16:53, insgesamt 2-mal geändert.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Re: Schriftgrad

Beitrag von Jilocasin »

Kann man auf 15 x 15 Pixel Smilies ein Patent anmelden?

@DrFalo: Versuch doch du eine überzeugende Lösung zu finden :mrgreen: .. (Hups)

Edit: Bananensaft ist nice. :mrgreen: (Hups, die zweite) Nur bisher hatte ich noch kein Doppelkorn dazu..
Zuletzt geändert von Jilocasin am 12.06.2010 18:39, insgesamt 1-mal geändert.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Schriftgrad

Beitrag von ts-soft »

Muß ich mich wohl umstellen: Bild
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten