Font verstellt sich

Anfängerfragen zum Programmieren mit PureBasic.
rolf
Beiträge: 17
Registriert: 18.01.2005 17:00

Font verstellt sich

Beitrag von rolf »

Hallo,
in einer Anwendung (Windows) verwende ich verschiedene Fontgrößen.
Die Anwendung besteht aus einer einzigen Hauptmaske, die aber für Rückfragen kleinere Forms aufruft.
Wenn ich eine der Unterformen aufrufe, werden die Fonts des verdeckten Bereiches verändert.
Ein TextGadget beginnt dann z.B. mit einem Großen Font und verändert sich in einen kleinen.

Weiß jemand, wo ich was falsch machen könnte?

Gruß
Rolf
Purebasic V.4.20 Windows 2000 SP 4
Purebasic V 4.20 Linux 2.6.15-25-686 #1 SMP
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

Beitrag von ts-soft »

Ein bissel Beispielcode wäre hilfreich :wink:
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
rolf
Beiträge: 17
Registriert: 18.01.2005 17:00

Beitrag von rolf »

Ich habe da mal etwas zusammengestellt.
Wenn ich auf den Schalter 1 wähle, erhalte ich den Effekt

Code: Alles auswählen

Enumeration
  #frm0
  #frmask
  #frmJaNein
  #Font1
  #Font2
  #Font3
  #Font4
  #Frame3D_0
  #cmdL1
  #cmdL2
  #cmdL3
  #cmdL4
  #cmdL5
  #txtSkanner
  #cmdGross
  #cmdsuche
  #cmdtools
  #Frame3D_1
  #grdLager
  #lblFach
  #lblPalette
  #lblPaletteninfo
  #cmdschmal
  #cmdbreit
  #cmdcancelbreit
  #cmdJA
  #cmdNEIN
EndEnumeration

Declare.w breite()

