PureBasic

Forums PureBasic
Nous sommes le Ven 24/Mai/2013 21:41

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 14 messages ] 
Auteur Message
 Sujet du message: Savoir si le mode de visibilité Windows est modifié...
MessagePosté: Lun 06/Fév/2012 21:35 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 915
Localisation: Nord (France)
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


Haut
 Profil  
 
 Sujet du message: Re: Savoir si le mode de visibilité Windows est modifié...
MessagePosté: Mar 07/Fév/2012 10:23 
Hors ligne

Inscription: Mer 14/Sep/2011 16:59
Messages: 335
Voir ici
http://www.purebasic.fr/french/viewtopic.php?f=3&t=12560

Mesa.


Haut
 Profil  
 
 Sujet du message: Re: Savoir si le mode de visibilité Windows est modifié...
MessagePosté: Mar 07/Fév/2012 10:41 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 915
Localisation: Nord (France)
Cela ne dit pas si le code detecte le changement :)

Et voila un code simple pour connaitre le mode ppp

Code:
Define lhDC.l = GetDC_(#Null)
Define lPpp.l = GetDeviceCaps_(lhDC, 88)
Define lres.l = ReleaseDC_(#Null, lhDC)

Debug "Mode à " + Str(lPpp) + " ppp"


A tester pour etre sur ...

Pouvez-vous me donner le nombre perso standard (96 ppp)

Cordialement,
GallyHC


Haut
 Profil  
 
 Sujet du message: Re: Savoir si le mode de visibilité Windows est modifié...
MessagePosté: Mar 07/Fév/2012 12:01 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 25/Avr/2008 11:14
Messages: 948
bonjour GallyHC
peut être une solution utiliser un scrollareagadget avec le code de Stargate joint

cordialement

Code:
;
;  !! 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 édition par kernadec le Mar 07/Fév/2012 14:14, édité 1 fois.

Haut
 Profil  
 
 Sujet du message: Re: Savoir si le mode de visibilité Windows est modifié...
MessagePosté: Mar 07/Fév/2012 12:44 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 915
Localisation: Nord (France)
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


Dernière édition par GallyHC le Mar 07/Fév/2012 14:18, édité 1 fois.

Haut
 Profil  
 
 Sujet du message: Re: Savoir si le mode de visibilité Windows est modifié...
MessagePosté: Mar 07/Fév/2012 14:16 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 25/Avr/2008 11:14
Messages: 948
pardon, je me suis trompé de code...
voiçi, celui ou j'avais un ajouter le scrollarea . :roll:


Haut
 Profil  
 
 Sujet du message: Re: Savoir si le mode de visibilité Windows est modifié...
MessagePosté: Mar 07/Fév/2012 14:23 
Hors ligne

Inscription: Mer 14/Sep/2011 16:59
Messages: 335
Le petit code fonctionne.
Code:
Define lhDC.l = GetDC_(#Null)
Define lPpp.l = GetDeviceCaps_(lhDC, 88)
Define lres.l = ReleaseDC_(#Null, lhDC)

Debug "Mode à " + Str(lPpp) + " ppp"


Il m'affiche : Mode à 120 ppp
Ce qui est vrai.

Mesa.


Haut
 Profil  
 
 Sujet du message: Re: Savoir si le mode de visibilité Windows est modifié...
MessagePosté: Mar 07/Fév/2012 14:41 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 915
Localisation: Nord (France)
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


Haut
 Profil  
 
 Sujet du message: Re: Savoir si le mode de visibilité Windows est modifié...
MessagePosté: Mer 08/Fév/2012 9:10 
Hors ligne

Inscription: Mer 14/Sep/2011 16:59
Messages: 335
En police 4 ça rentre mais c'est vraiment petit.

Image

Uploaded with ImageShack.us


Avec la police 7 d'origine :
Image

Uploaded with ImageShack.us

Mesa.


Haut
 Profil  
 
 Sujet du message: Re: Savoir si le mode de visibilité Windows est modifié...
MessagePosté: Jeu 09/Fév/2012 16:55 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 915
Localisation: Nord (France)
Donc la bonne taille est soit 5 ou 6 faut que je trouve encore merci...


Haut
 Profil  
 
 Sujet du message: Re: Savoir si le mode de visibilité Windows est modifié...
MessagePosté: Jeu 09/Fév/2012 18:52 
Hors ligne

Inscription: Mer 14/Sep/2011 16:59
Messages: 335
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/viewtopic.php?f=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.


Haut
 Profil  
 
 Sujet du message: Re: Savoir si le mode de visibilité Windows est modifié...
MessagePosté: Ven 10/Fév/2012 11:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 915
Localisation: Nord (France)
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


Haut
 Profil  
 
 Sujet du message: Re: Savoir si le mode de visibilité Windows est modifié...
MessagePosté: Ven 10/Fév/2012 18:02 
Hors ligne

Inscription: Mer 14/Sep/2011 16:59
Messages: 335
J'ai ajouté un bout de code en ligne 104
Code:
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


et là tout rentre...

Mesa.


Haut
 Profil  
 
 Sujet du message: Re: Savoir si le mode de visibilité Windows est modifié...
MessagePosté: Ven 10/Fév/2012 19:31 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 915
Localisation: Nord (France)
Voila le genre de chose que j'aime bien :) merci Mesa.

Cordialement,
GallyHC


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 14 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye