Page 4 sur 12

Re: ~ STREAM RADIO ~ v 0.6.4

Publié : lun. 09/déc./2013 1:30
par Backup
Ar-S a écrit :Dobro, ta proce et la mienne fonctionnent de la même façon... j'insiste
ben non , car ma procedure lit la couleur de reference ,puis utilise cette couleur

alors que la tienne est fixe :)

c'est bien pour ça que ça doit pas le faire .... et tu fais bien de proposer ce test a Nico .. du coup :mrgreen: :)

il suffit que certaines carte graphique renvoient une couleur differente que celle de ta variable, et t'es dans les choux :)

alors que ma procedure , elle s'adapte :)

boude pas !!

Re: ~ STREAM RADIO ~ v 0.6.4

Publié : lun. 09/déc./2013 11:01
par Ar-S

Code : Tout sélectionner

il suffit que certaines carte graphique renvoient une couleur differente que celle de ta variable, et t'es dans les choux
C'est exactement ce que je me suis dit. Je me suis aussi d'y que la résolution ecran et affichage pouvaient peut-être faire en sorte que le pixel sélectionné ne soit pas le bon..

Re: ~ STREAM RADIO ~ v 0.6.4

Publié : lun. 09/déc./2013 12:51
par nico
Bon ben j'attend la 0.6.5, elle arrive quand :)

Re: ~ STREAM RADIO ~ v 0.6.4

Publié : lun. 09/déc./2013 16:01
par Ar-S
Dès que je peux ! :twisted:

Re: ~ STREAM RADIO ~ v 0.6.4

Publié : lun. 09/déc./2013 17:44
par Ar-S
Voilà la version pour Nico.
J'ai remanié la proce en capturant les pixels (sans valeur par defaut).
Un Messagerequester apparait pour afficher les couleurs des 2 pixels et voir leur correspondance

http://stock.ldvmultimedia.com/AR-S%20Stream_Radio.rar

Re: ~ STREAM RADIO ~ v 0.6.4

Publié : lun. 09/déc./2013 18:37
par nico
Ton lien est mort.

Re: ~ STREAM RADIO ~ v 0.6.4

Publié : lun. 09/déc./2013 18:44
par Backup
il est en forme le Ar-s :lol:

Re: ~ STREAM RADIO ~ v 0.6.4

Publié : lun. 09/déc./2013 19:04
par nico
Bon j'ai compris que le lien était en fait:
http://stock.ldvmultimedia.com/AR-S%20Stream_Radio.ra

et là ça fonctionne!

[EDIT]
Je viens de faire des tests plus poussés, et on se rend compte que ta procédure ne sert à rien et du coup ça peut ne pas fonctionner.
Je m'explique: si je lance ton programme et que je met une fenêtre aussitôt par dessus, la valeur de comparaison des pixels restent bonne mais ne correspondent pas à ta fenêtre mais à celle qui est au dessus, du coup pas de spectrum. Tu dois récupérer la valeur de pixel de ton écran mais aussi celle de ta fenêtre pour la comparaison.


Peux tu poster ta procédure, je vais te la modifier!

Re: ~ STREAM RADIO ~ v 0.6.4

Publié : lun. 09/déc./2013 19:48
par nico
Je crois que le mieux serait de rester fonctionnel et de faire:
Focus = Spectrum
Perte de Focus = disparition du Spectrum
Premier Plan = Spectrum

Parce que là tu t'es embarqué dans un truc foireux.

Re: ~ STREAM RADIO ~ v 0.6.4

Publié : lun. 09/déc./2013 20:51
par Ar-S
Pour le moment je n'ai pas trouvé de pc ou la 0.6.4 ne fonctionne pas, ça aide pas non plus 8) ...

voilà la procédure
P.S : Creation est une global.b