Procedure Open_frm0()
  If LoadFont(#Font1, "Arial", 12)
    SetGadgetFont(#PB_Default, FontID(#Font1))
  EndIf
  If OpenWindow(#frm0, 0, 0, 750, 520, "Lagersystem", #PB_Window_MinimizeGadget | #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
    If CreateGadgetList(WindowID(#frm0))
      Frame3DGadget(#Frame3D_0, 10, 10, 720, 120, "Regal")
      ButtonGadget(#cmdL1, 20, 40, 140, 80, "1", #PB_Button_Default | #PB_Button_Toggle)
      ButtonGadget(#cmdL2, 160, 40, 140, 80, "2", #PB_Button_Default | #PB_Button_Toggle)
      ButtonGadget(#cmdL3, 300, 40, 140, 80, "3", #PB_Button_Default | #PB_Button_Toggle)
      ButtonGadget(#cmdL4, 440, 40, 140, 80, "4", #PB_Button_Default | #PB_Button_Toggle)
      ButtonGadget(#cmdL5, 580, 40, 140, 80, "5", #PB_Button_Default | #PB_Button_Toggle)
      TextGadget(#lblPalette, 10, 140, 170, 60, "Skanner")
      StringGadget(#txtSkanner, 100, 140, 370, 65, "", #PB_String_UpperCase)
      TextGadget(#lblPaletteninfo,10,210,720,40,"Informatioenen zur aktuellen Buchung",#PB_Text_Border )

      If LoadFont(#Font2, "Arial", 40)
        SetGadgetFont(#txtSkanner, FontID(#Font2))

      EndIf
      If LoadFont(#Font3, "Arial", 20)
        SetGadgetFont(#cmdL1, FontID(#Font3))
        SetGadgetFont(#cmdL2, FontID(#Font3))
        SetGadgetFont(#cmdL3, FontID(#Font3))
        SetGadgetFont(#cmdL4, FontID(#Font3))
        SetGadgetFont(#cmdL5, FontID(#Font3))
        SetGadgetFont(#cmdGross, FontID(#Font3))
        SetGadgetFont(#cmdsuche, FontID(#Font3))
        SetGadgetFont(#lblPaletteninfo, FontID(#Font3))
      EndIf
      SetActiveGadget(#txtSkanner)
    EndIf
  EndIf
EndProcedure


Procedure.w breite()
  Protected returnwert.w = 0
  If OpenWindow(#frmask,0,0,600,100,"Palettenart", #PB_Window_WindowCentered,WindowID(#frm0))
    If CreateGadgetList(WindowID(#frmask))
      ButtonGadget(#cmdschmal,5,5,190,90,"SCHMAL")
      ButtonGadget(#cmdbreit,205,5,190,90,"BREIT")
      ButtonGadget(#cmdcancelbreit,405,5,190,90,"ABBRUCH")
      If LoadFont(#Font3, "Arial", 20)
        SetGadgetFont(#cmdschmal, FontID(#Font3))
        SetGadgetFont(#cmdbreit, FontID(#Font3))
        SetGadgetFont(#cmdcancelbreit, FontID(#Font3))
      EndIf
    EndIf
  EndIf
  Repeat ; Start of the event loop

    Event = WaitWindowEvent() ; This line waits until an event is received from Windows
    GadgetID = EventGadget() ; Is it a gadget event?

    ;You can place code here, and use the result as parameters for the procedures

    If Event = #PB_Event_Gadget
      If GadgetID = #cmdbreit
        returnwert.w = 2
      EndIf
      If GadgetID = #cmdschmal
        returnwert.w = 1
      EndIf
      If GadgetID = #cmdcancelbreit
        returnwert.w = 99
      EndIf

    EndIf
  Until returnwert.w > 0 ; End of the event loop
  CloseWindow(#frmask)
  ProcedureReturn returnwert
EndProcedure
Open_frm0()

Repeat ; Start of the event loop

  Event = WaitWindowEvent(); This line waits until an event is received from Windows

  WindowID = EventWindow(); The Window where the event is generated, can be used in the gadget procedures

  GadgetID = EventGadget(); Is it a gadget event?

  EventType = EventType(); The event type

  ;You can place code here, and use the result as parameters for the procedures

  If Event = #PB_Event_Gadget
    doexecute.w = 0
    If GadgetID = #cmdL1
      breite()
    ElseIf GadgetID = #cmdL2

    ElseIf GadgetID = #cmdL3

    ElseIf GadgetID = #cmdL4

    ElseIf GadgetID = #cmdL5

    ElseIf GadgetID = #cmdGross
      If GetGadgetState(#cmdGross)= 0
        SetGadgetText(#cmdGross,"SCHMAL ( 1 FACH )")
        CurBreit = 0
      Else
        SetGadgetText(#cmdGross,"BREIT ( 1,5 FÄCHER )")
        CurBreit = 1
      EndIf

    ElseIf GadgetID = #txtSkanner

    EndIf

  EndIf

Until Event = #PB_Event_CloseWindow; End of the event loop

End
codetags hinzugefügt - ts
Purebasic V.4.20 Windows 2000 SP 4
Purebasic V 4.20 Linux 2.6.15-25-686 #1 SMP
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

Beitrag von ts-soft »

So ganz weiß ich nicht was passieren soll, aber:
Pack mal die Ereignisbehandlung von "breite" in das normale Eventloop,
das Hauptfenster kann keinerlei Ereignisse abarbeiten und nichts richtig
darstellen. Andere Möglichkeit wäre es das Hauptfenster zu deaktivieren,
was wohl nicht Dein Wunsch ist?

WindowID speicherste ja bereits in einer variable, die brauchste um beim
#PB_Event_CloseWindow zu entscheiden ob Fenster "breite" dieses
schließen, oder Fenster Main, dann beenden.

Wenn Du es umgestellt hast, sehen wir mal weiter, mit den 2 Eventloops
geht es nicht, weil ein Fenster Tod :mrgreen: ist.

PS: nächste mal bitte Code Tags setzen
[ Code ] dein code [ /Code]
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
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

>codetags hinzugefügt - ts
<3 danke TS

Code: Alles auswählen

CloseWindow(#frmask)
SetGadgetFont(#lblPaletteninfo, FontID(#Font3))
Das löst das Problem auf jedenfall optisch, kann's mir nur so erklären das dein SetGadgetFont() vom Hauptfenster, durch das darüber erstellten Fenster "Palettenart" überlagert bzw ungültig wird.
Das gleiche beim toggeln der Buttons, durch das Event beim toggeln scheint auch hier das SetGadgetFont() überlagert zu werden...
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

ich weiß nicht, woran es letztendlich liegt, aber wenn Du für Dein
breite-Fenster einen anderen Font als #Font3 wählst, dann klappt es.

Code: Alles auswählen

Procedure.w breite()
[...]
      If LoadFont(#Font4, "Arial", 20)
        SetGadgetFont(#cmdschmal, FontID(#Font4))
        SetGadgetFont(#cmdbreit, FontID(#Font4))
        SetGadgetFont(#cmdcancelbreit, FontID(#Font4))
      EndIf
[...]
Wie gesagt: so richtig kenne ich mich mit dem Verstellen von Gadgetfonts
nicht aus. Ich nehme immer die Standardschriftarten (meine Kunden sind
i.d.R. nicht kurzsichtig ;-) ).

Außerdem solltest Du Dir angewöhnen immer nur eine Event-Schleife zu
verwenden.

Grüße ... Kiffi
a²+b²=mc²
rolf
Beiträge: 17
Registriert: 18.01.2005 17:00

Beitrag von rolf »

Vielen Dank für die Antworten.
Ich werde das mal Umstellen und nur eine Ereignissschleife verwenden.
Gruß
Rolf
Purebasic V.4.20 Windows 2000 SP 4
Purebasic V 4.20 Linux 2.6.15-25-686 #1 SMP
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

[OT]

@rolf: Kann das sein, dass du von VB auf PB umsteigst? cmd, lbl und frm kommen mir sehr bekannt vor :wink:

[/OT]
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Antworten