Page 1 sur 1

API purecolor

Publié : lun. 18/juil./2011 11:46
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 ?

Re: API purecolor

Publié : lun. 18/juil./2011 12:15
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 : ) )

Re: API purecolor

Publié : lun. 18/juil./2011 12:32
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...

Re: API purecolor

Publié : lun. 18/juil./2011 12:39
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

Re: API purecolor

Publié : lun. 18/juil./2011 12:58
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

Re: API purecolor

Publié : lun. 18/juil./2011 13:20
par Backup
............

Re: API purecolor

Publié : lun. 18/juil./2011 13:50
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

Re: API purecolor

Publié : lun. 18/juil./2011 14:00
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)

Re: API purecolor

Publié : lun. 18/juil./2011 15:49
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

Re: API purecolor

Publié : lun. 18/juil./2011 16:27
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

Re: API purecolor

Publié : lun. 18/juil./2011 17:28
par blendman
Ah oui, effectivement.

Re: API purecolor

Publié : lun. 18/juil./2011 19:06
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

Re: API purecolor

Publié : lun. 18/juil./2011 19:34
par SPH
Bravo falsam, je vais etudier ca ! :P

Re: API purecolor

Publié : mar. 19/juil./2011 7:41
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
...

Re: API purecolor

Publié : mar. 19/juil./2011 10:06
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.