Savoir si le mode de visibilité Windows est modifié...
Savoir si le mode de visibilité Windows est modifié...
Bonjour
Pour mon petit programme de contrôle DMX512 j’utilise des police de caractère Windows. Le problème est que si le mode de visibilité Windows change, la taille des polices est modifiée. Alors j’ai fait une petite routine pour savoir si le mode est modifié ou non (en test).
Voir Ici > http://www.koakdesign.info/news/?url=4d&val=43
Mesa > pourais tu me dire ce que dit la fontion dans ton cas, Merci d'avance.
Cordialement,
GallyHC
Pour mon petit programme de contrôle DMX512 j’utilise des police de caractère Windows. Le problème est que si le mode de visibilité Windows change, la taille des polices est modifiée. Alors j’ai fait une petite routine pour savoir si le mode est modifié ou non (en test).
Voir Ici > http://www.koakdesign.info/news/?url=4d&val=43
Mesa > pourais tu me dire ce que dit la fontion dans ton cas, Merci d'avance.
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Savoir si le mode de visibilité Windows est modifié...
Cela ne dit pas si le code detecte le changement 
Et voila un code simple pour connaitre le mode ppp
A tester pour etre sur ...
Pouvez-vous me donner le nombre perso standard (96 ppp)
Cordialement,
GallyHC

