PanelGadget Vertical

Programmation d'applications complexes
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

PanelGadget Vertical

Message par Le Soldat Inconnu »

Salut,

j'ai fait quelque essai mais sans réussite, si l'un de vous trouve pourquoi ça plante

Code : Tout sélectionner

Enumeration
  #Panel
EndEnumeration

#TCS_VERTICAL = $80
#TCS_FLATBUTTONS = $8
#TCS_SCROLLOPPOSITE = $1
#TCS_RIGHT = $2
#TCS_MULTISELECT = $4

Procedure SetStyle(Handle, style.l)
  SetWindowLong_(Handle, #GWL_STYLE, GetWindowLong_(Handle, #GWL_STYLE) | style)
EndProcedure

#TailleX = 300
#TailleY = 300

; Création de la fenêtre et dela GadgetList
If OpenWindow(0, 0, 0, #TailleX - 1, #TailleY - 1, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Extension") = 0 Or CreateGadgetList(WindowID()) = 0
  End
EndIf

SetWindowLong_(WindowID(), #GWL_EXSTYLE, GetWindowLong_(WindowID(), #GWL_EXSTYLE) | #WS_EX_TOOLWINDOW) ; choix de la barre d'outil réduite
ResizeWindow(#TailleX, #TailleY) ; redimensionne la fenetre
ResizeWindow(#TailleX, 2 * #TailleY - WindowHeight())
SetWindowPos_(WindowID(), -1, 0, 0, 0, 0, #SWP_NOSIZE | #SWP_NOMOVE) ; mets la fenêtre toujours au premier plan
ShowWindow_(WindowID(), #SW_SHOW) ; montre la fenêtre

PanelGadget(#Panel, 0, 0, 300, 300)
  AddGadgetItem(#Panel, -1, "Dossier 1")
  AddGadgetItem(#Panel, -1, "Dossier 2")
  AddGadgetItem(#Panel, -1, Space(28))
  AddGadgetItem(#Panel, -1, Space(0))
CloseGadgetList()

SetStyle(GadgetID(#Panel), #TCS_VERTICAL) 

SetGadgetState(#Panel, 0)

Repeat
  Event = WaitWindowEvent()
  
  If Event = #PB_EventMenu
    Select EventMenuID() ; menu et barre d'outils
        
    EndSelect
  EndIf
  
  If Event = #PB_EventGadget
    Select EventGadgetID() ; boutons, zone de texte, ...
        
    EndSelect
  EndIf
  
Until Event = #PB_EventCloseWindow

End
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Non, j'ai déjà essayé, ça ne fonctionne pas a cause de la version de ComCtl32.dll.

Il faut une version antérieure à la 6.0
Bilou a écrit :TCS_VERTICAL
Version 4.70. Tabs appear at the left side of the control, with tab text displayed vertically. This style is valid only when used with the TCS_MULTILINE style. To make tabs appear on the right side of the control, also use the TCS_RIGHT style. This style is not supported if you use ComCtl32.dll version 6
Chris :)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

en clair, avec win 3.1 ça marchait et avec win 2000 ou xp, c'est plus possible, c bien ça en gros :?

ils sont co.. chez MS ou quoi :silly:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ben selon le sdk, c'est un peu ça :lol:

En fait, si j'ai bien compris, ça fonctionnerait depuis Win95 avec IE 3.x
jusqu'à Win 2000 avec IE 5.x, mais pas avec XP et sa version 6 :?

Pourtant, il y a bien des onglet verticaux dans certains progs qui fonctionnent sous XP.

Surement avec une autre méthode, mais j'ai pas cherché à comprendre :lol:

Chris :)
DominiqueB
Messages : 47
Inscription : sam. 01/mai/2004 14:41

Salut

Message par DominiqueB »

J'ai lu l'aide windows (un peu), et d'après ce que j'ai compris les versions 5 et 6 du ComCtl32.dll sont livrées avec XP. Le TCS_VERTICAL n'est pas supporté par la version 6 du ComCtl32.dll. Hors il ne sera utilisé par ton application que si tu dis à XP de le faire, c'est à dire si tu utilise un .manifest. Autrement XP utilisera la version 5: "By default, applications use the user controls defined in User32.dll and the common controls defined in ComCtl32.dll version 5." dixit le sdk win32.
Donc tu dois pouvoir utiliser un onglet Vertical, si tu n'utilise pas de manifest, donc pas de skin XP!

Une autre précision: tu dois combiner le style TCS_MULTILINE TCS_VERTICAL pour obtenir un onglet vertical. De plus remplace les texte de tes onglets par "1", "2", "3", "4" cela tiendra mieux dans leur largeur verticale. Aussi, le déplacement (avec ton code) fonctionne avec les touches "flèche basse" et "flèche haute", je penses que l'activation d'un onglet par la souris doit être géré par code.

Voili-voilà...

Moi une fois modifié ton code comme je l'ais écris, ca marche.
Merci pour l'idée, et pour le code.

Dominique
Dominique
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

euh, c'est pas une histoire d'XP, car ça ne marche pas non plus sous 2000.
et le TCS_MULTILINE ne sert à rien du tout, ça ne change absolument rien chez moi :(

par contre, tu as raison, on peut changer d'onglet avec le clavier.

y'a un truc bizarre quand même

autre chose, si j'applique ce style #TCS_BUTTONS | #TCS_FLATBUTTONS sous XP avec le support des thème, y'a de gros problème lors du dessin des gadgets. Fred, c'est normal ?
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

peut etre que le PanelGadget() programmé par Fred n'est il pas tout a fait 100% compatible API windows...

il faudrait essayer de construire ce panelgadget avec des fonctions de l'api uniquement et observer le comportement...
Image
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

J'avais commencé, ça a l'air de fonctionner.

Code : Tout sélectionner

;Structures
Structure MyTC_ITEM
  Mask.l
  lpReserved1.l
  lpReserved2.l
  pszText.s
  cchTextMax.l
  iImage.l
  lParam.l
EndStructure

;/ Constantes
#Window_0 = 0
#Null = 0

; #TCS_SCROLLOPPOSITE = $0001;   // assumes multiline tab
#TCS_BOTTOM = $0002
; #TCS_RIGHT = $0002
; #TCS_MULTISELECT = $0004;  // allow multi-Select in button mode
; #TCS_FLATBUTTONS = $0008
; #TCS_FORCEICONLEFT = $0010
; #TCS_FORCELABELLEFT = $0020
; #TCS_HOTTRACK = $0040
#TCS_VERTICAL = $0080
; #TCS_TABS = $0000
; #TCS_BUTTONS = $0100
; #TCS_SINGLELINE = $0000
#TCS_MULTILINE = $0200
; #TCS_RIGHTJUSTIFY = $0000
; #TCS_FIXEDWIDTH = $0400
; #TCS_RAGGEDRIGHT = $0800
; #TCS_FOCUSONBUTTONDOWN = $1000
; #TCS_OWNERDRAWFIXED = $2000
; #TCS_TOOLTIPS = $4000
; #TCS_FOCUSNEVER = $8000

; #Style = #WS_CHILD | #WS_VISIBLE | #TCS_BOTTOM                  ; Pour les onglets en bas
#Style = #WS_CHILD | #WS_VISIBLE |#TCS_MULTILINE|#TCS_VERTICAL  ;¨Pour les onglets verticaux

;/ Déclaration des variables

DefType.l hwnd, hInstance,hWndTab
DefType.w x2,y2

Global hwnd, hWndTab, hInstance
tab.TC_ITEM

;- Programme

; Ouvre une fenêtre, et récupère le handle
hwnd = OpenWindow(#Window_0, 300, 300, 300, 300, #PB_Window_SystemMenu , "Main Window",0)

; Retrouve l'instance de l'application en cours
hInstance = GetWindowLong_(hwnd,#GWL_HINSTANCE)

; Récupère les coordonnées de la zone client de la fenêtre
GetClientRect_(hwnd,@rcClient.RECT): x2 = rcClient\right : y2 = rcClient\bottom - 50

; Vérifie que la dll est bien chargée
InitCommonControls_()

; Crée le TabControl, et récupère son handle
hWndTab = CreateWindowEx_(0,"SysTabControl32","",#Style,0,0,x2,y2,hwnd,#Null,hInstance,#Null)

; Crée les onglets
tab\Mask = #TCIF_TEXT | #TCIF_IMAGE; 
tab\iImage = -1 

Titre1.s = "Onglet 1"
tab\pszText = @Titre1
Res1 = SendMessage_(hWndTab,#TCM_INSERTITEM,0,@tab)

Titre2.s = "Onglet 2"    
tab\pszText = @Titre2
Res2 = SendMessage_(hWndTab,#TCM_INSERTITEM,1,@tab)

Titre3.s = "Onglet 3"    
tab\pszText = @Titre3
Res3 = SendMessage_(hWndTab,#TCM_INSERTITEM,2,@tab)

;- Boucle
  Repeat
    Select WindowEvent()
      Case #PB_EventCloseWindow : End
    EndSelect
  ForEver
Si ça interesse quelqu'un de continuer!

Chris :)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

bravo chris

c exactement çà ! maintenant ya plus qu'a regarder les differences avec le code de regis...
Image
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ce code doit bien avoir au moins six mois, (on avait encore le forum de Cederavic) ;)

Chris :)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

:?:
mais du coup comment rajouté une liste de gadgets à chaque onglet...
Image
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ca j'ai pas regardé, le but de départ était de voir si les onglets verticaux fonctionnaient.

Il faut certainement créer un static pour chaque onglet, qui apparaît selon l'onglet selectionné, et qui contient les contrôles!

Mais à mon avis, à partir du moment ou tu as commencé à coder ce genre de truc en utilisant l'Api, ça doit être dur de revenir dans les commandes standard de Pure.

Par contre, une fois codé et terminé, ça pourrait faire un bon début de lib pour des gadgets étendus, non?

Chris :)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Chris a écrit :Par contre, une fois codé et terminé, ça pourrait faire un bon début de lib pour des gadgets étendus, non?

Chris :)
oui c clair
Image
Répondre