Question pour un Champion

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Question pour un Champion

Message 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
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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:
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)]
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message 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
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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:
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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 :?
Image
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message 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
El_Choni
Messages : 46
Inscription : dim. 07/mars/2004 20:19
Localisation : Espagne

Message par El_Choni »

Il y a un example pour utiliser une image dans le treegadget aussi:

http://purebasic.myforums.net/viewtopic ... highlight=
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message 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
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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
Image
Répondre