Hallo Edel!
Wie muß die PanelGadget.pbi angepaßt werden,
damit sie auch auf Win7, x64 läuft?
			
			
									
									SetGadgetItemData & SetGadgetItemColor fuer Panel
- ts-soft
 - Beiträge: 22292
 - Registriert: 08.09.2004 00:57
 - Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
 
Re: SetGadgetItemData & SetGadgetItemColor fuer Panel
Structuren austauschen, gegen diese:
Alle SetWindowLong_ und GetWindowLong_ gegen SetWindowLongPtr_ und GetWindowLongPrt_ austauschen
und dann sollte es gehen.
			
			
									
									Code: Alles auswählen
;{ pb intern struct 
CompilerIf Defined(PB_GadgetVT, #PB_Structure) = #False 
  Structure PB_GadgetVT    
  GadgetType.l
  SizeOf.l  
  GadgetCallback.i 
  FreeGadget.i
  GetGadgetState.i 
  SetGadgetState.i 
  GetGadgetText.i
  SetGadgetText.i 
  AddGadgetItem2.i 
  AddGadgetItem3.i 
  RemoveGadgetItem.i 
  ClearGadgetItemList.i 
  ResizeGadget.i
  CountGadgetItems.i 
  GetGadgetItemState.i 
  SetGadgetItemState.i 
  GetGadgetItemText.i
  SetGadgetItemText.i 
  OpenGadgetList2.i
  GadgetX.i
  GadgetY.i 
  GadgetWidth.i 
  GadgetHeight.i 
  HideGadget.i
  AddGadgetColumn.i 
  RemoveGadgetColumn.i 
  GetGadgetAttribute.i 
  SetGadgetAttribute.i 
  GetGadgetItemAttribute2.i 
  SetGadgetItemAttribute2.i 
  SetGadgetColor.i
  GetGadgetColor.i 
  SetGadgetItemColor2.i 
  GetGadgetItemColor2.i 
  SetGadgetItemData.i
  GetGadgetItemData.i 
EndStructure 
CompilerEndIf 
 
CompilerIf Defined(PB_Gadget, #PB_Structure) = #False 
Structure PB_Gadget 
  Gadget.i
  *VT.PB_GadgetVT 
  UserData.i
  OldCallback.i
  Daten.i[4] 
EndStructure 
 
Structure PB_Panel_User_Data 
   user_data.i
   static_callback.i
EndStructure 
 
CompilerEndIf ;} und dann sollte es gehen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

						Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: SetGadgetItemData & SetGadgetItemColor fuer Panel
Hallo ts-soft!
Danke für die schnelle Antwort.
Es wird aber leider beim Compilieren bemängelt,
daß in dieser Strukturforecolor und backcolor fehlen.
Füge ich diese wie in der ursprünglichen *.pbi hinzu,
läßt sich das Programm mit der Include compilieren,
der Tab-Text läßt sich aber nicht einfärben, sondern
bleibt schwarz.
Ich habe sowohl forecolor.l und backcolor.l als auch
forecolor.i und backcolor.i ausprobiert.
			
			
									
									Danke für die schnelle Antwort.
Es wird aber leider beim Compilieren bemängelt,
daß in dieser Struktur
Code: Alles auswählen
Structure PB_Panel_User_Data
   user_data.i
   static_callback.i
EndStructure Füge ich diese wie in der ursprünglichen *.pbi hinzu,
läßt sich das Programm mit der Include compilieren,
der Tab-Text läßt sich aber nicht einfärben, sondern
bleibt schwarz.
Ich habe sowohl forecolor.l und backcolor.l als auch
forecolor.i und backcolor.i ausprobiert.

- ts-soft
 - Beiträge: 22292
 - Registriert: 08.09.2004 00:57
 - Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
 
Re: SetGadgetItemData & SetGadgetItemColor fuer Panel
In meiner Version hab ich den Color-Kram rausgeschmissen, den brauche ich nicht  
 
Die Funktioniert aber in x64 und x86. Vielleicht meldet sich edel ja noch.
			
			
									
									Die Funktioniert aber in x64 und x86. Vielleicht meldet sich edel ja noch.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

						Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: SetGadgetItemData & SetGadgetItemColor fuer Panel
Danke ts-soft.
Ich kann ja jetzt wenigstens mein Programm
wieder kompilieren. Kommt Zeit, kommt Farbe.
Ich warte dann mal auf edle Hilfe.
			
			
									
									Ich kann ja jetzt wenigstens mein Programm
wieder kompilieren. Kommt Zeit, kommt Farbe.
Ich warte dann mal auf edle Hilfe.

- ts-soft
 - Beiträge: 22292
 - Registriert: 08.09.2004 00:57
 - Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
 
Re: SetGadgetItemData & SetGadgetItemColor fuer Panel
Code: Alles auswählen
;{ pb intern struct 
EnableExplicit
CompilerIf Defined(PB_GadgetVT, #PB_Structure) = #False 
Structure PB_GadgetVT 
  GadgetType.l    
  SizeOf.l        
  GadgetCallback.i 
  FreeGadget.i 
  GetGadgetState.i 
  SetGadgetState.i 
  GetGadgetText.i 
  SetGadgetText.i 
  AddGadgetItem2.i 
  AddGadgetItem3.i 
  RemoveGadgetItem.i 
  ClearGadgetItemList.i 
  ResizeGadget.i 
  CountGadgetItems.i 
  GetGadgetItemState.i 
  SetGadgetItemState.i 
  GetGadgetItemText.i 
  SetGadgetItemText.i 
  OpenGadgetList2.i 
  GadgetX.i 
  GadgetY.i 
  GadgetWidth.i 
  GadgetHeight.i 
  HideGadget.i 
  AddGadgetColumn.i 
  RemoveGadgetColumn.i 
  GetGadgetAttribute.i 
  SetGadgetAttribute.i 
  GetGadgetItemAttribute2.i 
  SetGadgetItemAttribute2.i 
  SetGadgetColor.i 
  GetGadgetColor.i 
  SetGadgetItemColor2.i 
  GetGadgetItemColor2.i 
  SetGadgetItemData.i 
  GetGadgetItemData.i 
EndStructure 
CompilerEndIf 
 
CompilerIf Defined(PB_Gadget, #PB_Structure) = #False 
Structure PB_Gadget 
  Gadget.i 
  *VT.PB_GadgetVT 
  UserData.i 
  OldCallback.i 
  Daten.i[4] 
EndStructure 
 
Structure PB_Panel_User_Data 
   user_data.i 
   forecolor.l 
   backcolor.l 
   static_callback.i 
EndStructure 
 
CompilerEndIf ;} 
 
Declare PB_GetPanelStaticItem(*gadget.PB_Gadget   ,item) 
Declare PB_GetGadgetItemData (*gadget.PB_Gadget   ,item) 
Declare PB_SetGadgetItemData (*gadget.PB_Gadget   ,item,value) 
 
Procedure PB_PanelStaticCB(hwnd,msg,wparam,lparam) 
   Protected *pud.PB_Panel_User_Data    
   Protected callback.i 
    
   *pud        = GetWindowLongPtr_(hwnd,#GWL_USERDATA) 
   callback = *pud\static_callback 
    
   If #WM_DESTROY = msg 
      FreeMemory(*pud)      
   EndIf 
    
   ProcedureReturn CallWindowProc_(callback,hwnd,msg,wparam,lparam) 
EndProcedure 
 
Procedure PB_PanelParentCB(hwnd,msg,wparam,lparam) 
   Protected *pud.PB_Panel_User_Data    
   Protected *dis.DRAWITEMSTRUCT 
   Protected shWnd.i 
   Protected callback.i = GetProp_(hWnd,"_oldCallback") 
   Protected fore.l,back.l,backbrush.l,text.s 
    
    
   If #WM_DESTROY = msg                     		
      SetWindowLongPtr_(hWnd,#GWL_WNDPROC,callback) 
      RemoveProp_(hwnd,"_oldCallback")
   EndIf 
    
   If #WM_DRAWITEM = msg 
      *dis = lParam 
      If *dis\CtlType = #ODT_TAB 
         shWnd = PB_GetPanelStaticItem(IsGadget(*dis\CtlID),*dis\itemID) 
         *pud  = GetWindowLongPtr_(shWnd,#GWL_USERDATA)    
        
        If *pud                      
           fore = *pud\ForeColor 
           back = *pud\BackColor 
            
           If back = #PB_Default 
              back = GetSysColor_(#COLOR_BTNFACE)              
           EndIf 
            
           If fore = #PB_Default 
              fore = GetSysColor_(#COLOR_BTNTEXT)              
           EndIf            
            
        Else                    
           fore = GetSysColor_(#COLOR_BTNTEXT) 
           back = GetSysColor_(#COLOR_BTNFACE) 
        EndIf 
                
         backbrush = CreateSolidBrush_(back) 
          
         fore = SetTextColor_(*dis\hdc, fore)                
         FillRect_(*dis\hdc, *dis\rcItem, backbrush) 
         SetBkMode_(*dis\hdc, #TRANSPARENT) 
         text = GetGadgetItemText(*dis\CtlID,*dis\ItemID)                                  
         DrawText_(*dis\hdc, text, Len(text), *dis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER)            
         DeleteObject_(backbrush)            
          SetTextColor_(*dis\hdc, fore) 
          
          ProcedureReturn  0 
          
         EndIf 
          
   EndIf 
    
    
   ProcedureReturn CallWindowProc_(callback,hwnd,msg,wparam,lparam) 
EndProcedure 
 
Procedure PB_GetPanelStaticItem(*gadget.PB_Gadget   ,item) 
  Protected tci.TC_ITEM\mask = #TCIF_PARAM 
  If SendMessage_(*gadget\gadget   ,#TCM_GETITEM   ,item   ,@tci) 
    ProcedureReturn tci\lParam 
  EndIf 
EndProcedure 
 
Procedure PB_SetGadgetItemColor(*Gadget.PB_Gadget,item.l,ColorType.l,Color,col.l)    
   Protected hwnd = PB_GetPanelStaticItem(*gadget,item) 
   Protected *pud.PB_Panel_User_Data 
   Protected result.l,panel_callback.i 
    
   *pud = GetWindowLongPtr_(hwnd   ,#GWL_USERDATA) 
      
   If Not *pud 
      *pud = AllocateMemory(SizeOf(PB_Panel_User_Data)) 
      
      If Not *pud ; no memory 
         ProcedureReturn 0 
      EndIf 
      
      SetWindowLongPtr_(hwnd   ,#GWL_USERDATA,*pud) 
      *pud\static_callback = SetWindowLongPtr_(hwnd,#GWL_WNDPROC,@PB_PanelStaticCB()) 
      *pud\ForeColor = -1 
      *pud\BackColor = -1      
      
   EndIf 
    
   panel_callback = GetProp_(GetParent_(*Gadget\gadget),"_oldCallback") 
    
   If Not panel_callback 
      panel_callback = SetWindowLongPtr_(GetParent_(*Gadget\gadget),#GWL_WNDPROC,@PB_PanelParentCB()) 
   EndIf    
    
   SetWindowLongPtr_(*Gadget\gadget, #GWL_STYLE, GetWindowLongPtr_(*Gadget\gadget, #GWL_STYLE) | #TCS_OWNERDRAWFIXED) 
    
   SetProp_(GetParent_(*Gadget\gadget),"_oldCallback",panel_callback)      
    
   Select ColorType 
      Case #PB_Gadget_FrontColor 
         *pud\ForeColor = color 
      Case #PB_Gadget_BackColor 
         *pud\BackColor  = color 
   EndSelect 
          
   SetWindowPos_(*Gadget\gadget,0,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE|#SWP_NOZORDER|#SWP_FRAMECHANGED)      
EndProcedure 
 
Procedure PB_GetGadgetItemColor(*Gadget.PB_Gadget,item.l,ColorType.l,col.l)    
   Protected hwnd = PB_GetPanelStaticItem(*gadget,item) 
   Protected *pud.PB_Panel_User_Data 
   Protected result.l 
    
   *pud = GetWindowLongPtr_(hwnd   ,#GWL_USERDATA) 
      
   Select ColorType 
      Case #PB_Gadget_FrontColor 
         result = *pud\ForeColor 
      Case #PB_Gadget_BackColor 
         result = *pud\BackColor 
   EndSelect    
    
   ProcedureReturn result 
EndProcedure 
 
Procedure PB_GetGadgetItemData(*gadget.PB_Gadget   ,item) 
   Protected hwnd = PB_GetPanelStaticItem(*gadget   ,item) 
   Protected *pud.PB_Panel_User_Data    
   If hwnd 
      *pud = GetWindowLongPtr_(hwnd   ,#GWL_USERDATA)      
      If *pud 
         ProcedureReturn *pud\user_data 
      EndIf 
   EndIf 
EndProcedure 
 
Procedure PB_SetGadgetItemData(*gadget.PB_Gadget,item,value) 
   Protected hwnd = PB_GetPanelStaticItem(*gadget,item) 
   Protected *pud.PB_Panel_User_Data 
   Protected result.l 
    
   *pud = GetWindowLongPtr_(hwnd,#GWL_USERDATA) 
    
   If Not *pud 
      *pud = AllocateMemory(SizeOf(PB_Panel_User_Data)) 
      
      If Not *pud ; no memory 
         ProcedureReturn 0 
      EndIf 
            
      SetWindowLongPtr_(hwnd   ,#GWL_USERDATA,*pud) 
      *pud\static_callback = SetWindowLongPtr_(hwnd,#GWL_WNDPROC,@PB_PanelStaticCB()) 
      *pud\ForeColor = -1 
      *pud\BackColor = -1 
   EndIf 
    
   result              =    *pud\user_data      
   *pud\user_data =    value    
    
   ProcedureReturn result 
EndProcedure 
 
Procedure PB_PanelGadget(id.i   ,x.l   ,y.l   ,cx.l   ,cy.l) 
   Protected value = PanelGadget(id,x,y,cx,cy) 
   Protected *gadget.PB_Gadget 
    
   If id = #PB_Any 
      id = value 
   EndIf 
    
   *gadget = IsGadget(id) 
    
   If *gadget 
      *gadget\vt\SetGadgetItemData   = @PB_SetGadgetItemData() 
      *gadget\vt\GetGadgetItemData   = @PB_GetGadgetItemData() 
      *gadget\vt\SetGadgetItemColor2 = @PB_SetGadgetItemColor() 
      *gadget\vt\GetGadgetItemColor2 = @PB_GetGadgetItemColor() 
   EndIf 
    
   ProcedureReturn value 
EndProcedure 
 
Macro PanelGadget 
   PB_PanelGadget 
EndMacro 
// edit
kleinere Fehler beseitigt.
					Zuletzt geändert von ts-soft am 05.01.2011 13:22, insgesamt 1-mal geändert.
									
			
									PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

						Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: SetGadgetItemData & SetGadgetItemColor fuer Panel
Das war jetzt wirklich edel schnelle Hilfe.
Die Include läuft jetzt wieder wie sie soll.
Ich danke Dir dafür.
			
			
									
									Die Include läuft jetzt wieder wie sie soll.
Ich danke Dir dafür.
