API purecolor

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

API purecolor

Message par SPH »

Code : Tout sélectionner

If OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)

  Repeat
    Event = WaitWindowEvent()

    If Event = #PB_Event_CloseWindow  ; If the user has pressed on the close button
      Quit = 1
    EndIf

  Until Quit = 1
  
EndIf

End   ; All the opened windows are closed automatically by PureBasic
Est ce que quelqu'un pourrait me dire comment changer le gris de la windows. Certainement une api qu'utilise purecolor. Mais laquelle ?

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: API purecolor

Message par Backup »

Sph , ya des moment, je m'interroge a ton sujet ... :roll:

PureColor est une librairie

cette librairie du nom de "PureCOLOR"
s'installe (se copie) dans le dossier : "PureLibraries\UserLibraries"

une fois fait (et apres avoir relancé le compilateur// ou redémarre Purebasic)
tu aura acces a toutes les fonction de la librairie comme si c'etait des fonctions Purebasic

si tu as utilisé l'installateur de Gnozal , tu aura en principe le fichier Purecolor.chm
dans le dossier "HELP" de purebasic

c'est l'aide de la librairie

dans l'aide il y a donc la fonction :

Code : Tout sélectionner

PureCOLOR_SetWindowColor(WindowNumber.l, BackColor.l)
qui devrai répondre a ta question !

ps: ce qui est simple avec Purebasic , c'est que toute les librairies "utilisateur"
(faites par des membres des forums)
s'installent de la meme façon !

toujours dans le dossier "PureLibraries\UserLibraries"
et les Doc fournies , s'installent toujours dans le dossier "\Help"

tu trouvera ces dossiers dans ton dossier d'installation de Purebasic
(c'est pourquoi il est conseillé d'installer chaque version de purebasic, dans des dossiers qui leur sont propre)


il ne s'agit pas d'API , les APIS sont des fonctions que fournit Windows/Linux

il s'agit de librairies
la nuance est legere, mais pour s'y retrouver, mieux vaut faire une différence
une librairie est une Bibliotheque (un Sac) de fonctions

comme dans la réalité , une librairie est un magasin qui propose des livres

une librairie Purebasic, est un fichier qui te propose des Fonctions (procedureDLL())
dont tu peux te servir a loisir dans le code, comme si c’était des fonctions Natives de Purebasic

et il faut donc les mettre au bon endroit pour y avoir accès

dans ton dossier Purebasic , tu as un dossier
[PureLibraries]

dans ce dossier il ya a :
les librairies fourni par Fred , et son equipe
qui sont donc les librairies dispo par defaut avec le purebasic
2D Drawing
Array
AudioCD
Cipher
Clipboard
Console
Database
Date
Debugger
Desktop
Drag & Drop
File
FileSystem
Ftp
Font
Gadget
Help
Http
Image
ImagePlugin
Library
Linked List
Mail
Map
Math
Memory
Menu
Misc
Movie
Network
OnError
Packer
Preference
Printer
Process
Regular Expression
Requester
Scintilla
Serial Port
Sort
StatusBar
String
SysTray
Thread
Toolbar
Window
XML

Bibliothèques pour les jeux 2D

Joystick
Keyboard
Module
Mouse
Palette
Sprite & Screen
Sprite3D
Sound
SoundPlugin

Bibliothèques pour les jeux 3D

Engine3D
Billboard
Camera
Entity
Gadget 3D
Light
Material
Mesh
Node
Particle
Sound 3D
Terrain
Texture
Window 3D

et il y a un dossier
[UserLibraries]

qui lui peut contenir les librairies faite avec Tailbite ou Moebius
et c'est là qu'il faut donc installer les librairies (faites par des membres)
que tu trouve ici ou la ... (comme Purecolor par exemple)

certain propose leur librairies brut de pomme , c'est a toi de la copier au bon endroit
et d'autre comme Gnozal , (ou moi-meme ;...ha bah non, je propose plus :lol: ) ) ,propose leur librairie avec un installateur
qui va faire se travail a ta place
(mettre la librairie dans le dossier "PureLibraries\UserLibraries" et le fichier Help dans le dossier du meme nom : ) )
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: API purecolor

