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.

