Seite 1 von 1

Textgröße ändert sich, wenn Fenster außerhalb des Bildschirmbereichs geschoben wird

Verfasst: 27.06.2025 12:53
von Klangtaucher
Hallo zusammen

Unter Windows 7 verändert sich die Textgröße (vermutlich auf Default), wenn das Fenster z.B. nach unten mit der Maus verschoben wird, so dass der Fensterinhalt außerhalb des Bildschirm liegt und nur die Fensterleiste noch sichtbar ist. Wird das Fenster wieder nach oben geschoben ist der Text der oberen zwei Zeilen klein dargestellt.

Warum ist dem so ?, Ist das ein Bug oder gibt es einen Befehl, um das Verhalten zu unterbinden ?


Danke

Code: Alles auswählen

  EnableExplicit




Procedure qwertz(a,b, Versatz)


Define Fontsize.l = 18

    If LoadFont(0, "Arial", Fontsize.l)
      SetGadgetFont(#PB_Default, FontID(0))   ; geladenen Arial 16 Zeichensatz als neuen Standard festlegen
    EndIf
    TextGadget(a, 100, 100 + Versatz, 300, 30, "Test 1")

    If LoadFont(1,"Arial", Fontsize.l, #PB_Font_Bold | #PB_Font_Underline)
      SetGadgetFont(#PB_Default, FontID(1))   ; geladenen Courier 10 Zeichensatz als neuen Standard festlegen
    EndIf
    TextGadget(b, 100, 150 + Versatz, 300, 40, "Test 2")

EndProcedure


If OpenWindow(0, 0, 0, 400, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	Define OldGadgetList

	qwertz(1,2,-50)
	qwertz(3,4, 100)

    	Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Re: Textgröße ändert sich, wenn Fenster außerhalb des Bildschirmbereichs geschoben wird

Verfasst: 27.06.2025 15:24
von DePe
Durch den mehrfachen Aufruf von der Prozedur 'qwertz', zerstörst du dir die jeweils geladene Schrift.
Anbei ein Beispiel wie es funktioniert.

Peter

Code: Alles auswählen

Procedure qwertz(a,b, Versatz)
  Static FontNr0.i, FontNr1.i
Define Fontsize.l = 18

    If Not FontNr0
      FontNr0 = LoadFont(#PB_Any, "Arial", Fontsize.l)
    EndIf
	 If FontNr0
	   SetGadgetFont(#PB_Default, FontID(FontNr0))   ; geladenen Arial 16 Zeichensatz als neuen Standard festlegen
	 EndIf
    TextGadget(a, 100, 100 + Versatz, 300, 30, "Test 1")

    If Not FontNr1
      FontNr1 = LoadFont(#PB_Any, "Arial", Fontsize.l, #PB_Font_Bold | #PB_Font_Underline)
    EndIf
    If FontNr1
      SetGadgetFont(#PB_Default, FontID(FontNr1))   ; geladenen Courier 10 Zeichensatz als neuen Standard festlegen
	 EndIf
    TextGadget(b, 100, 150 + Versatz, 300, 40, "Test 2")

EndProcedure

Re: Textgröße ändert sich, wenn Fenster außerhalb des Bildschirmbereichs geschoben wird

Verfasst: 27.06.2025 16:21
von Klangtaucher
Hallo Peter,

-Danke-

Hab's in meinen Code eingebaut und es funktioniert !

Heißt das, dass mein Programm so geschrieben war, das immer nur eine Schrift im Speicher war und wenn diese von der API? nicht gefunden wird, die Standard-Schrift genutzt wird ?
Und mit Static-Anweisung ist es möglich mehrere Schriften (an anderen Adressen ?) im Speicher zu hinterlegen, so dass die API die Schrift beim Fensteraufbau wieder findet ?

Kennst Du was, wo man so ein grundsätzliches Verhalten Anfänger-freundlich nachlesen kann ?

Grüße

Hans-Peter

Re: Textgröße ändert sich, wenn Fenster außerhalb des Bildschirmbereichs geschoben wird

Verfasst: 27.06.2025 17:10
von Kiffi
@Klangtaucher:

Gibt es einen Grund, warum Du die entsprechenden Gadgets nicht direkt angibst (SetGadgetFont(a, ...), SetGadgetFont(b, ...)?

Code: Alles auswählen

Procedure qwertz(a, b, Versatz)

    Protected Fontsize = 18

    TextGadget(a, 100, 100 + Versatz, 300, 30, "Test 1")
    
    If LoadFont(0, "Arial", Fontsize)
      SetGadgetFont(a, FontID(0)) 
    EndIf
    
    TextGadget(b, 100, 150 + Versatz, 300, 40, "Test 2")

    If LoadFont(1,"Arial", Fontsize, #PB_Font_Bold | #PB_Font_Underline)
      SetGadgetFont(b, FontID(1))   ; geladenen Courier 10 Zeichensatz als neuen Standard festlegen
    EndIf

EndProcedure

Re: Textgröße ändert sich, wenn Fenster außerhalb des Bildschirmbereichs geschoben wird

Verfasst: 27.06.2025 17:35
von Klangtaucher
Hi Kiffi,

das Prinzip dient dazu, mit einer Procedure, Text mit tiefgestellten Zeichen auf einem Fenster in TextGadgets zu positionieren. (Erst nach dem ich die Procedure quasi fertig hatte, fiel mir das "unschöne" Verhalten auf.)
Der Procedere kann ich beliebigen Text incl. 2 Positionen mit beliebigen tiefgestellten Zeichen übergeben. Des weiteren werden die Koordinaten, die Schrift, und die Schriftgröße übergeben.

Mit der Procedure kann ich dann "wie wild" Stringketten mit tiefgestellten Zeichen auf einem Fenster positionieren.