Message par SPH »

Dobro a écrit :Sph , ya des moment, je m'interroge a ton sujet ... :roll:

PureColor est une librairie
Je sais, mais je sous entendais que dans la librarie purecolor, il doit y avoir une api qui colore le windows... Mais laquelle...

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Re: API purecolor

Message par gnozal »

Pas besoin d'API ... il y a une fonction de PB : SetWindowColor()

Code : Tout sélectionner

If OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  SetWindowColor(0, $FFFFFF) ; <------------
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_CloseWindow  ; If the user has pressed on the close button
      Quit = 1
    EndIf
    
  Until Quit = 1
  
EndIf

End
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: API purecolor

Message par SPH »

gnozal a écrit :Pas besoin d'API ... il y a une fonction de PB : SetWindowColor()

Code : Tout sélectionner

If OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  SetWindowColor(0, $FFFFFF) ; <------------
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_CloseWindow  ; If the user has pressed on the close button
      Quit = 1
    EndIf
    
  Until Quit = 1
  
EndIf

End
Haaaaa, j'aurais juré qe c'etait une api qui faisait ca. Ba voila. Merci !

EDIT : raaaa, presque. Regardez ce que ca fait : il y a une couleur qui reste pret des onglets :
Image

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: API purecolor

Message par Backup »

............
Dernière modification par Backup le ven. 30/sept./2011 19:58, modifié 1 fois.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: API purecolor

Message par blendman »

c'est étrange, ça devrait marcher avec purecolor, mais ça ne marche pas sur les panels on dirait, à moins que j'ai mal fait le truc :

Code : Tout sélectionner

OpenWindow(0,0,0,400,400,"Panel Color", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
SetWindowColor(0,RGB(100,100,100))

PanelGadget(1, 10, 10, 300, 200)
AddGadgetItem(1, -1, "Panel 1")
ComboBoxGadget(2,10,10,100,50)
AddGadgetItem(1, -1, "Panel 2")
CloseGadgetList()

PureCOLOR_SetGadgetColor(1,#PureCOLOR_SystemColor,RGB(100,100,100))
PureCOLOR_SetGadgetColor(2,#PureCOLOR_SystemColor,RGB(100,100,100))

Repeat
  event = WaitWindowEvent()
  
Until event = #PB_Event_CloseWindow
End
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: API purecolor

Message par SPH »

Dobro, ton code fais quand meme la bande de couleur quand on choisis SetWindowColor(0,couleur) (comme tu dis, c'est chaud) :!:

blendman, ca nous interdit de choisir une autre couleur pour les onglets ? (exemple, des onglets rouge et la bande a coté a droite de la meme couleur que la windows; disons gris)

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Re: API purecolor

Message par gnozal »

blendman a écrit :c'est étrange, ça devrait marcher avec purecolor, mais ça ne marche pas sur les panels on dirait, à moins que j'ai mal fait le truc :
Fonctionne uniquement si le support des thèmes est désactivé dans les options de compilation.

On peut forcer la désactivation du thème :

Code : Tout sélectionner

Procedure DisableXPTheme(GadgetNumber.l) 
  Protected UxTheme.l, SetWindowTheme.l
  UxTheme = OpenLibrary(#PB_Any, "UxTheme.dll")
  If UxTheme
    SetWindowTheme = GetFunction(UxTheme, "SetWindowTheme")
    If SetWindowTheme
      CallFunctionFast(SetWindowTheme, GadgetID(GadgetNumber), @null.w, @null.w)
    EndIf
    CloseLibrary(UxTheme)
  EndIf
EndProcedure

OpenWindow(0,0,0,400,400,"Panel Color", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
SetWindowColor(0,RGB(100,100,100))

PanelGadget(1, 10, 10, 300, 200)
  AddGadgetItem(1, -1, "Panel 1")
  ComboBoxGadget(2,10,10,100,20)
  AddGadgetItem(1, -1, "Panel 2")
CloseGadgetList()

DisableXPTheme(1) 

PureCOLOR_SetGadgetColor(1,#PureCOLOR_SystemColor,RGB(100,100,100))
PureCOLOR_SetGadgetColor(2,#PureCOLOR_SystemColor,RGB(100,100,100))

Repeat
  event = WaitWindowEvent()
  
Until event = #PB_Event_CloseWindow
End
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: API purecolor

Message par SPH »

Ca ne change pas que si les onglets sont de couleur differente de la windows, on vois la bande. Mais bon, n'en parlons plus...

Code : Tout sélectionner

Procedure DisableXPTheme(GadgetNumber.l) 
  Protected UxTheme.l, SetWindowTheme.l
  UxTheme = OpenLibrary(#PB_Any, "UxTheme.dll")
  If UxTheme
    SetWindowTheme = GetFunction(UxTheme, "SetWindowTheme")
    If SetWindowTheme
      CallFunctionFast(SetWindowTheme, GadgetID(GadgetNumber), @null.w, @null.w)
    EndIf
    CloseLibrary(UxTheme)
  EndIf
EndProcedure

OpenWindow(0,0,0,400,400,"Panel Color", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
SetWindowColor(0,RGB(200,100,100))

PanelGadget(1, 10, 10, 300, 200)
  AddGadgetItem(1, -1, "Panel 1")
  ComboBoxGadget(2,10,10,100,20)
  AddGadgetItem(1, -1, "Panel 2")
CloseGadgetList()

DisableXPTheme(1) 

PureCOLOR_SetGadgetColor(1,#PureCOLOR_SystemColor,RGB(100,100,100))
PureCOLOR_SetGadgetColor(2,#PureCOLOR_SystemColor,RGB(100,100,100))

Repeat
  event = WaitWindowEvent()
  
Until event = #PB_Event_CloseWindow
End

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: API purecolor

Message par blendman »

Ah oui, effectivement.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: API purecolor

Message par falsam »

On aime ........ ou pas.

Code : Tout sélectionner

Enumeration
  #uxTheme
  #MainForm
  #Panel
  #Wrapper1
  #Wrapper2
  #Option
  #Check
  #AnotherCheck
  #Combo
EndEnumeration

Global WindowColor.i, TabPanelBackGroundColor, TabPanelColor.i

WindowColor=RGB(215, 251, 190)
TabPanelBackGroundColor = CreateSolidBrush_($B2FCFD) 
TabPanelColor = RGB(0, 0, 0)

Procedure WindowCallback(WindowID, Message, wParam, lParam) 
  
  Result = #PB_ProcessPureBasicEvents   
  
  Select Message        
      
    ;Coloration des onglets 
    Case #WM_DRAWITEM
      *PGdis.DRAWITEMSTRUCT = lParam
      If *PGdis\CtlType = #ODT_TAB 
        Select *PGdis\itemID 
          Case 0, 1  
            tabText$ = GetGadgetItemText(#Panel, *PGdis\itemID, 0) 
            FillRect_(*PGdis\hdc, *PGdis\rcItem, TabPanelBackGroundColor) 
            SetTextColor_(*PGdis\hdc, TabPanelColor)
            SetBkMode_(*PGdis\hdc, #TRANSPARENT) 
            DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)       
        EndSelect
        
      EndIf
      
    ;Coloration des CheckBoxGadget et OptionGadget
    Case #WM_CTLCOLORSTATIC
        Select lparam
          Case GadgetID(#Option), GadgetID(#Check), GadgetID(#AnotherCheck)
            SetBkMode_(wParam,#TRANSPARENT) 
            SetTextColor_(wParam, $0862F7) 
            Result = TabPanelBackGroundColor              

        EndSelect                                  
    EndSelect 
  ProcedureReturn Result 
EndProcedure 

;/
;/ Désactivation du théme XP pour un gadget
;
Procedure DisableGadgetXPTheme(Gadget.i)
    If OSVersion() >= #PB_OS_Windows_XP 
    If OpenLibrary(#uxTheme, "uxtheme.dll")
      CallFunction(#uxTheme, "SetWindowTheme", GadgetID(Gadget), @null.w, @null.w)
      CloseLibrary(0) 
    EndIf 
  EndIf 
EndProcedure

;
;/ Fenetre principale
;/
Procedure MainformShow()
  SetGadgetFont(#PB_Default,FontID(LoadFont(#PB_Any,"Arial",10)))
  If OpenWindow(#Mainform, 422, 335, 400, 225, "Test", #PB_Window_SystemMenu)
    
    SetWindowColor(#MainForm, WindowColor)
    
    PanelGadget(#Panel, 10, 20, 380, 180)   
    
    AddGadgetItem(#Panel, -1, "Onglet 1")
    TextGadget(#Wrapper1, 0,0,380,180,"")
    SetGadgetColor(#Wrapper1, #PB_Gadget_BackColor, $B2FCFD)
    OptionGadget(#Option, 35, 25, 230, 20, "Option Gadget")
    CheckBoxGadget(#Check, 35, 50, 230, 20, "Check Gadget")
    
    AddGadgetItem(#Panel, -1, "Onglet 2")
    TextGadget(#Wrapper2, 0,0,3800,180,"")
    SetGadgetColor(#Wrapper2, #PB_Gadget_BackColor, $B2FCFD)
    CheckBoxGadget(#AnotherCheck,20,20,200,20, "Another Check")
    ComboBoxGadget(#Combo, 20, 50, 200, 20) 
   
    
    CloseGadgetList()
  EndIf
  
  ;Desactivation du théme XP
  DisableGadgetXPTheme(#panel)
  
  ;Transparence des onglets
  SetWindowLong_(GadgetID(#Panel), #GWL_STYLE, GetWindowLong_(GadgetID(#Panel), #GWL_STYLE) | #TCS_OWNERDRAWFIXED)
  
  ;Coloration de l'arriere plan du panelgadget
  color=CreateSolidBrush_(WindowColor)
  SetClassLong_(GadgetID(#Panel), #GCL_HBRBACKGROUND, color)
  
  ;Le callback s'occupe du reste
  ; Coloration su system d'onglet 
  ; Coloration des CheckBoxGadget et OptionGadget par exemple
  SetWindowCallback(@WindowCallback()) 
EndProcedure

MainFormShow()

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget

    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
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
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: API purecolor

Message par SPH »

Bravo falsam, je vais etudier ca ! :P

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Re: API purecolor

Message par gnozal »

SPH a écrit :Ca ne change pas que si les onglets sont de couleur differente de la windows, on vois la bande. Mais bon, n'en parlons plus...
Oui, j'ai désactivé la coloration de la 'bande' dans PureCOLOR si les thèmes Windows sont activés.

Code : Tout sélectionner

...
            If IsXPThemeEnabled = #False
              BackColor = PureCOLOR_GadgetList()\Values[#PureCOLOR_index_Standard]\Brush
              FillRect_(*DrawItem\hdc, *DrawItem\rcItem, BackColor) 
            EndIf
...
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: API purecolor

Message par SPH »

gnozal a écrit :
SPH a écrit :Ca ne change pas que si les onglets sont de couleur differente de la windows, on vois la bande. Mais bon, n'en parlons plus...
Oui, j'ai désactivé la coloration de la 'bande' dans PureCOLOR si les thèmes Windows sont activés.

Code : Tout sélectionner

...
            If IsXPThemeEnabled = #False
              BackColor = PureCOLOR_GadgetList()\Values[#PureCOLOR_index_Standard]\Brush
              FillRect_(*DrawItem\hdc, *DrawItem\rcItem, BackColor) 
            EndIf
...
Ok, je me disais aussi que tu savais l'utiliser. Merci a toi aussi.

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Répondre