Page 1 sur 2

Mesurer...

Publié : sam. 26/déc./2009 15:35
par zaphod
Salut à tous,

Bonnes fêtes de fin d'année !

Une petite application qui affiche une règle pour mesurer sur l'écran (en cm, en inch et en pixels).
S'adapte à la résolution de l'écran.
C'est en pb 4.40.
J'ai testé sous XP et vista.
La fenêtre est redimensionnable.

Code : Tout sélectionner

;///////////////////////////////
; Mesure 1.2 : 29/12/2009 - by Z@ph0d
; PB 4.40
;///////////////////////////////
EnableExplicit
;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Button_0
  #text_1
  #text_2
  #combo_1
 ; #option_2
 ; #option_3
 ; #option_4
  #trackbar_0
  #checkbox_0
EndEnumeration
;}
;
;}
;
Procedure.i gettpp(f.i)
Protected hdc.i,r.i
;
hdc=GetDC_(GetDesktopWindow_())
If f=0
r= 1440/GetDeviceCaps_(hdc,#LOGPIXELSX)
Else
r= 1440/GetDeviceCaps_(hdc,#LOGPIXELSY)
EndIf
ReleaseDC_(GetDesktopWindow_(),hdc)
;
ProcedureReturn r
EndProcedure

Procedure ruler()
Protected  px.i,py.i,i.i,x.i,w.i,f.i
    ;
    UpdateWindow_(WindowID(#window_0))
;    SendMessage_(WindowID(#window_0), #WM_SETREDRAW, #True, 0)
    ;
    f=GetGadgetState(#combo_1)
    Select f
    Case 0
    w=1440/2.54+1
    Case 1
    w=1440
    EndSelect
    ;
    px= (w/gettpp(0))/10
    py= (w/gettpp(1))/10
    ;
    x=0
    
    ;   
    StartDrawing(WindowOutput(#window_0))
    DrawingFont(FontID(1))
    ;
    If f<>2
    For i=0 To WindowWidth(#window_0) 
    If i%10=0
    Line(x,0,1,10)
    DrawText(x-2,12,Str(i/10),#Black,#White) 
    Line(x,WindowHeight(#window_0)-1,1,-10)
    DrawText(x-2,WindowHeight(#window_0)-20,Str(i/10),#Black,#White) 
    ElseIf i%5=0
    Line (x,0,1,5)
    Line(x,WindowHeight(#window_0)-1,1,-5)
    Else
    Line(x,0,1,2)
    Line (x,WindowHeight(#window_0)-1,1,-2)
    EndIf
    ;
    x+px
    Next
    Else
    For i=0 To WindowWidth(#window_0) 
    If i%20=0
    Line(x,0,1,10)
    DrawText(x-2,12,Str(x),#Black,#White) 
    Line(x,WindowHeight(#window_0)-1,1,-10)
    DrawText(x-2,WindowHeight(#window_0)-20,Str(x),#Black,#White) 
    ElseIf i%10=0
    Line (x,0,1,5)
    Line(x,WindowHeight(#window_0)-1,1,-5)
    Else
    ;Line(x,0,1,2)
    ;Line (x,WindowHeight(#window_0)-1,1,-2)
    EndIf
    ;
    x+1
    Next
    EndIf
    ;
    x=30
    If f<>2
    For i=0 To WindowHeight(#window_0) 
    If i%10=0
    Line(1,x,10,1)
    DrawText(15,x-5,Str(i/10),#Black,#White) 
    Line(WindowWidth(#window_0)-1,x,-10,1)
    DrawText(WindowWidth(#window_0)-20,x-5,Str(i/10),#Black,#White) 
    ElseIf i%5=0
    Line (1,x,5,1)
    Line(WindowWidth(#window_0)-1,x,-5,1)
    Else
    Line(1,x,2,1)
    Line (WindowWidth(#window_0)-1,x,-2,1)
    EndIf
    ;
    x+py
    If x>WindowHeight(#window_0)-30
    Break
    EndIf
    Next
    Else
    For i=0 To WindowHeight(#window_0) 
    If i%20=0
    Line(1,x,10,1)
    DrawText(15,x-5,Str(x-30),#Black,#White) 
    Line(WindowWidth(#window_0)-1,x,-10,1)
    DrawText(WindowWidth(#window_0)-20,x-5,Str(x-30),#Black,#White) 
    ElseIf i%10=0
    Line (1,x,5,1)
    Line(WindowWidth(#window_0)-1,x,-5,1)
    Else
    ;Line(1,x,2,1)
    ;Line (WindowWidth(#window_0)-1,x,-2,1)
    EndIf
    ;
    x+1
    If x>WindowHeight(#window_0)-30
    Break
    EndIf
    Next
    EndIf
    ;
    StopDrawing()

EndProcedure


Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 450, 200, 400, 100, "Règle - by Z@ph0d - 2009", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
  ;transparence:
SetWindowLong_(WindowID(#window_0), #GWL_EXSTYLE, GetWindowLong_(WindowID(#window_0), #GWL_EXSTYLE) | #WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(#window_0), 0, 200, #LWA_ALPHA)
  
    TextGadget(#Text_1, 30, 30, 70, 20, "Transparence", #PB_Text_Border)
    TrackBarGadget(#TrackBar_0, 20, 45, 150, 30, 150, 255);, #PB_TrackBar_Ticks)
    SetGadgetState(#trackbar_0,230)
     ComboBoxGadget(#Combo_1, 150, 30, 70, 20)
     AddGadgetItem(#combo_1, -1,"cm")
     AddGadgetItem(#combo_1, -1,"inch")
     AddGadgetItem(#combo_1, -1,"pixel")
    ;OptionGadget(#Option_2, 110, 30, 30, 15, "cm")
    SetGadgetState(#combo_1,0)
    ;OptionGadget(#Option_3, 150, 30, 40, 15, "inch")
    ;OptionGadget(#Option_4, 190, 30, 40, 15, "pixel")
    ButtonGadget(#Button_0, 320, 30, 50, 20, "Quitter")
    ;TextGadget(#Text_2, 200, 60, 120, 20, "by Z@ph0d-2009", #PB_Text_Center|#PB_Text_Border)
    CheckBoxGadget(#CheckBox_0, 240, 32, 80, 15, "Premier plan")
    ;
    ;WindowBounds(#window_0,400,100,#PB_Ignore,#PB_Ignore)
    ;
    LoadFont(1, "small font", 6) 
   ruler()
    
  EndIf
EndProcedure

;////////////////////////////////////////
;
OpenWindow_Window_0()
SmartWindowRefresh(#window_0,1)
Define t.i
;

;{- Event loop
Repeat
  Select WaitWindowEvent()
    ; ///////////////////
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
        CloseWindow(#window_0)
        Break
        Case #trackbar_0
        SetLayeredWindowAttributes_(WindowID(#window_0), 0, GetGadgetState(#trackbar_0), #LWA_ALPHA)
      ;Case #option_2,#option_3,#option_4
          
      Case #combo_1
      If EventType()=#CBN_SELCHANGE
      InvalidateRect_(WindowID(#Window_0), 0, 1)
          ruler()
      EndIf
      Case #checkbox_0
      If GetGadgetState(#checkbox_0)
      StickyWindow(#window_0,1)
      Else
      StickyWindow(#window_0,0)
      EndIf
      ; 
      EndSelect
    ; ////////////////////////
    Case #WM_KEYDOWN
    If GetAsyncKeyState_(#VK_SHIFT)
    t=10
    Else
    t=1
    EndIf
    ;    
    Select EventwParam()
    Case #VK_UP
    ResizeWindow(#window_0,#PB_Ignore,WindowY(#window_0)-t,#PB_Ignore,#PB_Ignore)
    Case #VK_DOWN
    ResizeWindow(#window_0,#PB_Ignore,WindowY(#window_0)+t,#PB_Ignore,#PB_Ignore)
    Case #VK_LEFT
    ResizeWindow(#window_0,WindowX(#window_0)-t,#PB_Ignore,#PB_Ignore,#PB_Ignore)
    Case #VK_RIGHT
    ResizeWindow(#window_0,WindowX(#window_0)+t,#PB_Ignore,#PB_Ignore,#PB_Ignore)
    EndSelect    
     Case #WM_SIZE
     InvalidateRect_(WindowID(#Window_0), 0, 1)
     ruler()
     SetWindowTitle(#window_0,"Règle : W:"+Str(WindowWidth(#window_0))+"/H:"+Str(WindowHeight(#window_0)))
     Case #WM_LBUTTONDOWN 
      SendMessage_(WindowID(#window_0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0) 

    
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window_0
          CloseWindow(#Window_0)
          Break
      EndSelect
  EndSelect
ForEver
;
;}

Code mis à jour le 27/12/09 pour mesurer en pixels.
Code mis à jour le 29/12/09 pour bouger la fenêtre au clavier (touches de direction +/-shift)

Re: mesurer...

Publié : sam. 26/déc./2009 16:24
par venom
pas mal du tout ce programme 8)
je pense que cela pourrais être utile dans un éditeur tableur 8)
bien jouer






@++

Re: mesurer...

Publié : sam. 26/déc./2009 16:32
par Ar-S
Voilà qui va faire plaisir à MLD, y'a plus qu'à ajouter la mesure en pixel.
Bravo et merci

Re: mesurer...

Publié : sam. 26/déc./2009 17:58
par Kwai chang caine
Elle est splendide cette regle 8O
Bravo et merci du partage 8)

Effectivement vous vous etes passé le mot pour les regles...un qui cherche...l'autre qui propose 8O

C'est peut etre que en ce moment on a besoin de regles pour decouper et mesurer le papier cadeau :lol:

Encore bravo 8)

Re: mesurer...

Publié : sam. 26/déc./2009 21:49
par jbernard13
trés belle régle pour faire un soft dessin j'aime bien ... :P :P

Re: mesurer...

Publié : dim. 27/déc./2009 0:38
par GeBonet
Superbe, :lol: :lol:
Et je me joins à Ar-S, pour l'option pixels... :wink:
(Ligne au milieu en croix Horiz./Vert. par exemple et constante) :roll:
_____________________________________________________________
Demandez aux dieux l'impossible, les bêtises on s'en chargent !!! :oops:

Re: mesurer...

Publié : dim. 27/déc./2009 8:44
par MLD
Bonjour zaphod

Merci pour ta superbe règle, et le partage de ton code.
Comme les autres, je vais te demander : Tu peux pas nous le faire un peu plus long le code Mr Zaphod, avec des pixels. :oops:
Encore merci du partage et Bonnes fêtes de fin d'année pour toi, et tous les amis du forum. :lol:
Michel

Re: Mesurer...

Publié : dim. 27/déc./2009 9:52
par zaphod
Salut tous,

Merci de vos encouragements.

Je suis impressioné de voir que KCC à pu faire tourner mon petit programme sans trouver de bugs... :lol:

J'ai ajouté la mesure en pixels.
Voir le premier post.

Re: Mesurer...

Publié : dim. 27/déc./2009 11:06
par Kwai chang caine
C'est vrai ça 8O
J'crois que t'es le premier :lol:

Re: Mesurer...

Publié : dim. 27/déc./2009 11:21
par Anonyme2
Très bon,

juste la combo de choix des cm/pixel à réduire car elle rentre en conflit avec le trackbar.

Re: Mesurer...

Publié : dim. 27/déc./2009 11:39
par GeBonet
Ben voilà,
Vite fait, bien fait... Les pixels en plus !
Que demande le peuple ? :lol:
Que donner des Merci...

Re: Mesurer...

Publié : dim. 27/déc./2009 13:34
par MLD
Super. Merci Mr Zaphod tu es un CHEF.
Michel

Re: Mesurer...

Publié : dim. 27/déc./2009 23:12
par Le psychopathe
j'adore ^^

Re: Mesurer...

Publié : mar. 29/déc./2009 18:28
par DominiqueB
Merci pour cette règle.

une option possible serait de pouvoir déplacer au pixel près la règle grâce aux flèches gauche droite haut bas.
Ainsi pour positionner la règle et commencer à mesurer un élément à l'écran cela serait plus facile. Et pour les déplacements plus importants utiliser ensembles la touche ctrl + flèche qui ferait alors un déplacement non plus au pixel près mais aux 10 pixels près.

Merci pour cette appli sympa.

Dominique

Re: Mesurer...

Publié : mar. 29/déc./2009 20:40
par zaphod
Salut tous,
Une petite mise à jour pour bouger la fenêtre en utilisant le clavier (flèches) et touche shift pour déplacer de 10 pixels.
Voir premier post.