Mesurer...

Programmation d'applications complexes
zaphod
Messages : 135
Inscription : dim. 07/déc./2008 9:32

Mesurer...

Message 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)
Dernière modification par zaphod le mar. 29/déc./2009 20:37, modifié 2 fois.
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: mesurer...

Message par venom »

pas mal du tout ce programme 8)
je pense que cela pourrais être utile dans un éditeur tableur 8)
bien jouer






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: mesurer...

Message par Ar-S »

Voilà qui va faire plaisir à MLD, y'a plus qu'à ajouter la mesure en pixel.
Bravo et merci
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: mesurer...

Message 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)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Re: mesurer...

Message par jbernard13 »

trés belle régle pour faire un soft dessin j'aime bien ... :P :P
Jbernard13
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Re: mesurer...

Message 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:
Windows 7 et Windows 8.1 Pb 5.0 jusque 5.24 Lts 64 et 5.3 (64)/b]
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: mesurer...

Message 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
zaphod
Messages : 135
Inscription : dim. 07/déc./2008 9:32

Re: Mesurer...

Message 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.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Mesurer...

Message par Kwai chang caine »

C'est vrai ça 8O
J'crois que t'es le premier :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Mesurer...

Message par Anonyme2 »

Très bon,

juste la combo de choix des cm/pixel à réduire car elle rentre en conflit avec le trackbar.
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Re: Mesurer...

Message par GeBonet »

Ben voilà,
Vite fait, bien fait... Les pixels en plus !
Que demande le peuple ? :lol:
Que donner des Merci...
Windows 7 et Windows 8.1 Pb 5.0 jusque 5.24 Lts 64 et 5.3 (64)/b]
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Mesurer...

Message par MLD »

Super. Merci Mr Zaphod tu es un CHEF.
Michel
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Re: Mesurer...

Message par Le psychopathe »

j'adore ^^
DominiqueB
Messages : 47
Inscription : sam. 01/mai/2004 14:41

Re: Mesurer...

Message 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
Dominique
zaphod
Messages : 135
Inscription : dim. 07/déc./2008 9:32

Re: Mesurer...

Message 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.
Répondre