Question pour un Champion
Question pour un Champion
Bonjour à tous.
Aujourd'hui j'ai une question pour les champions ici présent.
Comment faire pour utiliser l'arrière plan d'un TreeGadget comme un screen pour afficher un model 3D ?
Pour ceux qui font de la CAO avec Catia V5, le même principe.
J'aimerais bien éviter de dessiner l'arbre avec les commandes 2D Drawing et des sprites au-dessus d'un screen. Ça risque d'être un vrai calvère à contrôler.
Merci à l'avance
Guimauve
Aujourd'hui j'ai une question pour les champions ici présent.
Comment faire pour utiliser l'arrière plan d'un TreeGadget comme un screen pour afficher un model 3D ?
Pour ceux qui font de la CAO avec Catia V5, le même principe.
J'aimerais bien éviter de dessiner l'arbre avec les commandes 2D Drawing et des sprites au-dessus d'un screen. Ça risque d'être un vrai calvère à contrôler.
Merci à l'avance
Guimauve
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
a part faire un zone séparée pour afficher l'arbre, comme sur solidworks (c'est une barres sur le coté gauche et on ne voit pas le dessin 3D dessous, c blanc)
sinon, pour faire comme sur catia, si tu arrives à mettre une images de fond au treegadget, ça doit être posible mais ... je sais pas faire.
à mon avis, vu la tronche de ce menu sous catia, il le dessine eu-même en 2D et je trouve ça moche
sinon, pour faire comme sur catia, si tu arrives à mettre une images de fond au treegadget, ça doit être posible mais ... je sais pas faire.
à mon avis, vu la tronche de ce menu sous catia, il le dessine eu-même en 2D et je trouve ça moche

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)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Tu n'es pas le seul, l'arbre n'est pas fixe dans la fenètre. De plus le texte des éléments de l'arbre prend beaucoup de place pour pas grand chose.à mon avis, vu la tronche de ce menu sous catia, il le dessine eu-même en 2D et je trouve ça moche
Si c'est pas facile de le faire, je vais me contenter d'avoir un TreeGadget à coté d'un screen.
Mais il doit y avoir un moyen d'y arriver. Je vais fouiller dans l'API.
Merci quand même.
Guillaume
si çà peut aider
le sujet est traité sur le forum anglais ici :
http://purebasic.myforums.net/viewtopic ... highlight=
ce code est de El_Choni et s'applique au ListIconGadget() :
peut etre peut on le modifier pour le TreeGadget() 

le sujet est traité sur le forum anglais ici :
http://purebasic.myforums.net/viewtopic ... highlight=
ce code est de El_Choni et s'applique au ListIconGadget() :
Code : Tout sélectionner
; English forum: http://purebasic.myforums.net/viewtopic.php?t=5208&highlight=
; Author: El_Choni
; Date: 25. February 2003
#LVBKIF_SOURCE_NONE = 0
#LVBKIF_SOURCE_HBITMAP = 1
#LVBKIF_SOURCE_URL = 2
#LVBKIF_SOURCE_MASK = 3
#LVBKIF_STYLE_NORMAL = 0
#LVBKIF_STYLE_TILE = $10
#LVBKIF_STYLE_MASK = $10
#LVM_SETBKIMAGE = #LVM_FIRST + 68
#LVM_SETBKIMAGEW = #LVM_FIRST + 138
#LVM_GETBKIMAGE = #LVM_FIRST + 69
#LVM_GETBKIMAGEW = #LVM_FIRST + 139
#CLR_NONE = -1
Structure LVBKIMAGE
ulFlags.l
hbm.l
pszImage.l
cchImageMax.l
xOffsetPercent.l
yOffsetPercent.l
EndStructure
OleInitialize_(0)
If OpenWindow(0, 384, 288, 640, 480, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget, "ListIconGadget background image example")
LVWidth = WindowWidth()
LVCWidth = Int(LVWidth/4)-1
If CreateGadgetList(WindowID())
ListIconGadget = ListIconGadget(0, 0, 0, LVWidth, WindowHeight(), "Column 0", LVCWidth, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
AddGadgetColumn(0, 1, "Column 1", LVCWidth)
AddGadgetColumn(0, 2, "Column 2", LVCWidth)
AddGadgetColumn(0, 3, "Column 3", LVCWidth)
AddGadgetItem(0, 0, "Aaa 1"+Chr(10)+"Bcc 3"+Chr(10)+"Cdd 2"+Chr(10)+"Eee 3"+Chr(10), 0)
AddGadgetItem(0, 1, "Aab 2"+Chr(10)+"Bbc 2"+Chr(10)+"Ddd 3"+Chr(10)+"Dde 1"+Chr(10), 0)
AddGadgetItem(0, 2, "Abb 3"+Chr(10)+"Baa 1"+Chr(10)+"Ccd 1"+Chr(10)+"Dee 2"+Chr(10), 0)
SendMessage_(ListIconGadget, #LVM_SETTEXTCOLOR, 0, $FF0000)
SendMessage_(ListIconGadget, #LVM_SETBKCOLOR, 0, #CLR_NONE)
SendMessage_(ListIconGadget, #LVM_SETTEXTBKCOLOR, 0, #CLR_NONE)
Buffer = AllocateMemory(512)
GetModuleFileName_(GetModuleHandle_(0), Buffer, 512)
InitialDir$ = GetPathPart(PeekS(Buffer))
FreeMemory(0)
File$ = OpenFileRequester("Select image", InitialDir$, "ListIcon supported images|*.bmp;*.ico;*.gif;*.jpg;*.wmf;*.emf", 0)
If File$
lbk.LVBKIMAGE
lbk\ulFlags = #LVBKIF_STYLE_NORMAL|#LVBKIF_SOURCE_URL;|#LVBKIF_STYLE_TILE
lbk\pszImage = @File$
; lbk\xOffsetPercent;
; lbk\yOffsetPercent;
SendMessage_(ListIconGadget, #LVM_SETBKIMAGE, 0, lbk)
EndIf
Repeat
EventID = WaitWindowEvent()
Until EventID = #PB_EventCloseWindow
EndIf
EndIf
OleUninitialize_()
End

Doc MSDN pour le ListIconGadget :
http://msdn.microsoft.com/library/en-us ... kimage.asp
et pour le TreeGadget :
http://msdn.microsoft.com/library/en-us ... kcolor.asp
et donc apparemment c pas possible car ya pas de message setbkimage pour le TreeGadget
http://msdn.microsoft.com/library/en-us ... kimage.asp
et pour le TreeGadget :
http://msdn.microsoft.com/library/en-us ... kcolor.asp
et donc apparemment c pas possible car ya pas de message setbkimage pour le TreeGadget

Il y a un example pour utiliser une image dans le treegadget aussi:
http://purebasic.myforums.net/viewtopic ... highlight=
http://purebasic.myforums.net/viewtopic ... highlight=
AH !!! Super !!
Ça marche très bien. Voici l'exemple provenant du forum anglais
Ça marche très bien. Voici l'exemple provenant du forum anglais
Code : Tout sélectionner
Global WindowID, OldTreeGadgetProc, hDC, mDC, m2DC, width, height, Painting
Declare TreeGadgetProc(hWnd, uMsg, wParam, lParam)
If OpenWindow(0, 128, 96, 640, 480, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget, "TreeGadget background image example")
WindowID = WindowID()
If CreateGadgetList(WindowID)
TreeGadget = TreeGadget(0, 0, 0, WindowWidth(), WindowHeight())
For k = 0 To 3
AddGadgetItem(0, -1, "General " + Str(k))
AddGadgetItem(0, -1, "ScreenMode")
OpenTreeGadgetNode(0)
AddGadgetItem(0, -1, "640*480")
AddGadgetItem(0, -1, "800*600")
AddGadgetItem(0, -1, "1024*768")
AddGadgetItem(0, -1, "1600*1200")
CloseTreeGadgetNode(0)
AddGadgetItem(0, -1, "Joystick")
Next
LoadImage(0, "prueba.bmp")
width = ImageWidth()
height = ImageHeight()
hDC = GetDC_(WindowID)
mDC = CreateCompatibleDC_(hDC)
mOldObject = SelectObject_(mDC, UseImage(0))
m2DC = CreateCompatibleDC_(hDC)
hmBitmap = CreateCompatibleBitmap_(hDC, width, height)
m2OldObject = SelectObject_(m2DC, hmBitmap)
ReleaseDC_(WindowID, hDC)
OldTreeGadgetProc = SetWindowLong_(TreeGadget, #GWL_WNDPROC, @TreeGadgetProc())
Repeat : Until WaitWindowEvent() = #PB_EventCloseWindow
SelectObject_(mDC, mOldObject)
DeleteDC_(mDC)
SelectObject_(m2DC, m2OldObject)
DeleteObject_(hmBitmap)
DeleteDC_(m2DC)
EndIf
EndIf
End
Procedure TreeGadgetProc(hWnd, uMsg, wParam, lParam)
result = 0
Select uMsg
Case #WM_ERASEBKGND
result = 1
Case #WM_PAINT
If Painting = 0
Painting = 1
; BeginPaint_(hWnd, ps.PAINTSTRUCT)
result = CallWindowProc_(OldTreeGadgetProc, hWnd, uMsg, m2DC, 0)
; BitBlt_(m2DC, ps\rcPaint\left, ps\rcPaint\top, ps\rcPaint\right-ps\rcPaint\left, ps\rcPaint\bottom-ps\rcPaint\top, mDC, ps\rcPaint\left, ps\rcPaint\top, #SRCAND)
BitBlt_(m2DC, 0, 0, width, height, mDC, 0, 0, #SRCAND)
hDC = GetDC_(hWnd)
; BitBlt_(hDC, ps\rcPaint\left, ps\rcPaint\top, ps\rcPaint\right-ps\rcPaint\left, ps\rcPaint\bottom-ps\rcPaint\top, m2DC, ps\rcPaint\left, ps\rcPaint\top, #SRCCOPY)
BitBlt_(hDC, 0, 0, width, height, m2DC, 0, 0, #SRCCOPY)
ReleaseDC_(hWnd, hDC)
; EndPaint_(hWnd, ps)
Painting = 0
EndIf
Default
result = CallWindowProc_(OldTreeGadgetProc, hWnd, uMsg, wParam, lParam)
EndSelect
ProcedureReturn result
EndProcedure
merci El_Choni, ton exemple marche bien !
je repost ici le source :
je repost ici le source :
Code : Tout sélectionner
Global WindowID, OldTreeGadgetProc, hDC, mDC, m2DC, width, height, Painting
Declare TreeGadgetProc(hWnd, uMsg, wParam, lParam)
If OpenWindow(0, 128, 96, 640, 480, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget, "TreeGadget background image example")
WindowID = WindowID()
If CreateGadgetList(WindowID)
TreeGadget = TreeGadget(0, 0, 0, WindowWidth(), WindowHeight())
For k = 0 To 3
AddGadgetItem(0, -1, "General " + Str(k))
AddGadgetItem(0, -1, "ScreenMode")
OpenTreeGadgetNode(0)
AddGadgetItem(0, -1, "640*480")
AddGadgetItem(0, -1, "800*600")
AddGadgetItem(0, -1, "1024*768")
AddGadgetItem(0, -1, "1600*1200")
CloseTreeGadgetNode(0)
AddGadgetItem(0, -1, "Joystick")
Next
LoadImage(0, "C:\MonImage.bmp")
width = ImageWidth()
height = ImageHeight()
hDC = GetDC_(WindowID)
mDC = CreateCompatibleDC_(hDC)
mOldObject = SelectObject_(mDC, UseImage(0))
m2DC = CreateCompatibleDC_(hDC)
hmBitmap = CreateCompatibleBitmap_(hDC, width, height)
m2OldObject = SelectObject_(m2DC, hmBitmap)
ReleaseDC_(WindowID, hDC)
OldTreeGadgetProc = SetWindowLong_(TreeGadget, #GWL_WNDPROC, @TreeGadgetProc())
Repeat : Until WaitWindowEvent() = #PB_EventCloseWindow
SelectObject_(mDC, mOldObject)
DeleteDC_(mDC)
SelectObject_(m2DC, m2OldObject)
DeleteObject_(hmBitmap)
DeleteDC_(m2DC)
EndIf
EndIf
End
Procedure TreeGadgetProc(hWnd, uMsg, wParam, lParam)
result = 0
Select uMsg
Case #WM_ERASEBKGND
result = 1
Case #WM_PAINT
If Painting = 0
Painting = 1
; BeginPaint_(hWnd, ps.PAINTSTRUCT)
result = CallWindowProc_(OldTreeGadgetProc, hWnd, uMsg, m2DC, 0)
; BitBlt_(m2DC, ps\rcPaint\left, ps\rcPaint\top, ps\rcPaint\right-ps\rcPaint\left, ps\rcPaint\bottom-ps\rcPaint\top, mDC, ps\rcPaint\left, ps\rcPaint\top, #SRCAND)
BitBlt_(m2DC, 0, 0, width, height, mDC, 0, 0, #SRCAND)
hDC = GetDC_(hWnd)
; BitBlt_(hDC, ps\rcPaint\left, ps\rcPaint\top, ps\rcPaint\right-ps\rcPaint\left, ps\rcPaint\bottom-ps\rcPaint\top, m2DC, ps\rcPaint\left, ps\rcPaint\top, #SRCCOPY)
BitBlt_(hDC, 0, 0, width, height, m2DC, 0, 0, #SRCCOPY)
ReleaseDC_(hWnd, hDC)
; EndPaint_(hWnd, ps)
Painting = 0
EndIf
Default
result = CallWindowProc_(OldTreeGadgetProc, hWnd, uMsg, wParam, lParam)
EndSelect
ProcedureReturn result
EndProcedure