Page 1 sur 1

Question pour un Champion

Publié : sam. 01/mai/2004 17:20
par Guimauve
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

Publié : sam. 01/mai/2004 22:47
par Le Soldat Inconnu
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 :wink:

Publié : sam. 01/mai/2004 23:40
par Guimauve
à mon avis, vu la tronche de ce menu sous catia, il le dessine eu-même en 2D et je trouve ça moche
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.

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

Publié : dim. 02/mai/2004 0:16
par Flype
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() :

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
peut etre peut on le modifier pour le TreeGadget() :roll:

Publié : dim. 02/mai/2004 0:20
par Flype
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 :?

Publié : dim. 02/mai/2004 3:29
par Guimauve
Pour faire ce que je veux faire je pense que la seule solution est de coder mon Treegadget() avec les commandes 2D Drawing et des sprites.

La solution la plus simple est bien sûr d'utiliser le TreeGadget standard juste à cote d'un screen.

Merci pour les infos, ¸elles vont me servir.

A+
Guimauve

Publié : dim. 02/mai/2004 14:11
par El_Choni
Il y a un example pour utiliser une image dans le treegadget aussi:

http://purebasic.myforums.net/viewtopic ... highlight=

Publié : dim. 02/mai/2004 14:25
par Guimauve
AH !!! Super !!

Ç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

Publié : dim. 02/mai/2004 14:25
par Flype
merci El_Choni, ton exemple marche bien !

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