ATTENTION FRED NOUS SURVEILLE !!!

Programmation d'applications complexes
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

ATTENTION FRED NOUS SURVEILLE !!!

Message par Backup »

..............
Dernière modification par Backup le mer. 28/sept./2011 9:59, modifié 8 fois.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

:roll: :mrgreen:
Dernière modification par Le Soldat Inconnu le dim. 13/juin/2004 15:15, modifié 1 fois.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

tu devrais calculer l'angle entre la souris et chaque oeil , ça serait encore :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

les yeux sont bien independant ! :)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Ah Ah Ah...ce Dobro alors...... :lol:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

je viens de reediter le prg pour mettre la fenetre au premier plan en permanence (Merci le CODE FR) :)


et le faire plus petit car ça prenais trop de place !! Maintenant il est discret !
:D
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

J'ajouterai bien ça entre le ClearScreen et le Until à la fin :

Code : Tout sélectionner

    If yyd = 50 And yyg = 50 And xyd = 110 And xyg = 50
        hDesktop = GetDesktopWindow_()
        hDC = GetWindowDC_(hDesktop)
        rect.RECT
        rect\right = GetSystemMetrics_(#SM_CXSCREEN)
        rect\bottom = GetSystemMetrics_(#SM_CYSCREEN)
        oldFont = SelectObject_(hDC, LoadFont(23, "Verdana", 128))
        SetBkMode_(hDC, #TRANSPARENT)
        SetTextColor_(hDC, #Red)
        DrawText_(hDC, "Arf !", Len("Arf !"), @rect, #DT_CENTER | #DT_VCENTER | #DT_SINGLELINE)
        SelectObject_(hDC, oldFont)
        ReleaseDC_(hDesktop, hDC)
    EndIf
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

oui j'ai changer mon prog depuis : il est plus petit maintenant

pour que ça marche il faudrai faire


Code : Tout sélectionner

If yyd = 25 And yyg = 25 And xyd = 55 And xyg = 25
        hDesktop = GetDesktopWindow_()
        hDC = GetWindowDC_(hDesktop)
        rect.RECT
        rect\right = GetSystemMetrics_(#SM_CXSCREEN)
        rect\bottom = GetSystemMetrics_(#SM_CYSCREEN)
        oldFont = SelectObject_(hDC, LoadFont(23, "arial", 128))
        SetBkMode_(hDC, #TRANSPARENT)
        SetTextColor_(hDC, #Red)
        DrawText_(hDC, "Arf !", Len("Arf !"), @rect, #DT_CENTER | #DT_VCENTER | #DT_SINGLELINE)
        SelectObject_(hDC, oldFont)
        ReleaseDC_(hDesktop, hDC)
    EndIf 

mais l'ecran ne se renettoie pas tout seul !!!
c'est embetant ! :)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

avec un masque pour enlever le coutour des yeux, c'est cela que tu cherches :?: j'ai pas essayé ton bout de code au dessus mais comme il y a de la transparence, je pense que c'est cela

regarde ceci : (extrait de codes-fr également)

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 3.90
;
; Explication du programme :
; Donner à une fenêtre une forme spécifique. Par exemple faire une fenêtre ronde ou triangulaire.


Enumeration
  #Quitter
  #Forme1
  #Forme2
  #Forme3
  #Forme4
  #Forme5
EndEnumeration



Procedure Forme()
  If GetGadgetState(#Forme1) ; si on a choisi la forme 1
    
    Region = CreateRoundRectRgn_(0, 0, WindowWidth(), WindowHeight(), 40, 60) ; Création de la région pour faire une fenêtre avec les angles arrondis
    ; CreateRoundRectRgn_(X1, Y1, X2, Y2, R1, R2)
    ; X1, Y1 : coordonné du point haut gauche de la region
    ; X1, Y1 : coordonné du point haut gauche de la region
    ; R1, R2 : rayon de l'ellipse qui va servir à arrondir les angles de la region
    SetWindowRgn_(WindowID(), Region, #True) ; On applique la région
    DeleteObject_(Region) ; On supprime la région
    
  ElseIf GetGadgetState(#Forme2) ; si on a choisi la forme 2
    
    Region = CreateEllipticRgn_(0, 0, WindowWidth(), WindowHeight()) ; Création de la région pour faire une fenêtre elliptique
    ; CreateEllipticRgn_(X1, Y1, X2, Y2)
    ; X1, Y1 : coordonné du point haut gauche de la region
    ; X1, Y1 : coordonné du point haut gauche de la region
    SetWindowRgn_(WindowID(), Region, #True) ; On applique la région
    DeleteObject_(Region) ; On supprime la région
    
  ElseIf GetGadgetState(#Forme3) ; si on a choisi la forme 3
    
    Region = CreatePolygonRgn_(?Triangle, 4, #Alternate) ; Création de la région pour faire une fenêtre elliptique
    ; CreateRoundRectRgn_(Array, NbPoints, Type)
    ; Array : Adresse de la liste ou de la Data
    ; NbPoints : Nombre de points du polygone + 1 (car on fait une boucle donc on a 2 fois le premier point)
    ; Type : Voir msdn
    SetWindowRgn_(WindowID(), Region, #True) ; On applique la région
    DeleteObject_(Region) ; On supprime la région
    
  ElseIf GetGadgetState(#Forme4) ; si on a choisi la forme 4
    
    Region1 = CreateRectRgn_(0, 0, WindowWidth(), WindowHeight()) ; Création d'une région en rectangle
    Region2 = CreateRectRgn_(10, 10, WindowWidth() - 10, 50) ; Création d'une région en rectangle
    ; CreateRectRgn_(X1, Y1, X2, Y2)
    ; X1, Y1 : coordonné du point haut gauche de la region
    ; X1, Y1 : coordonné du point haut gauche de la region
    CombineRgn_(Region1, Region1, Region2, #RGN_DIFF) ; On combine les 2 régions
    ; Les modes suivants sont disponibles :
    ; #RGN_AND : Intersection
    ; #RGN_OR : Union
    ; #RGN_DIFF : Différences
    ; #RGN_XOR : Union moins les intersections
    SetWindowRgn_(WindowID(), Region1, #True) ; On applique la région finale
    DeleteObject_(Region1) ; On supprime les régions
    DeleteObject_(Region2)
    
  ElseIf GetGadgetState(#Forme5) ; si on a choisi la forme 5
    
    Region1 = CreatePolygonRgn_(?Triangle, 4, #Alternate)
    Region2 = CreateEllipticRgn_(0, 0, WindowWidth(), WindowHeight())
    CombineRgn_(Region1, Region1, Region2, #RGN_OR) ; On combine les 2 régions
    SetWindowRgn_(WindowID(), Region1, #True) ; On applique la région finale
    DeleteObject_(Region1) ; On supprime les régions
    DeleteObject_(Region2)
    
  EndIf
EndProcedure




; Création de la fenêtre et dela GadgetList
If OpenWindow(0, 0, 0, 400, 400, #PB_Window_Borderless | #PB_Window_ScreenCentered, "Test") = 0 Or CreateGadgetList(WindowID(0)) = 0
  End
EndIf

; Création des boutons et de l'option d'affichage
ButtonGadget(#Quitter, 100, 100, 200, 20, "Quitter")
OptionGadget(#Forme1, 100, 125, 200, 15, "Angles arrondis")
OptionGadget(#Forme2, 100, 140, 200, 15, "Ronde")
OptionGadget(#Forme3, 100, 155, 200, 15, "Triangle")
OptionGadget(#Forme4, 100, 170, 200, 15, "Trouée")
OptionGadget(#Forme5, 100, 185, 200, 15, "Triangle + Rond")


Repeat
  Event = WaitWindowEvent()
  
  If Event = #PB_EventGadget
    Select EventGadgetID() ; boutons, zone de texte, ...
      Case #Quitter
        Event = #PB_EventCloseWindow ; On quitte
      Default
        Forme() ; sinon, on change la forme de la fenêtre
    EndSelect
  EndIf
  
Until Event = #PB_EventCloseWindow

End



DataSection
  Triangle :
    Data.l 200, 400, 0, 0, 400, 0, 200, 400 ; Coordonnées des points du triangle en x, y (il faut faire une boucle donc on revient au premier point du triangle
EndDataSection
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Très bon Dobro, je vais faire attention ... :mrgreen:
garzul
Messages : 683
Inscription : mer. 26/mai/2004 0:33

Message par garzul »

:D cool les gars je ferai jamais comme vous je suis trop bete :roll: :( :!:
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

Amusant! :lol: :lol: :lol:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

@ Le soldat :

Non non je repondais a Fweil qui avait idéee de rajouter ce petit code
a la fin du mien !!
alors j'ai reposté son code legerement modifie pour qu'il s'adapte a "fred"
que j'avais entre temp modifier pour le reduire en taille ..
voila , mis j'ai recupere ton listing pour ma logiteque perso
car je le trouve tres cool Merci .. :D
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Salut,

bon, moi j'ai fait avec l'astuce que je t'ai donné plus haut. me suis bien marrer.

les yeux se déplacent sur l'écran, ils regardent la souris et essayent de l'éviter quand ils se déplacent.

voilà quoi que ça donne :D

Code : Tout sélectionner

#TailleOeil = 12
#TaillePupille = 4
#EspaceOeilPupille = 4
#EspaceEntreYeux = 0

#CentreOeilG = #TailleOeil + #TaillePupille - #EspaceOeilPupille
#CentreOeilD = (#TailleOeil + #TaillePupille - #EspaceOeilPupille) * 3 + #EspaceEntreYeux
#RayonOeil = #TailleOeil - #EspaceOeilPupille

#Cadre = 100
#DistanceMinSouris = 150

#Vitesse = 10
#Avance = 1

Global TailleEcranX.l, TailleEcranY.l, PosX.f, PosY.f, CibleX, CibleY, PosXSave.f, PosYSave.f

TailleEcranX = GetSystemMetrics_(#SM_CXSCREEN)
TailleEcranY = GetSystemMetrics_(#SM_CYSCREEN)

Procedure Yeux()
  ; Position de la souris
  GetCursorPos_(CursorPos.POINT)
  MouseX = CursorPos\x
  MouseY = CursorPos\y
  
  ; Position du centre de l'oeil gauche
  Dx.f = MouseX - WindowX() - #CentreOeilG
  Dy.f = MouseY - WindowY() - #CentreOeilG
  DistanceSouris1.f = Sqr(Pow(Dx, 2) + Pow(Dy, 2))
  Dx = Dx / DistanceSouris1
  Dy = Dy / DistanceSouris1
  Distance.f = DistanceSouris1 / TailleEcranY * 4
  If Distance > 1 : Distance = 1 : EndIf
  
  OeilGX = Dx * Distance * #RayonOeil + #CentreOeilG
  OeilGY = Dy * Distance * #RayonOeil + #CentreOeilG
  
  ; Position du centre de l'oeil droit
  Dx.f = MouseX - WindowX() - #CentreOeilD
  Dy.f = MouseY - WindowY() - #CentreOeilG
  DistanceSouris2.f = Sqr(Pow(Dx, 2) + Pow(Dy, 2))
  Dx = Dx / DistanceSouris2
  Dy = Dy / DistanceSouris2
  Distance = DistanceSouris2 / TailleEcranY * 4
  If Distance > 1 : Distance = 1 : EndIf
  
  OeilDX = Dx * Distance * #RayonOeil + #CentreOeilD
  OeilDY = Dy * Distance * #RayonOeil + #CentreOeilG
   
   ; on dessine les yeux
  UseImage(0)
  StartDrawing(ImageOutput())
    Box(0, 0, 200, 200, $FFFFFF)
    Circle(OeilGX, OeilGY, #TaillePupille, 0)
    Circle(OeilDX, OeilDY, #TaillePupille, 0)
  StopDrawing()

  ; on affiche la fenêtre
  SetGadgetState(0, UseImage(0))
  
  ; Déplacement de la fenêtre
  If Abs(PosX - CibleX) <= 2 And Abs(PosY - CibleY) <= 2 ; On donne un point à rejoindre
    CibleX = Random(TailleEcranX + 2 * #Cadre) - #Cadre
    CibleY = Random(TailleEcranY + 2 * #Cadre) - #Cadre
    Debug StrF(CibleX, 0) + "    " + StrF(CibleY, 0)
  EndIf
  
  DistanceSouris.l = (DistanceSouris1 + DistanceSouris2) / 2
  
  ; on se déplace vers la cible
  Dx = CibleX - PosX
  Dy = CibleY - PosY
  DistanceCible = Sqr(Pow(Dx, 2) + Pow(Dy, 2))
  Dx = Dx / DistanceCible * #Avance
  Dy = Dy / DistanceCible * #Avance
  PosX +  Dx
  PosY + Dy
  
  If DistanceSouris < #DistanceMinSouris
    ; on s'écarte de la souris
    Dx = PosX - MouseX
    Dy = PosY - MouseY
    DistanceCible = Sqr(Pow(Dx, 2) + Pow(Dy, 2))
    PosX +  Dx / DistanceCible * #Avance
    PosY + Dy / DistanceCible * #Avance
  EndIf
  
  If Abs(PosX - PosXSave) < 0.02 And Abs(PosY - PosYSave) < 0.02
    ; si la souris est proche de la cible
    Dx = CibleX - PosX
    Dy = CibleY - PosY
    DistanceCible = Sqr(Pow(Dx, 2) + Pow(Dy, 2))
    Dx = Dx / DistanceCible * #Avance
    Dy = Dy / DistanceCible * #Avance
    PosX +  Dx
    PosY + Dy
  EndIf
  
  PosXSave = PosX
  PosYSave = PosY
  
  MoveWindow(PosX - (#TailleOeil + #TaillePupille - #EspaceOeilPupille) * 2 + #EspaceEntreYeux / 2, PosY - (#TailleOeil + #TaillePupille - #EspaceOeilPupille) * 2)

EndProcedure






If OpenWindow(1, 0, 0, 200, 200, #PB_Window_Invisible, "Yeux")
  If OpenWindow(0, 0, 0, (#TailleOeil + #TaillePupille - #EspaceOeilPupille) * 4 + #EspaceEntreYeux, (#TailleOeil + #TaillePupille - #EspaceOeilPupille) * 2, #PB_Window_BorderLess | #WS_SYSMENU | #PB_Window_ScreenCentered, "Yeux", WindowID(1))
    SetWindowPos_(WindowID(), -1, 0, 0, 0, 0, #SWP_NOSIZE | #SWP_NOMOVE)
    
    ; on découpe la fenêtre
    RegionOeilG = CreateEllipticRgn_(#CentreOeilG - #TailleOeil, #CentreOeilG - #TailleOeil, #CentreOeilG + #TailleOeil, #CentreOeilG + #TailleOeil)
    RegionOeilD = CreateEllipticRgn_(#CentreOeilD - #TailleOeil, #CentreOeilG - #TailleOeil, #CentreOeilD + #TailleOeil, #CentreOeilG + #TailleOeil)
    CombineRgn_(RegionOeilG, RegionOeilG, RegionOeilD, #RGN_OR)
    SetWindowRgn_(WindowID(), RegionOeilG, #True)
    DeleteObject_(RegionOeilG) 
    DeleteObject_(RegionOeilD)
    
    PosX = WindowX()
    PosY = WindowY()
    CibleX = PosX
    CibleY = PosY
    
    CreateImage(0, WindowWidth(), WindowHeight())
    If CreateGadgetList(WindowID())
      ImageGadget(0, 0, 0, 0, 0, UseImage(0))
    EndIf
    Yeux()
    
    Timer = SetTimer_(WindowID(), 0, #Vitesse, @Yeux())
    Repeat
      Event = WaitWindowEvent()
      
      If Event = #WM_LBUTTONDOWN ; Si on clique sur les yeux, on quitte
        Event = #PB_Event_CloseWindow
      EndIf
      
    Until Event = #PB_Event_CloseWindow
    KillTimer_(WindowID(), Timer)
  EndIf
EndIf
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

exellent !! :D (j'allai dire comme d'hab!)
Répondre