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

Anfängerfragen zum Programmieren mit PureBasic.
Klangtaucher
Beiträge: 19
Registriert: 23.01.2024 17:50
Computerausstattung: Win 07: Um damit rumzuspielen oder zu arbeiten
Win 10 & 11: Um mich zu ärgern
Linux Mint: Um das Internet zu besuchen

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

Beitrag 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
DePe
Beiträge: 194
Registriert: 26.11.2017 16:17

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

Beitrag 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
Klangtaucher
Beiträge: 19
Registriert: 23.01.2024 17:50
Computerausstattung: Win 07: Um damit rumzuspielen oder zu arbeiten
Win 10 & 11: Um mich zu ärgern
Linux Mint: Um das Internet zu besuchen

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

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

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

Beitrag 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
a²+b²=mc²
Klangtaucher
Beiträge: 19
Registriert: 23.01.2024 17:50
Computerausstattung: Win 07: Um damit rumzuspielen oder zu arbeiten
Win 10 & 11: Um mich zu ärgern
Linux Mint: Um das Internet zu besuchen

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

Beitrag 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.
Antworten