Code : Tout sélectionner

	
Procedure CheckRecouvre()
	Static CouleurCible1.i , CouleurCible2.i
		
		PosX   =   WindowX(#LDVM)
		PosY   =   WindowY(#LDVM)
		
		If Flag = 0
			SetActiveWindow(#LDVM)
			CouleurCible1.i = Pxlcolor(PosX + 14, posY + 84)
		 	CouleurCible2.i = Pxlcolor(PosX + WindowWidth(#LDVM)-7, posY + 36)
			Flag +1
		EndIf
					
		If Pxlcolor(PosX + 14, posY + 84) <> CouleurCible1  And Pxlcolor(PosX + WindowWidth(#LDVm)-7, posY + 36) <> CouleurCible2 

				If creation = 0
						DestroyOWS() ; macro du closescreen()
						Creation = 1 ; Pour ne pas refermer la fenêtre vu qu'elle est déjà fermée
				EndIf
				Debug "FENETRE CACHEE"
		Else
				If Creation = 1
						CreaOWS() ; macro de l'openwindowsScreen()
						CreaSPRITE() ; Macro de La creation de sprite
						Creation = 0 ; Pour ne pas recréer la fenêtre et les sprites vu qu'ils sont crées
						SetActiveWindow(#ldvm)
				EndIf
				
				Debug "FENETRE VISIBLE"   
		EndIf
		
		ProcedureReturn Creation
		
EndProcedure 

Re: ~ STREAM RADIO ~ v 0.6.4

Publié : lun. 09/déc./2013 21:58
par nico
Elle est ou cette procedure: Pxlcolor

Re: ~ STREAM RADIO ~ v 0.6.4

Publié : lun. 09/déc./2013 22:51
par Ar-S
Ooouupps

Code : Tout sélectionner

Procedure Pxlcolor(X,Y) 
	handle=GetDC_(GetDesktopWindow_()) 
	couleur=GetPixel_(handle,X,Y) 
	ReleaseDC_(GetDesktopWindow_(),handle ) 
	ProcedureReturn couleur 
EndProcedure

Re: ~ STREAM RADIO ~ v 0.6.4

Publié : lun. 09/déc./2013 23:20
par Backup
...

Re: ~ STREAM RADIO ~ v 0.6.4

Publié : lun. 09/déc./2013 23:22
par nico
J'espère n'avoir rien oublié:

Code : Tout sélectionner

Procedure.l PxlcolorWindow(window.i, x.l, y.l)
  Protected Color.l = -1
  
  If StartDrawing(WindowOutput(window))    
    Color = Point(x, y)
    StopDrawing()
  EndIf
  
  ProcedureReturn Color
EndProcedure


Procedure.l PxlcolorDesktop(x.l, y.l) 
  Protected Hdc.i, color.l = -1, Handle.i
  
  Handle = GetDesktopWindow_()
  If Handle <> 0
    Hdc=GetDC_(Handle) 
    If Hdc <> 0
      color=GetPixel_(Hdc, x, y) 
      ReleaseDC_(Handle, Hdc) 
    EndIf
  EndIf
  
  ProcedureReturn color 
EndProcedure


Procedure CheckRecouvre()
  Protected PosX.l, PosY.l, CouleurDesktop1.l , CouleurDesktop2.l
  Static CouleurWindow1.l , CouleurWindow2.l
  
  PosX   =   WindowX(#LDVM)
  PosY   =   WindowY(#LDVM)
  
  If Flag = 0
    CouleurWindow1 = PxlcolorWindow(#LDVM, PosX + 14, posY + 84)
    CouleurWindow2 = PxlcolorWindow(#LDVM, PosX + WindowWidth(#LDVM)-7, posY + 36)
    If CouleurCible1 <> -1 And CouleurCible2 <> -1
      Flag +1
    EndIf 
  EndIf
  
  
  CouleurDesktop1 = PxlcolorDesktop(PosX + 14, posY + 84)
  CouleurDesktop2 = PxlcolorDesktop(PosX + WindowWidth(#LDVm)-7, posY + 36)
  
  
  If  CouleurDesktop1 <> CouleurWindow1  And  CouleurDesktop2 <> CouleurWindow2 And CouleurDesktop1 <> -1 And CouleurDesktop2 <> -1
    
    If creation = 0
      DestroyOWS() ; macro du closescreen()
      Creation = 1 ; Pour ne pas refermer la fenêtre vu qu'elle est déjà fermée
    EndIf
    Debug "FENETRE CACHEE"
  Else
    If Creation = 1
      CreaOWS() ; macro de l'openwindowsScreen()
      CreaSPRITE() ; Macro de La creation de sprite
      Creation = 0 ; Pour ne pas recréer la fenêtre et les sprites vu qu'ils sont crées
      SetActiveWindow(#ldvm)
    EndIf
    
    Debug "FENETRE VISIBLE"   
  EndIf
  
  ProcedureReturn Creation
  
EndProcedure  

Re: ~ STREAM RADIO ~ v 0.6.4

Publié : lun. 09/déc./2013 23:34
par falsam
j'espérer que la correction de Nico pourra satisfaire Ar-S.

Je propose une autre solution qui consiste à connaitre l'application qui est au premier plan et est ce que cette application recouvre totalement la radio. Cette solution utilise des API Windows

Code : Tout sélectionner

Enumeration
  #Mainform
  #ForeGroundApplication
EndEnumeration

Define.l Event, GEvent, TiEvent

Structure Process
  ExeName.s
  Left.i
  Top.i
  Width.i
  Height.i
EndStructure

Global NewList Applications.Process()

Procedure.s ListWindows(hwnd,Param)
  Protected Buffer.s
  
  If GetWindowLong_(hwnd, #GWL_EXSTYLE) ! #WS_EX_TOOLWINDOW And GetWindowLong_(hwnd, #GWL_STYLE) & #WS_VISIBLE
    Buffer = Space(250)
    
    GetWindowText_(hwnd, Buffer, 250)
    GetWindowRect_(hWnd, rc.RECT)
    
    If Buffer<>"" And Buffer <> "Démarrer"
      AddElement(Applications())
      Applications()\ExeName = Buffer
      Applications()\Left = rc\left
      Applications()\Top = rc\top
      Applications()\Width = rc\right - rc\left 
      Applications()\Height = rc\bottom - rc\top
    EndIf
    
  EndIf
  
EndProcedure

Procedure Open_MainForm()
  OpenWindow(#Mainform, 0, 0, 465, 80, "Ar-S Radio", #PB_Window_SystemMenu)
  TextGadget(#ForeGroundApplication, 10, 10, 400, 20, "")
  AddWindowTimer(#Mainform, 100, 500)
EndProcedure
  
Open_MainForm()

Repeat
  Event  = WaitWindowEvent(10)
  GEvent = EventGadget()
  TiEvent = EventTimer()
  
  Select Event
    Case #PB_Event_Timer
      Select TiEvent
        Case 100
          ClearList(Applications())
          EnumChildWindows_(FindWindow_("ToolbarWindow32",0),@ListWindows(),0)
          FirstElement(Applications())
          With Applications()
            SetGadgetText(#ForeGroundApplication, Str(n)+" - "+\ExeName + " Left: "+\Left + " Top: "+\Top + " Width: "+\Width + " Height: "+\Height)
            If \ExeName <> "Ar-S Radio"
              If WindowX(#Mainform)>=\Left And WindowX(#Mainform)<=\Left+\Width
                If WindowY(#Mainform)>=\Top And WindowY(#Mainform)<=\Top+\Height
                  MessageRequester("Information","J'ai été recouvert par "+\ExeName)
                EndIf
              EndIf
            EndIf
          EndWith
    
      EndSelect
        
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
Lancer ce code et cliquer ensuite sur une autre application. Vous verrez que le nom de l'application active s'affiche avec ses coordonnées. Essayez ensuite de recouvrir la fenêtre de test avec l'application active. Une boite d'information vous informera que la fenêtre de test a été recouverte.