Et voila un code simple pour connaitre le mode ppp
Code : Tout sélectionner
Define lhDC.l = GetDC_(#Null)
Define lPpp.l = GetDeviceCaps_(lhDC, 88)
Define lres.l = ReleaseDC_(#Null, lhDC)
Debug "Mode à " + Str(lPpp) + " ppp"
Pouvez-vous me donner le nombre perso standard (96 ppp)
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Savoir si le mode de visibilité Windows est modifié...
bonjour GallyHC
peut être une solution utiliser un scrollareagadget avec le code de Stargate joint
cordialement
peut être une solution utiliser un scrollareagadget avec le code de Stargate joint
cordialement
Code : Tout sélectionner
;
; !! PureBasic 4.60 !!
;http://www.purebasic.fr/german/viewtopic.php?f=3&t=24527
Enumeration
#Window
EndEnumeration
Enumeration
#Gadget
#Scroll
EndEnumeration
EnableExplicit
Structure Appointment
TimeStamp.i ; in Sekunden
Length.i ; in Stunden
Color.i
Text.s
EndStructure
Global NewList Appointment.Appointment()
Procedure AddAppointment(TimeStamp.i, Length.i, Color.i, Text.s)
AddElement(Appointment())
Appointment()\TimeStamp = TimeStamp - TimeStamp%3600
Appointment()\Length = Length
If Hour(Appointment()\TimeStamp) + Length > 24
Appointment()\Length = 24-Hour(Appointment()\TimeStamp)
EndIf
Appointment()\Color = Color
Appointment()\Text = Text
EndProcedure
#HeaderWidth = 64
#HeaderHeight = 32
Procedure DrawCanvasContent(Gadget.i)
Protected DayWidth.i, HourHeight.i, Text.s
Protected Date = Date() : Date - Date%(24*60*60)
Protected Day.i, Hour.i, X.i, Y.i
StartDrawing(CanvasOutput(Gadget))
Box(0, 0, OutputWidth(), OutputHeight(), $FFFFFF)
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
DayWidth = (OutputWidth()-#HeaderWidth)/7
HourHeight = (OutputHeight()-#HeaderHeight)/24
Box(0, 0, OutputWidth(), #HeaderHeight, $FFF0F0F0)
Box(0, #HeaderHeight, #HeaderWidth, OutputHeight()-#HeaderHeight, $FFF0F0F0)
For Day = 0 To 6
X = Day*DayWidth+#HeaderWidth
Line(X, 0, 1, OutputHeight(), $FFD0D0D0)
Text = FormatDate("%dd.%mm.", Date+Day*24*60*60)
DrawText(X+DayWidth*0.5-TextWidth(Text)*0.5, #HeaderHeight*0.5-TextHeight(Text)*0.5, Text, $FFC0C0C0)
Next
For Hour = 0 To 23
Y = Hour*HourHeight+#HeaderHeight
Line(0, Y, OutputWidth(), 1, $FFD0D0D0)
If Hour % 2 = 0
Text = RSet(Str(Hour),2,"0")+" Uhr"
DrawText(#HeaderWidth*0.5-TextWidth(Text)*0.5, Y, Text, $FFC0C0C0)
EndIf
Next
ForEach Appointment()
With Appointment()
Day = DayOfYear(\TimeStamp)-DayOfYear(Date)
Hour = Hour(\TimeStamp)
X = Day*DayWidth+#HeaderWidth
Y = Hour*HourHeight+#HeaderHeight
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
RoundBox(X+2, Y+2, DayWidth-3, \Length*HourHeight-3, 8, 8, \Color&$FFFFFF|$80<<24)
DrawText(X+DayWidth*0.5-TextWidth(\Text)*0.5, Y+4, \Text, \Color&$FFFFFF|$FF<<24)
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Outlined)
RoundBox(X+2, Y+2, DayWidth-3, \Length*HourHeight-3, 8, 8, \Color&$FFFFFF|$80<<24)
EndWith
Next
StopDrawing()
EndProcedure
Procedure CanvasContentEvent(Gadget.i, EventType.i)
Static *ActiveAppointment.Appointment
Static ShiftY.i, SaveLength.i, SaveTimeStamp.i
Protected DayWidth.i, HourHeight.i, Text.s, TimeStamp.i
Protected Date = Date() : Date - Date%(24*60*60)
Protected Day.i, Hour.i, X.i, Y.i, Length.i
Protected MouseX.i = GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)
Protected MouseY.i = GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)
Protected *Appointment.Appointment
Static Mode = #Null
StartDrawing(CanvasOutput(Gadget))
DayWidth = (OutputWidth()-#HeaderWidth)/7
HourHeight = (OutputHeight()-#HeaderHeight)/24
StopDrawing()
If *ActiveAppointment = #Null
ForEach Appointment()
With Appointment()
Day = DayOfYear(\TimeStamp)-DayOfYear(Date)
Hour = Hour(\TimeStamp)
X = Day*DayWidth+#HeaderWidth
Y = Hour*HourHeight+#HeaderHeight
Length = \Length*HourHeight
If MouseX > X And MouseX < X+DayWidth And MouseY > Y And MouseY < Y+Length
*Appointment = @Appointment()
ShiftY = (MouseY-Y)/HourHeight
If MouseY < Y+8 : Mode = -1 : ElseIf MouseY > Y+Length-8 : Mode = 1 : Else : Mode = 0 : EndIf
EndIf
EndWith
Next
If *Appointment
Select Mode
Case 0 : SetGadgetAttribute(Gadget, #PB_Canvas_Cursor, #PB_Cursor_Arrows)
Case -1, 1 : SetGadgetAttribute(Gadget, #PB_Canvas_Cursor, #PB_Cursor_UpDown)
EndSelect
If EventType = #PB_EventType_LeftButtonDown
*ActiveAppointment = *Appointment
SaveTimeStamp = *ActiveAppointment\TimeStamp
SaveLength = *ActiveAppointment\Length
EndIf
Else
SetGadgetAttribute(Gadget, #PB_Canvas_Cursor, #PB_Cursor_Default)
EndIf
EndIf
If EventType = #PB_EventType_LeftButtonUp
*ActiveAppointment = #Null
EndIf
If *ActiveAppointment And EventType = #PB_EventType_MouseMove
Select Mode
Case 0
Day = (MouseX-#HeaderWidth)/DayWidth
If Day < 0 : Day = 0 : ElseIf Day > 6 : Day = 6 : EndIf
Hour = (MouseY-#HeaderHeight)/HourHeight-ShiftY
If Hour < 0 : Hour = 0 : ElseIf Hour+*ActiveAppointment\Length > 23 : Hour = 24-*ActiveAppointment\Length : EndIf
*ActiveAppointment\TimeStamp = Date
*ActiveAppointment\TimeStamp = AddDate(*ActiveAppointment\TimeStamp, #PB_Date_Day, Day)
*ActiveAppointment\TimeStamp = AddDate(*ActiveAppointment\TimeStamp, #PB_Date_Hour, Hour)
Case -1
Day = DayOfYear(SaveTimeStamp)-DayOfYear(Date)
Hour = (MouseY-#HeaderHeight)/HourHeight
If Hour < 0 : Hour = 0 : ElseIf Hour > 23 : Hour = 23 : EndIf
*ActiveAppointment\TimeStamp = Date
*ActiveAppointment\TimeStamp = AddDate(*ActiveAppointment\TimeStamp, #PB_Date_Day, Day)
*ActiveAppointment\TimeStamp = AddDate(*ActiveAppointment\TimeStamp, #PB_Date_Hour, Hour)
*ActiveAppointment\Length = SaveLength - (*ActiveAppointment\TimeStamp-SaveTimeStamp)/60/60
If *ActiveAppointment\Length < 1
*ActiveAppointment\TimeStamp - 1 + *ActiveAppointment\Length*60*60
*ActiveAppointment\Length = 1
EndIf
Case 1
Day = DayOfYear(SaveTimeStamp)-DayOfYear(Date)
Hour = (MouseY-#HeaderHeight)/HourHeight
If Hour < 0 : Hour = 0 : ElseIf Hour > 23 : Hour = 23 : EndIf
TimeStamp = Date
TimeStamp = AddDate(TimeStamp, #PB_Date_Day, Day)
TimeStamp = AddDate(TimeStamp, #PB_Date_Hour, Hour)
*ActiveAppointment\Length = 1+(TimeStamp-SaveTimeStamp)/60/60
If *ActiveAppointment\Length < 1
*ActiveAppointment\Length = 1
EndIf
EndSelect
DrawCanvasContent(Gadget)
EndIf
EndProcedure
Define n.i
OpenWindow(#Window, 0, 0, 589, 632, "Fenster",#PB_Window_ScreenCentered| #PB_Window_MinimizeGadget | #PB_Window_SizeGadget)
ScrollAreaGadget(#Scroll, 0, 0,WindowWidth(#Window),WindowHeight(#Window),WindowWidth(#Window)*2,WindowHeight(#Window)*2,30)
SetGadgetColor(#Scroll,#PB_Gadget_BackColor,#White)
SetGadgetAttribute(#Scroll,#PB_ScrollArea_X,0)
SetGadgetAttribute(#Scroll,#PB_ScrollArea_Y,0)
CanvasGadget(#Gadget, 0, 0, WindowWidth(#Window), WindowHeight(#Window))
RandomSeed(1)
For n = 1 To 10
AddAppointment(Date()+Random(6*24*60*60), Random(6)+1, RGB(Random($80),Random($80),Random($80)), "Termin "+Str(n))
Next
DrawCanvasContent(#Gadget)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #Gadget
CanvasContentEvent(#Gadget, EventType())
EndSelect
Case #PB_Event_SizeWindow
ResizeGadget(#Scroll,#PB_Ignore,#PB_Ignore,WindowWidth(#Window),WindowHeight(#Window))
EndSelect
ForEver
Dernière modification par kernadec le mar. 07/févr./2012 14:14, modifié 1 fois.
Re: Savoir si le mode de visibilité Windows est modifié...
Bonjour et merci,
En tout cas je viens de decourir l'utilité du gadget "CanvasGadget()". Il sera plus adapte a ce que je voudrais faire, Pt1 maintenant j'ai tout a modifier lolll mais merci tout de même
Cordialement,
GallyHC
En tout cas je viens de decourir l'utilité du gadget "CanvasGadget()". Il sera plus adapte a ce que je voudrais faire, Pt1 maintenant j'ai tout a modifier lolll mais merci tout de même

Cordialement,
GallyHC
Dernière modification par GallyHC le mar. 07/févr./2012 14:18, modifié 1 fois.
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Savoir si le mode de visibilité Windows est modifié...
pardon, je me suis trompé de code...
voiçi, celui ou j'avais un ajouter le scrollarea .
voiçi, celui ou j'avais un ajouter le scrollarea .

Re: Savoir si le mode de visibilité Windows est modifié...
Le petit code fonctionne.
Il m'affiche : Mode à 120 ppp
Ce qui est vrai.
Mesa.
Code : Tout sélectionner
Define lhDC.l = GetDC_(#Null)
Define lPpp.l = GetDeviceCaps_(lhDC, 88)
Define lres.l = ReleaseDC_(#Null, lhDC)
Debug "Mode à " + Str(lPpp) + " ppp"
Ce qui est vrai.
Mesa.
Re: Savoir si le mode de visibilité Windows est modifié...
Bonjour Mesa,
Merci pour ce test, Pourrais tu mettre la police à 4 et me dire ou me faire une capture pour voir le resultat.
Cordialement,
GallyHC
Merci pour ce test, Pourrais tu mettre la police à 4 et me dire ou me faire une capture pour voir le resultat.
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Savoir si le mode de visibilité Windows est modifié...
En police 4 ça rentre mais c'est vraiment petit.

Uploaded with ImageShack.us
Avec la police 7 d'origine :

Uploaded with ImageShack.us
Mesa.

Uploaded with ImageShack.us
Avec la police 7 d'origine :

Uploaded with ImageShack.us
Mesa.
Re: Savoir si le mode de visibilité Windows est modifié...
Donc la bonne taille est soit 5 ou 6 faut que je trouve encore merci...
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Savoir si le mode de visibilité Windows est modifié...
Je ne pense pas que ce soit la solution car si quelqu'un a mis son écran à 150ppp, il faudrait une police inférieure à 4, juste "pour lui".
Il vaudrait mieux mesurer la taille avec le code de srod : http://www.purebasic.fr/french/viewtopi ... =6&t=12573
et resizer les gadgets en conséquence, ainsi le texte sera correctement ajusté quelque soit les réglages d'écran. Ce sont les gadgets qui s'agrandiront légèrement.
Mesa.
Il vaudrait mieux mesurer la taille avec le code de srod : http://www.purebasic.fr/french/viewtopi ... =6&t=12573
et resizer les gadgets en conséquence, ainsi le texte sera correctement ajusté quelque soit les réglages d'écran. Ce sont les gadgets qui s'agrandiront légèrement.
Mesa.
Re: Savoir si le mode de visibilité Windows est modifié...
Bonjour Mesa,
Je parle de trouve un calcul avec le nombre de ppp pour avoir la taille correcte. Ce logiciel est pour des personnes qui ont en general de bonne vu car on l'utilise souvant dans le noir ou presque
Cordialement,
GallyHC
Je parle de trouve un calcul avec le nombre de ppp pour avoir la taille correcte. Ce logiciel est pour des personnes qui ont en general de bonne vu car on l'utilise souvant dans le noir ou presque

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Savoir si le mode de visibilité Windows est modifié...
J'ai ajouté un bout de code en ligne 104
et là tout rentre...
Mesa.
Code : Tout sélectionner
Define lhDC.l = GetDC_(#Null)
;Define lPpp.l = GetDeviceCaps_(lhDC, 88)
Define lPpp.l = GetDeviceCaps_(lhDC, #LOGPIXELSX)
Define lres.l = ReleaseDC_(#Null, lhDC)
;Debug "Mode à " + Str(lPpp) + " ppp"
zoom.f=96/lPpp; 96 = zoom à 100% par défaut
Police.f=7 ; on choisit la taille de la police
Police=Police*zoom
Police= Int(Police)
;comme c'est un zoom c'est directement proportionnel
Global title.s = "PureLight Ver: " + FullVer
Global FontID1 = LoadFont(#PB_Any, "Arial",Police, #PB_Font_HighQuality | #PB_Font_Bold)
Global lSaveChannel.l
Global lSelcChannel.l
Global levent_key.l
Global levent_mouse.l
Mesa.
Re: Savoir si le mode de visibilité Windows est modifié...
Voila le genre de chose que j'aime bien
merci Mesa.
Cordialement,
GallyHC

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)