Einfaches Projekt zum Runterladen?

Anfängerfragen zum Programmieren mit PureBasic.
Axolotl
Beiträge: 146
Registriert: 31.12.2008 16:34

Re: Einfaches Projekt zum Runterladen?

Beitrag von Axolotl »

Da habe ich dich mit meinem Kommentar wohl auf eine falsche Fährte gelockt. Sorry dafür.
Fonts in derart Schleifen anzulegen macht keinen Sinn.
Um dein konkretes Problem mit dem fehlerhaften LoadFont zu bearbeiten, brauchen wir mehr von deinem Code.
Meistens liegt das Problem nämlich nicht im eigentlichen Aufruf?????

Ich habe mal ein Code-Beispiel aus der Hilfe angepasst. (Ich nutze immer EnableExplicit, die Beispiele leider nie!)
Außerdem ist bei mir alles Procedure orientiert, damit ich auf globale Variablen verzichten kann (so weit es geht).

Und noch ein paar Tipps (ungefragt)
Der Standard Datentyp ist Integer (beste Wahl) Syntax: Global g_IntVar oder Protected IntVar kann natürlich auch IntVar.i geschrieben werden.
Unter Windows muss nur selten auf Word oder Long zurückgegriffen werden.

Mit Result = IsFont(#Font) kann man auch gut abprüfen ob die Variable richtig initialisiert ist. (siehe Beispiel)
Dabei sind die Proceduren bspw. (IsGadget, IsWindow, etc.) gefahrlos anzuwenden.

Code: Alles auswählen

EnableExplicit 

;-== Debug Helper Functions ==-----------------------------------------------------------------

Macro DQ        ;' Double Quotes " for macros 
  " 
EndMacro 

Macro InspectInteger(iValue) 
  " " + DQ#iValue#DQ + " = 0x" + Hex(iValue) + " (" + Str(iValue) + "); " 
EndMacro 

Macro DebugInspectInteger(iValue) 
  Debug InspectInteger(iValue)
EndMacro 


;-== Example from Help ==----------------------------------------------------------------------



Procedure main() 
  Protected Font1, Font2   ;' == Integer as default 
  Protected UsedFont.w     ;' == Word 
  Protected Event          ;' == Integer (why not) 

  Debug "SizeOf Font1 = " + SizeOf(Font1)  + " bytes" 
  Debug "SizeOf Font2 = " + SizeOf(Font2)  + " bytes" 
  Debug "SizeOf UsedFont = " + SizeOf(UsedFont)  + " bytes" 

  If OpenWindow(0, 0, 0, 320, 130, "FontID() Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ButtonGadget(0, 10, 10, 300, 30, "Click to change the font")
    Font1 = LoadFont(#PB_Any, "Arial"  ,  8, #PB_Font_Bold)
    Font2 = LoadFont(#PB_Any, "Verdana", 12, #PB_Font_StrikeOut)
    UsedFont = 1

    If IsFont(Font1) And IsFont(Font2) 
      DebugInspectInteger(Font1)  ;' Value of Font 
      DebugInspectInteger(Font2) 
    Else 
      Debug "Font not defined;" 
    EndIf 

    Repeat
      Event = WaitWindowEvent()

      If Event = #PB_Event_Gadget
        If EventGadget() = 0
          If UsedFont = 1
            SetGadgetFont(0, FontID(Font2))
            UsedFont = 2
          Else
            SetGadgetFont(0, FontID(Font1))
            UsedFont = 1
          EndIf
        EndIf
      EndIf
    Until Event = #PB_Event_CloseWindow
  EndIf
EndProcedure 

main() 
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
Plenz
Beiträge: 38
Registriert: 05.05.2021 01:19

Re: Einfaches Projekt zum Runterladen?

Beitrag von Plenz »

Ich glaube nicht, dass es Sinn macht, meinen Code zu posten, denn das Problem ist nicht reproduzierbar.

Bei meinem Programm geht es darum, mehrere kleine Bilder und mehrere Texte auf einem Canvas hin und her zu schieben. Dafür habe ich zwei über Structure definierte globale Arrays: eins für die Bilder, eins für die Texte. Das Array für die Bilder speichert den Einfügepunkt, die Größe, abgeschnittene Ränder sowie die Nummer und die ID des Images. Das Array für die Texte speichert den Einfügepunkt, die Texthöhe, die Farbe sowie die Nummer und die ID des Fonts.

An anderer Stelle wurde ich bereits darauf hingewiesen, dass das Erzeugen von Nummern mit #PB_Any zu Problemem führen kann. Ich bin gerade dabei, mein Programm so umzuschreiben, dass es die Nummern selbst vergibt.

Möglicherweise liegt das Problem aber auch darin, dass ich den Font "Arial Rounded MT Bold" von meinem Windows-Rechner auf das Linux-Notebook übertragen habe, und das möglicherweise nicht korrekt. PureBasic findet es nicht und benutzt stattdessen immer einen anderen Font als Ersatz, und zwar ohne dass ich das programmiert habe.
Axolotl
Beiträge: 146
Registriert: 31.12.2008 16:34

Re: Einfaches Projekt zum Runterladen?

Beitrag von Axolotl »

Okay, dazu fällt mir spontan ein, dass bei Windows der angezeigte Font-Name nicht dem Dateinamen entsprechen muss und das Linux mit den Leerzeichen anders umgeht. Leider habe ich die Details nicht mehr parat, da meine Linux Basteleien schon ein paar Jahre zurückliegen.

Tipp: Auch bei Fonts gibt es Copyright und Lizenzen die man beachten muss.
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
Plenz
Beiträge: 38
Registriert: 05.05.2021 01:19

Re: Einfaches Projekt zum Runterladen?

Beitrag von Plenz »

Danke für den Hinweis, da scheint es tatsächlich Probleme mit den Leerzeichen zu geben. Das lässt sich aber durch Ausprobieren rausfinden.

Das mit dem Copyright ist mir klar, aber das Programm ist nur für meine Frau und verlässt das Haus nicht. Es scheint aber so, dass man diese Schrift zumindest unter Linux nicht "bold" machen kann, sondern dass man dann einen fetten Font benutzen muss. Als Ersatz bietet sich der freie Font "Nunito" an, für den es diverse Stärken gibt.
Antworten