
Je cherche a connaître la couleur de fond d'une fenêtre.
Naturellement j'ai regarder l'aide est trouvé la fonction :
GetWindowColor(#fenetre), sauf qu'elle renvoie la couleur précédemment
affecté par SetWindowColor(#fenetre,RGB(x, x, x)).
Même en utilisant la valeur par defaut : SetWindowColor(#fenetre,#PB_Default)
et en réutilisant GetWindowColor(#fenetre), la valeur retourné est toujour -1, donc pas de couleur de fond !
J'ai aussi pensé a ouvrir la fenêtre avec un :
StartDrawing(WindowOutput(#fenetre)), et faire
Couleur = Point(5, 5):Debug "Couleur de fond = "+Str(Couleur)
Apparemment la fonction point() ne marche pas sur les fenêtres (ou alors
je m'y prend comme un manche !)
L'aide sur la fonction point() déclare : "Cette commande ne fonctionne pas
avec PrinterOutput()"
Elle ne dit pas qu'avec WindowOutput() cela ne marche pas, donc récupéré
la couleur d'un point, devrait être possible !
Il est possible de dessiné sur la fenêtre, mais impossible de récupérer
la couleur d'un point sur la fenêtre où sur les dessins (dessiné sur la fenêtre).
Est-ce un bug ???
Où je m'y prend mal !
Merci d'avance de me faire part de vos solutions !
A j'allais oublier, je suis sous linux, MATE Desktop Environment 1.12.1.
Je vous joint mon code de test.

Code : Tout sélectionner
Enumeration
#fenetre
#Bouton
EndEnumeration
Define Couleur.q
If OpenWindow(#fenetre, 0, 0, 220, 100, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget (#Bouton, 10, 60, 200, 30, "Donne couleur ")
; Commande normal sans canal alpha !
SetWindowColor(#fenetre,RGB(255, 255, 0)) ; Passe le fond de la fenetre en jaune
Couleur = GetWindowColor(#fenetre) ; Renvoie la couleur Ok
Debug Couleur
; Vérification des couleurs
Debug "La couleur de la fenêtre est " + Str(Couleur)
Debug "Composante Rouge : " + Str(Red(Couleur))
Debug "Composante Verte : " + Str(Green(Couleur))
Debug "Composante Bleue : " + Str(Blue(Couleur))
; ; Présence du canal Alpha ??? Apparament pas d'influence
; SetWindowColor(#fenetre,RGBA(255, 255, 0, 255)) ; Passe le fond de la fenetre en jaune
; Couleur = GetWindowColor(#fenetre) ; Renvoie la couleur Ok
; Debug Couleur
; ; Vérification des couleurs
; Debug "La couleur de la fenêtre est " + Str(Couleur)
; Debug "Composante Rouge : " + Str(Red(Couleur))
; Debug "Composante Verte : " + Str(Green(Couleur))
; Debug "Composante Bleue : " + Str(Blue(Couleur))
; Debug "Composante Alpha : " + Str(Alpha(Couleur))
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #Bouton
;------------------------Premier Test
; Annule la couleur affecter par le précedent SetWindowColor
SetWindowColor(#fenetre, #PB_Default)
Delay(1000)
; Redemande la couleur de la fenétre
Debug GetWindowColor(#fenetre)
; Renvoi toujour -1 ????
;------------------------Deuxiéme Test
; Autre test - récupérer la couleur de fiond de la fenétre, et (soyons fou)
; différentes couleurs dessiné sur la fenétre !
; If StartDrawing(WindowOutput(#fenetre))
;
;
; DrawingMode(#PB_2DDrawing_Default ) ; Avec/Sans pas d'effet !
; Box(10,10, 200, 30, RGB(255, 0, 0)) ; Dessin d'un rectangle
; Circle(50, 25, 10, RGB(0, 255, 255)) ; Dessin d'un cercle
;
; ;DrawingMode(#PB_2DDrawing_AlphaClip ) ; Avec/Sans pas d'effet !
; ;Box( 10, 10, 200, 30, RGBA(255, 0, 0, 255)) ; Dessin d'un rectangle
; ;Circle( 50, 25, 10, RGBA(0, 255, 255, 255)) ; Dessin d'un cercle
;
; ;DrawingMode(#PB_2DDrawing_AlphaChannel)
; ;Box( 10, 10, 200, 30, RGBA(255, 0, 0, 255)) ; Dessin d'un rectangle
; ;Circle( 50, 25, 10, RGBA(0, 255, 255, 255));0)) ; Dessin d'un cercle
;
; ;DrawingMode(#PB_2DDrawing_AlphaBlend )
; ;Box( 10, 10, 200, 30, RGBA(255, 0, 0, 255)) ; Dessin d'un rectangle
; ;Circle( 50, 25, 10, RGBA(0, 255, 255, 255));0)) ; Dessin d'un cercle
;
;
;
; Debug "aprés le bouton"
; ; Couleur de fond de la fenétre
; Couleur = Point(5, 5) : Debug "Couleur de la fenétre = "+Str(Couleur)
; ; Couleur de la Box
; Couleur = Point(15, 15) : Debug "Couleur du rectangle = "+Str(Couleur)
; ; Couleur du cercle
; Couleur = Point(50, 25) : Debug "Couleur du cercle = "+Str(Couleur)
;
; StopDrawing()
; EndIf
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf