Page 1 sur 2
fenetre qui ne se voit pas en bas !
Publié : mar. 13/juin/2006 20:36
par graph100
je ne sais pas si je me suis fait comprendre ... je voudrait créé une fenetre qui ne possede pas ca:

voila ^^
j'étais tombé dessus en faisait une fausse manip a l'editeur graphique mais je n'arrive plus a le refaire . lol

Publié : mar. 13/juin/2006 21:01
par AWEAR
Tu peux faire ça comme ça, mais c'est plus un truc fait à l'arrache que quelque chose de conventionnel :
Code : Tout sélectionner
OpenWindow(0, 0, 0, 500, 500, "test", #PB_Window_Invisible)
OpenWindow(1, 0, 0, 500, 500, "test", 0, WindowID(0))
Repeat
Until WaitWindowEvent() = 16
Publié : mar. 13/juin/2006 21:07
par Gillou
ProcedureDLL HideFromTaskbar(Window, State) ; Cache la fenêtre de la barre des tâches
Shared proc_HideFromTaskbar_Object
If STATE = 0
CallCOM( #HideFromTaskbar_AddTab , proc_HideFromTaskbar_Object, WindowID (WINDOW)) ; Montrer la fenêtre
Else
CallCOM( #HideFromTaskbar_DeleteTab , proc_HideFromTaskbar_Object, WindowID (WINDOW)) ; Cacher la fenêtre
EndIf
EndProcedure
ProcedureDLL InitHideFromTaskbar() ; Initialise le mode cacher de la barre des tâches
Shared proc_HideFromTaskbar_Object
CoInitialize_ (0)
CoCreateInstance_ (?CLSID_TaskbarList, 0, 1, ?IID_ITaskbarList, @proc_HideFromTaskbar_Object)
CallCOM( #HideFromTaskbar_HrInit , proc_HideFromTaskbar_Object) ; Initialiser l'objet
DataSection
CLSID_TaskbarList :
Data.l $56FDF344
Data.w $FD6D, $11D0
Data.b $95, $8A, $00, $60, $97, $C9, $A0, $90
IID_ITaskbarList :
Data.l $56FDF342
Data.w $FD6D, $11D0
Data.b $95, $8A, $00, $60, $97, $C9, $A0, $90
EndDataSection
EndProcedure
ProcedureDLL EndHideFromTaskbar() ; Coupe le mode cacher de la barre des tâches
Shared proc_HideFromTaskbar_Object
CallCOM( #HideFromTaskbar_Release , proc_HideFromTaskbar_Object)
CoUninitialize_ ()
EndProcedure
InitHideFromTaskbar()
win = OpenWindow ( #PB_Any , 0, 0, 200, 200, "test" , #PBWIN0 )
If win And CreateGadgetList ( WindowID (win))
Repeat
HideFromTaskbar(win, 1)
Select WaitWindowEvent ()
EndSelect
Until Quit = 1
EndHideFromTaskbar()
EndIf
Publié : mar. 13/juin/2006 21:20
par Flype
une autre méthode plus simple :
Code : Tout sélectionner
Procedure RemoveFromTaskbar(hwnd)
If IsWindow_(hwnd)
a=hwnd : b=GetWindowLong_(a,#GWL_HWNDPARENT) : If b<>0 : a=b : EndIf ; Needed for "TaskAssign.exe".
ShowWindow_(a,#SW_HIDE) : GetWindowRect_(a,win.RECT) : w=win\right-win\left : h=win\bottom-win\top
SetWindowLong_(a,#GWL_EXSTYLE,#WS_EX_TOOLWINDOW) : SetWindowPos_(a,0,0,0,w-1,h-1,#SWP_NOMOVE)
SetWindowPos_(a,0,0,0,w,h,#SWP_NOMOVE|#SWP_SHOWWINDOW) : ProcedureReturn 1
EndIf
EndProcedure
Debug RemoveFromTaskbar(FindWindow_(0,"titre de la fenetre"))
Publié : mer. 14/juin/2006 17:13
par bernard13
peux m'expliquer en details ton code Flype svp
Publié : mer. 14/juin/2006 18:22
par Flype
si tu veux.
cette fonction est de PB (un des grands contributeur du forum officiel)
je l'ai réécrite pour nous
plus dans l'esprit purebasic, un peu comme StickyWindow :
Code : Tout sélectionner
Procedure ToolWindow(window.l, state.l = #True)
Protected hwnd.l = WindowID(window)
; cache la fenêtre
ShowWindow_(hwnd, #SW_HIDE)
; change le style de la fenêtre ( le plus important )
If state
SetWindowLong_(hwnd, #GWL_EXSTYLE, GetWindowLong_(hwnd, #GWL_EXSTYLE) | #WS_EX_TOOLWINDOW)
Else
SetWindowLong_(hwnd, #GWL_EXSTYLE, GetWindowLong_(hwnd, #GWL_EXSTYLE) & (~#WS_EX_TOOLWINDOW))
EndIf
; notifie la fenêtre que son apparence a changé (mais ni sa taille, ni sa position)
If SetWindowPos_(hwnd, 0, 0, 0, 0, 0, #SWP_NOSIZE|#SWP_NOMOVE|#SWP_SHOWWINDOW| #SWP_FRAMECHANGED)
ProcedureReturn #True
EndIf
EndProcedure
Procedure IsToolWindow(window)
; la fenêtre at-t-elle le style 'toolwindow' ?
If GetWindowLong_(WindowID(window), #GWL_EXSTYLE) & #WS_EX_TOOLWINDOW
ProcedureReturn #True
EndIf
EndProcedure
;-
If OpenWindow(0, 0, 0, 640, 480, "toolwindow", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
ButtonGadget(0, 5, 5, 150, 30, "ToolWindow On/Off", #PB_Button_Toggle)
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
ToolWindow(0, #True-IsToolWindow(0))
EndSelect
ForEver
EndIf
Publié : mer. 14/juin/2006 20:26
par bernard13
merci Flype
je suis entrain de crée mon propre requester ...
Publié : mer. 14/juin/2006 21:24
par graph100
@Flype
je ne comprend pas : ton code change l'apparence de la fenetre et ne cache pas la fenetre de la barre des taches !!
@Gillou
ca marche tres bien ! merci
j'ai vu que en créant la fenetre avec une fenetre parent elle était pas dans la barre des taches
je n'ai pas tres bien compris a quoi servait la procedure ActivateWindow()
exist- il une procedure permettant de changer la current window ? avec le handle de la fenetre a mettre en current ?
Publié : mer. 14/juin/2006 21:45
par Backup
@Gillou : si ton code utilise un librairie , il faudrai le specifier !
c'est quoi ce CallCOM ??

Publié : mer. 14/juin/2006 22:18
par Flype
graph100 a écrit :@Flype
je ne comprend pas : ton code change l'apparence de la fenetre et ne cache pas la fenetre de la barre des taches !!
ouhla oui, tu as raison.
j'ai mis à jour le code plus haut. ca marche bien maintenant.

Publié : jeu. 15/juin/2006 10:47
par graph100
sinon quand on efface la barre de tache ca change le style de la fenetre en toolwindow

Publié : jeu. 15/juin/2006 11:14
par Flype
que veux tu dire par "quand on efface la barre de tache" ???
Publié : jeu. 15/juin/2006 11:19
par nico
Oui, c'est normal, ce sont des fenêtres qui servent pour créer des barre d'outils.
Publié : jeu. 15/juin/2006 12:45
par graph100
oups .. j'ai ouublié des mots
"la fenetre de la barre des taches"
@nico
ca doit etre possible : en faisant avec les fenetres parents les fenetres ne sont pas affichée dans la barre de tache...mais j'ai l'impression que les evenements des fenetres parentes sont detecter sur les fenetres "enfant"
Publié : jeu. 15/juin/2006 13:18
par Flype
en général, quand je veux pas qu'une fenetre apparaisse en bas,
d'abord j'utilise le style 'toolwindow', c'est facile et c'est plus propre.
une autre solution qui vaut ce qu'elle vaut :
tu peux créer un 'systrayicon' (voir AddSystrayIcon) qui permettra à l'utilisateur de facilement montrer/cacher la fenetre d'un simple click sur l'icone 'systray'.
peut etre encore une autre idée.
si la bordure de titre au style 'toolwindow' ne te plait pas,
à la limite tu peut carrément cacher toute la barre :
Code : Tout sélectionner
Procedure.l IsToolWindow(window)
If GetWindowLong_(WindowID(window), #GWL_EXSTYLE) & #WS_EX_TOOLWINDOW
ProcedureReturn #True
EndIf
EndProcedure
Procedure.l ToolWindow(window.l, state.l = #True)
Protected hwnd.l = WindowID(window)
ShowWindow_(hwnd, #SW_HIDE)
If state
SetWindowLong_(hwnd, #GWL_STYLE, GetWindowLong_(hwnd, #GWL_STYLE) & (~#WS_BORDER))
SetWindowLong_(hwnd, #GWL_EXSTYLE, GetWindowLong_(hwnd, #GWL_EXSTYLE) | #WS_EX_TOOLWINDOW)
Else
SetWindowLong_(hwnd, #GWL_STYLE, GetWindowLong_(hwnd, #GWL_STYLE) | #WS_BORDER)
SetWindowLong_(hwnd, #GWL_EXSTYLE, GetWindowLong_(hwnd, #GWL_EXSTYLE) & (~#WS_EX_TOOLWINDOW))
EndIf
If SetWindowPos_(hwnd, 0, 0, 0, 0, 0, #SWP_NOSIZE|#SWP_NOMOVE|#SWP_SHOWWINDOW| #SWP_FRAMECHANGED)
ProcedureReturn #True
EndIf
EndProcedure
;-
If OpenWindow(0, 0, 0, 320, 240, "toolwindow", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
ButtonGadget(0, 5, 5, 150, 30, "ToolWindow On/Off", #PB_Button_Toggle)
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
ToolWindow(0, #True - IsToolWindow(0))
Case #WM_LBUTTONDOWN
If ChildWindowFromPoint_(WindowID(0), WindowMouseX(0), WindowMouseY(0)) = WindowID(0)
ReleaseCapture_()
SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, #Null)
EndIf
EndSelect
ForEver
EndIf