HyperlinkGadget - couleur de survol

Programmation d'applications complexes
thierryd44
Messages : 8
Inscription : sam. 30/avr./2016 17:53

HyperlinkGadget - couleur de survol

Message par thierryd44 »

Bonjour.
Pour une application, je voudrai pouvoir changer "à la volée" la couleur de survol d'un lien hypertexte. L'idée est de permettre à l'utilisateur de changer le thème de couleur de l'application.
Il est facile de définir celle-ci à la création du gadget, mais je ne trouve rien sur le changement de couleur.
SetGadgetColor ne le permet pas.
J'ai cherché un peu du coté de l'API Windows, mais si je trouve un moyen de changer les couleurs systèmes (SetSystemColors_() : un peu violent tout de même :!: ), je ne vois rien non plus au niveau d'un controle.
Quelqu'un aurait-il déjà rencontré ce problème ou une idée de solution ?
D'avance merci à tous.
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: HyperlinkGadget - couleur de survol

Message par venom »

Bonjour Thierry d44.

Édit:
Autant pour moi, en effet SetGadgetColor permet uniquement quand il n'y a pas survol. :oops:





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: HyperlinkGadget - couleur de survol

Message par falsam »

Changer la couleur de survol nativement n'est pas possible effectivement mais il est possible de recréer les gadgets.

Ce code permet de changer la couleur des liens ainsi que la couleur des liens quand ils sont survolés.

Par défaut les liens sont rouges et la couleur de survol de ces liens est violette.

Code : Tout sélectionner

Declare Start()
Declare OnEventGadget()
Declare Exit()

Start()

Procedure start()
  SetGadgetFont(#PB_All, LoadFont(0, "Arial", 10))
  
  If OpenWindow(0, 0, 0, 800, 600, "HyperlinkGadget couleur à la volée", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    
    HyperLinkGadget(0, 10, 10, 250,20,"Premier lien", RGB(0,0,0))
    HyperLinkGadget(1, 10, 30, 250,40,"Deuxieme lien", RGB(0,0,0))
    
    ButtonGadget(2, 10, 100, 80, 24, "Lien Rouge")
    ButtonGadget(3, 100, 100, 80, 24, "Lien Bleu")
    
    ButtonGadget(4, 190, 100, 80, 24, "Survol Jaune")
    ButtonGadget(5, 280, 100, 80, 24, "Survol Violet")
    
    BindGadgetEvent(2, @OnEventGadget())
    BindGadgetEvent(3, @OnEventGadget())
    BindGadgetEvent(4, @OnEventGadget())
    BindGadgetEvent(5, @OnEventGadget())
    
    BindEvent(#PB_Event_CloseWindow, @Exit())
    
    ;Par defaut couleur des liens rouges survol violet
    PostEvent(#PB_Event_Gadget, 0, 2)
    PostEvent(#PB_Event_Gadget, 0, 5)
    
    Repeat : WaitWindowEvent() : ForEver
  EndIf
EndProcedure

Procedure OnEventGadget()
  Static Color, BackColor
  
  Select EventGadget()
    Case 2 : Color =  RGB(255, 0, 0)
    Case 3 : Color =  RGB(0, 0, 255)
    Case 4 : BackColor =  RGB(255, 215, 0)
    Case 5 : BackColor =  RGB(255, 0, 255)
  EndSelect 
  
  HyperLinkGadget(0, 10, 10, 250,20,"Premier lien", BackColor)
  HyperLinkGadget(1, 10, 30, 250,40,"Deuxieme lien", BackColor)
  SetGadgetColor(0, #PB_Gadget_FrontColor, Color)
  SetGadgetColor(1, #PB_Gadget_FrontColor, Color)
EndProcedure

Procedure Exit()
  End
EndProcedure

Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: HyperlinkGadget - couleur de survol

Message par venom »

Salut falsam,

Je n'ai pas tout compris a ton code, mais le résultat est là 8) Bravo. Dommage qu'il n'y a pas l'option en natif. Vue que c'est faisable :wink:






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
thierryd44
Messages : 8
Inscription : sam. 30/avr./2016 17:53

Re: HyperlinkGadget - couleur de survol

Message par thierryd44 »

Bonjour.
Avec un peu de retard, merci à tous pour votre aide.
J'ai effectivement adopté la solution de Falsam.
A+
Répondre