Codejock SkinFramework Wrapper (Skinning) [Windows only]

Share your advanced PureBasic knowledge/code with the community.
Toni6
User
User
Posts: 45
Joined: Mon Apr 23, 2012 1:39 pm

Codejock SkinFramework Wrapper (Skinning) [Windows only]

Post by Toni6 »

Image

Image

This is for Codejock Xtreme ToolkitPro (http://www.codejock.com)
Note this is a partial wrapper not a complete one.

SkinFramework.pbi

Code: Select all

;======================================================================
; Library:         SkinFramework.pbi
; 
; Author:          Toni6
; Co-Author:       
; Offcut:          
; Date:            30/12/2012
; Version:         1.0
; Target Compiler: PureBasic 5.00+
; Target OS:       Windows
; License:         Public
;                  Use at your own risk
;======================================================================

CompilerIf Defined(CODEJOCK_SKINFRAMEWORK_H,#PB_Constant) = 0
#CODEJOCK_SKINFRAMEWORK_H = 1

;-CONSTANTS
#CODEJOCK_PATH = "C:\Program Files (x86)\Codejock Software\MFC\Xtreme ToolkitPro v15.3.1\" ; <- you may need to change this!

CompilerIf #PB_Compiler_Unicode
  #CODEJOCK_LIB = #CODEJOCK_PATH + "Lib\vc100\ToolkitPro1531vc100U.lib"
CompilerElse
  #CODEJOCK_LIB = #CODEJOCK_PATH + "Lib\vc100\ToolkitPro1531vc100.lib"
CompilerEndIf

;-ENUMS
Enumeration 2 ; XTPSkinApplyOptions 
  #xtpSkinApplyMetrics = 1
  #xtpSkinApplyFrame = 2
  #xtpSkinApplyColors = 4
  #xtpSkinApplyMenus = 8
EndEnumeration

;-IMPORTS
ImportC #CODEJOCK_LIB
  XTPSkinManager() As "?XTPSkinManager@@YAPAVCXTPSkinManager@@XZ"
EndImport

Import #CODEJOCK_LIB ; __thiscall - *this goes to ecx
  XTPSkinManager_ApplyColorFilter(clr.l) As "?ApplyColorFilter@CXTPSkinManager@@QAEXAAK@Z"
  XTPSkinManager_ApplyWindow(hWnd.i) As "?ApplyWindow@CXTPSkinManager@@QAEXPAUHWND__@@@Z"
  XTPSkinManager_EnableCurrentThread() As "?EnableCurrentThread@CXTPSkinManager@@QAEXXZ"
  XTPSkinManager_EnableThemeDialogTexture.l(hWnd.i, dwFlags.l) As "?EnableThemeDialogTexture@CXTPSkinManager@@QAEJPAUHWND__@@K@Z"
  
  CompilerIf #PB_Compiler_Unicode
    XTPSkinManager_ExcludeModule(lpszModule.p-unicode) As "?ExcludeModule@CXTPSkinManager@@QAEXPB_W@Z"
  CompilerElse
    XTPSkinManager_ExcludeModule(lpszModule.p-ascii) As "?ExcludeModule@CXTPSkinManager@@QAEXPBD@Z"
  CompilerEndIf
  
  XTPSkinManager_FreeSkinData() As "?FreeSkinData@CXTPSkinManager@@IAEXXZ"
  XTPSkinManager_GetApplyOptions.l() As "?GetApplyOptions@CXTPSkinManager@@QBEKXZ"
  XTPSkinManager_GetAutoApplyNewThreads.l() As "?GetAutoApplyNewThreads@CXTPSkinManager@@QBEHXZ"
  XTPSkinManager_GetAutoApplyNewWindows.l() As "?GetAutoApplyNewWindows@CXTPSkinManager@@QBEHXZ"
  XTPSkinManager_GetThemeSysBool.l(iBoolId.l) As "?GetThemeSysBool@CXTPSkinManager@@QAEHH@Z"
  XTPSkinManager_GetThemeSysColor.l(iColorId.l) As "?GetThemeSysColor@CXTPSkinManager@@QAEKH@Z"
  
  CompilerIf #PB_Compiler_Unicode
    XTPSkinManager_GetThemeSysFont.l(iFontId.l, *plf) As "?GetThemeSysFont@CXTPSkinManager@@QAEJHPAUtagLOGFONTW@@@Z"
  CompilerElse
    XTPSkinManager_GetThemeSysFont.l(iFontId.l, *plf) As "?GetThemeSysFont@CXTPSkinManager@@QAEJHPAUtagLOGFONTA@@@Z"
  CompilerEndIf
  
  XTPSkinManager_GetThemeSysSize.l(iSizeId.l) As "?GetThemeSysSize@CXTPSkinManager@@QAEHH@Z"
  XTPSkinManager_IsColorFilterExists.l() As "?IsColorFilterExists@CXTPSkinManager@@QBEHXZ"
  XTPSkinManager_IsComCtlV6.l() As "?IsComCtlV6@CXTPSkinManager@@QBEHXZ"
  XTPSkinManager_IsEnabled.l() As "?IsEnabled@CXTPSkinManager@@QBEHXZ"
  XTPSkinManager_IsWin9x.l() As "?IsWin9x@CXTPSkinManager@@QBEHXZ"
  
  CompilerIf #PB_Compiler_Unicode
    XTPSkinManager_LoadSkin.l(lpszResourcePath.p-unicode, lpszIniFileName.p-unicode) As "?LoadSkin@CXTPSkinManager@@QAEHPB_W0@Z"
  CompilerElse
    XTPSkinManager_LoadSkin.l(lpszResourcePath.p-ascii, lpszIniFileName.p-ascii) As "?LoadSkin@CXTPSkinManager@@QAEHPBD0@Z"
  CompilerEndIf
    
  XTPSkinManager_RedrawAllControls() As "?RedrawAllControls@CXTPSkinManager@@QAEXXZ"
  XTPSkinManager_Remove(hWnd.i) As "?Remove@CXTPSkinManager@@QAEXPAUHWND__@@@Z"
  XTPSkinManager_RemoveAll(bDetach.l = #True) As "?RemoveAll@CXTPSkinManager@@QAEXH@Z"
  XTPSkinManager_RemoveColorFilters() As "?RemoveColorFilters@CXTPSkinManager@@QAEXXZ"
  XTPSkinManager_SetApplyOptions(dwOptions.l) As "?SetApplyOptions@CXTPSkinManager@@QAEXK@Z"
  XTPSkinManager_SetAutoApplyNewThreads(bAutoApply.l) As "?SetAutoApplyNewThreads@CXTPSkinManager@@QAEXH@Z"
  XTPSkinManager_SetAutoApplyNewWindows(bAutoApply.l) As "?SetAutoApplyNewWindows@CXTPSkinManager@@QAEXH@Z"
EndImport

;-INTERFACES
Interface CSkinFramework
  Free()
  
  ApplyColorFilter(clr.l)
  ApplyWindow(hWnd.i)
  EnableCurrentThread()
  EnableThemeDialogTexture.l(hWnd.i, dwFlags.l)
  ExcludeModule(lpszModule.s)
  FreeSkinData()
  
  GetApplyOptions.l()
  GetAutoApplyNewThreads.l()
  GetAutoApplyNewWindows.l()
  GetThemeSysBool.l(iBoolId.l)
  GetThemeSysColor.l(iColorId.l)
  GetThemeSysFont.l(iFontId.l, *plf)
  GetThemeSysSize.l(iSizeId.l)
  
  IsColorFilterExists.l()
  IsComCtlV6.l()
  IsEnabled.l()
  IsWin9x.l()
  
  LoadSkin.l(lpszResourcePath.s, lpszIniFileName.s = "")
  RedrawAllControls()
  Remove(hWnd.i)
  RemoveAll(bDetach.l = #True)
  RemoveColorFilters()
  SetApplyOptions(dwOptions.l)
  SetAutoApplyNewThreads(bAutoApply.l)
  SetAutoApplyNewWindows(bAutoApply.l)
EndInterface

;- STRUCTURES
Structure _CSkinFramework
  *vTable
  *this.CSkinFramework
  
  *pXTPSkinManager
EndStructure

;-=====================================================-
;-CONSTRUCTOR
;-=====================================================-

Procedure.i New_CSkinFramework()
  Protected *obj._CSkinFramework
  
  *obj = AllocateMemory(SizeOf(_CSkinFramework))
  
  If *obj
    InitializeStructure(*obj, _CSkinFramework)
    *obj\vTable = ?vTable_CSkinFramework
    *obj\this = *obj

    *obj\pXTPSkinManager = XTPSkinManager()
  EndIf
  
  ProcedureReturn *obj
EndProcedure

;-=====================================================-
;-DESTRUCTOR
;-=====================================================-

Procedure CSkinFramework_Free(*this._CSkinFramework)
  *this\this\SetAutoApplyNewThreads(0)
  *this\this\SetAutoApplyNewWindows(0)
  
  *this\this\RemoveAll()
  *this\this\FreeSkinData()
  *this\this\LoadSkin("")
  
  ClearStructure(*this, _CSkinFramework)
  FreeMemory(*this)
EndProcedure

;-=====================================================-
;-CLASS METHODS
;-=====================================================-

EnableASM

Procedure CSkinFramework_ApplyColorFilter(*this._CSkinFramework, clr.l)
  MOV ECX, *this\pXTPSkinManager
  XTPSkinManager_ApplyColorFilter(clr)
EndProcedure

Procedure CSkinFramework_ApplyWindow(*this._CSkinFramework, hWnd.i)
  MOV ECX, *this\pXTPSkinManager
  XTPSkinManager_ApplyWindow(hWnd)
EndProcedure

Procedure CSkinFramework_EnableCurrentThread(*this._CSkinFramework)
  MOV ECX, *this\pXTPSkinManager
  XTPSkinManager_EnableCurrentThread()
EndProcedure

Procedure.l CSkinFramework_EnableThemeDialogTexture(*this._CSkinFramework, hWnd.i, dwFlags.l)
  Protected Result.l
  
  MOV ECX, *this\pXTPSkinManager
  Result = XTPSkinManager_EnableThemeDialogTexture(hWnd.i, dwFlags.l)
  
  ProcedureReturn Result
EndProcedure

Procedure CSkinFramework_ExcludeModule(*this._CSkinFramework, lpszModule.s)
  MOV ECX, *this\pXTPSkinManager
  XTPSkinManager_ExcludeModule(lpszModule)
EndProcedure

Procedure CSkinFramework_FreeSkinData(*this._CSkinFramework)
  MOV ECX, *this\pXTPSkinManager
  XTPSkinManager_FreeSkinData()
EndProcedure

Procedure.l CSkinFramework_GetApplyOptions(*this._CSkinFramework)
  Protected Result.l

  MOV ECX, *this\pXTPSkinManager
  Result = XTPSkinManager_GetApplyOptions()
  
  ProcedureReturn Result
EndProcedure

Procedure.l CSkinFramework_GetAutoApplyNewThreads(*this._CSkinFramework)
  Protected Result.l
  
  MOV ECX, *this\pXTPSkinManager
  Result = XTPSkinManager_GetAutoApplyNewThreads()
  
  ProcedureReturn Result
EndProcedure

Procedure.l CSkinFramework_GetAutoApplyNewWindows(*this._CSkinFramework)
  Protected Result.l
  
  MOV ECX, *this\pXTPSkinManager
  Result = XTPSkinManager_GetAutoApplyNewWindows()
  
  ProcedureReturn Result
EndProcedure

Procedure.l CSkinFramework_GetThemeSysBool(*this._CSkinFramework, iBoolId.l)
  Protected Result.l
  
  MOV ECX, *this\pXTPSkinManager
  Result = XTPSkinManager_GetThemeSysBool(iBoolId)
  
  ProcedureReturn Result
EndProcedure

Procedure.l CSkinFramework_GetThemeSysColor(*this._CSkinFramework, iColorId.l)
  Protected Result.l
  
  MOV ECX, *this\pXTPSkinManager
  Result = XTPSkinManager_GetThemeSysColor(iColorId)
  
  ProcedureReturn Result
EndProcedure

Procedure.l CSkinFramework_GetThemeSysFont(*this._CSkinFramework, iFontId.l, *plf)
  Protected Result.l
  
  MOV ECX, *this\pXTPSkinManager
  Result = XTPSkinManager_GetThemeSysFont(iFontId, *plf)
  
  ProcedureReturn Result
EndProcedure

Procedure.l CSkinFramework_GetThemeSysSize(*this._CSkinFramework, iSizeId.l)
  Protected Result.l
  
  MOV ECX, *this\pXTPSkinManager
  Result = XTPSkinManager_GetThemeSysSize(iSizeId)
  
  ProcedureReturn Result
EndProcedure

Procedure.l CSkinFramework_IsColorFilterExists(*this._CSkinFramework)
  Protected Result.l
  
  MOV ECX, *this\pXTPSkinManager
  Result = XTPSkinManager_IsColorFilterExists()
  
  ProcedureReturn Result
EndProcedure

Procedure.l CSkinFramework_IsComCtlV6(*this._CSkinFramework)
  Protected Result.l
  
  MOV ECX, *this\pXTPSkinManager
  Result = XTPSkinManager_IsComCtlV6()
  
  ProcedureReturn Result
EndProcedure

Procedure.l CSkinFramework_IsEnabled(*this._CSkinFramework)
  Protected Result.l
  
  MOV ECX, *this\pXTPSkinManager
  Result = XTPSkinManager_IsEnabled()
  
  ProcedureReturn Result
EndProcedure

Procedure.l CSkinFramework_IsWin9x(*this._CSkinFramework)
  Protected Result.l
  
  MOV ECX, *this\pXTPSkinManager
  Result = XTPSkinManager_IsWin9x()
  
  ProcedureReturn Result
EndProcedure

Procedure.l CSkinFramework_LoadSkin(*this._CSkinFramework, lpszResourcePath.s, lpszIniFileName.s = "")
  Protected Result.l
  
  MOV ECX, *this\pXTPSkinManager
  Result = XTPSkinManager_LoadSkin(lpszResourcePath, lpszIniFileName)
  
  ProcedureReturn Result
EndProcedure

Procedure CSkinFramework_RedrawAllControls(*this._CSkinFramework)
  MOV ECX, *this\pXTPSkinManager
  XTPSkinManager_RedrawAllControls()
EndProcedure

Procedure CSkinFramework_Remove(*this._CSkinFramework, hWnd.i)
  MOV ECX, *this\pXTPSkinManager
  XTPSkinManager_Remove(hWnd)
EndProcedure

Procedure CSkinFramework_RemoveAll(*this._CSkinFramework, bDetach.l = #True)
  MOV ECX, *this\pXTPSkinManager
  XTPSkinManager_RemoveAll(bDetach)
EndProcedure

Procedure CSkinFramework_RemoveColorFilters(*this._CSkinFramework)
  MOV ECX, *this\pXTPSkinManager
  XTPSkinManager_RemoveColorFilters()
EndProcedure

Procedure CSkinFramework_SetApplyOptions(*this._CSkinFramework, dwOptions.l)
  MOV ECX, *this\pXTPSkinManager
  XTPSkinManager_SetApplyOptions(dwOptions)
EndProcedure

Procedure CSkinFramework_SetAutoApplyNewThreads(*this._CSkinFramework, bAutoApply.l)
  MOV ECX, *this\pXTPSkinManager
  XTPSkinManager_SetAutoApplyNewThreads(bAutoApply)
EndProcedure

Procedure CSkinFramework_SetAutoApplyNewWindows(*this._CSkinFramework, bAutoApply.l)
  MOV ECX, *this\pXTPSkinManager
  XTPSkinManager_SetAutoApplyNewWindows(bAutoApply)
EndProcedure

DisableASM

;-=====================================================-
;-VTABLE
;-=====================================================-

DataSection
  vTable_CSkinFramework:
  Data.i @CSkinFramework_Free()
  
  Data.i @CSkinFramework_ApplyColorFilter()
  Data.i @CSkinFramework_ApplyWindow()
  Data.i @CSkinFramework_EnableCurrentThread()
  Data.i @CSkinFramework_EnableThemeDialogTexture()
  Data.i @CSkinFramework_ExcludeModule()
  Data.i @CSkinFramework_FreeSkinData()
  Data.i @CSkinFramework_GetApplyOptions()
  Data.i @CSkinFramework_GetAutoApplyNewThreads()
  Data.i @CSkinFramework_GetAutoApplyNewWindows()
  Data.i @CSkinFramework_GetThemeSysBool()
  Data.i @CSkinFramework_GetThemeSysColor()
  Data.i @CSkinFramework_GetThemeSysFont()
  Data.i @CSkinFramework_GetThemeSysSize()
  Data.i @CSkinFramework_IsColorFilterExists()
  Data.i @CSkinFramework_IsComCtlV6()
  Data.i @CSkinFramework_IsEnabled()
  Data.i @CSkinFramework_IsWin9x()
  Data.i @CSkinFramework_LoadSkin()
  Data.i @CSkinFramework_RedrawAllControls()
  Data.i @CSkinFramework_Remove()
  Data.i @CSkinFramework_RemoveAll()
  Data.i @CSkinFramework_RemoveColorFilters()
  Data.i @CSkinFramework_SetApplyOptions()
  Data.i @CSkinFramework_SetAutoApplyNewThreads()
  Data.i @CSkinFramework_SetAutoApplyNewWindows()
EndDataSection

CompilerEndIf
Example 1:

Code: Select all

XIncludeFile "..\SkinFramework.pbi"

Global Window_0
Global Button_0, Button_1, Text_0, String_0

Procedure InitWindow_0()
  Window_0 = OpenWindow(#PB_Any, 0, 0, 600, 400, "", #PB_Window_SystemMenu)
  Button_0 = ButtonGadget(#PB_Any, 20, 50, 170, 30, "Button A")
  Button_1 = ButtonGadget(#PB_Any, 20, 90, 170, 30, "Button B")
  Text_0 = TextGadget(#PB_Any, 230, 60, 140, 20, "Text 123456")
  String_0 = StringGadget(#PB_Any, 230, 100, 180, 20, "write text here")
EndProcedure

Define Skin.CSkinFramework = New_CSkinFramework()

Skin\SetAutoApplyNewThreads(1)
Skin\SetAutoApplyNewWindows(1)

my_skin.s = "C:\Program Files (x86)\Codejock Software\MFC\Xtreme ToolkitPro v15.3.1\Utils\Styles\Office2007.cjstyles"

Skin\LoadSkin(my_skin, "")

InitWindow_0()

Repeat
  event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow

Example 2
:

Code: Select all

XIncludeFile "..\SkinFramework.pbi"

Global Window_0

Global Frame3D_0, Button_1, Button_2, Option_0, Checkbox_0, Combo_1, ListIcon_0, ListView_0, ProgressBar_0, Hyperlink_0, ExplorerTree_0, String_0, Text_0, TrackBar_0, Tree_0, Spin_0, Scrollbar_0, IP_0, Text_1, Combo_Skin, Button_SelSkin

Procedure InitWindow_0()
  Window_0 = OpenWindow(#PB_Any, 0, 0, 750, 540, "Codejock Skinframework Test", #PB_Window_SystemMenu)
  Frame3D_0 = Frame3DGadget(#PB_Any, 10, 10, 290, 130, "MyFrame")
  Button_1 = ButtonGadget(#PB_Any, 30, 50, 250, 30, "Normal")
  Button_2 = ButtonGadget(#PB_Any, 30, 90, 250, 30, "Disabled")
  DisableGadget(Button_2, 1)
  Option_0 = OptionGadget(#PB_Any, 330, 20, 130, 20, "Radio")
  Checkbox_0 = CheckBoxGadget(#PB_Any, 330, 60, 130, 20, "Checkbox")
  Combo_1 = ComboBoxGadget(#PB_Any, 320, 100, 250, 20)
  AddGadgetItem(Combo_1, -1, "item1")
  AddGadgetItem(Combo_1, -1, "item2")
  AddGadgetItem(Combo_1, -1, "item3")
  ListIcon_0 = ListIconGadget(#PB_Any, 20, 200, 330, 190, "Column 1", 100)
  AddGadgetColumn(ListIcon_0, 1, "Column 2", 100)
  AddGadgetColumn(ListIcon_0, 2, "Column 3", 100)
  AddGadgetItem(ListIcon_0, -1, "item1")
  AddGadgetItem(ListIcon_0, -1, "item2")
  AddGadgetItem(ListIcon_0, -1, "item3")
  AddGadgetItem(ListIcon_0, -1, "item4")
  ListView_0 = ListViewGadget(#PB_Any, 370, 200, 190, 190)
  AddGadgetItem(ListView_0, -1, "item1")
  AddGadgetItem(ListView_0, -1, "item2")
  AddGadgetItem(ListView_0, -1, "item3")
  ProgressBar_0 = ProgressBarGadget(#PB_Any, 320, 130, 250, 20, 50, 100)
  Hyperlink_0 = HyperLinkGadget(#PB_Any, 320, 170, 160, 20, "www.purebasic.fr", 0)
  ExplorerTree_0 = ExplorerTreeGadget(#PB_Any, 600, 200, 140, 190, "")
  String_0 = StringGadget(#PB_Any, 20, 410, 170, 20, "Type your text here")
  Text_0 = TextGadget(#PB_Any, 30, 450, 170, 20, "my text")
  TrackBar_0 = TrackBarGadget(#PB_Any, 250, 410, 220, 20, 0, 0)
  Tree_0 = TreeGadget(#PB_Any, 600, 10, 140, 180)
  AddGadgetItem(Tree_0, -1, "tree item 1")
  AddGadgetItem(Tree_0, -1, "tree item 2")
  AddGadgetItem(Tree_0, -1, "tree item 3")
  Spin_0 = SpinGadget(#PB_Any, 250, 450, 190, 20, 50, 100)
  Scrollbar_0 = ScrollBarGadget(#PB_Any, 520, 410, 210, 20, 5, 100, 0)
  IP_0 = IPAddressGadget(#PB_Any, 20, 160, 180, 20)
  Text_1 = TextGadget(#PB_Any, 30, 500, 60, 20, "Skin:")
  Combo_Skin = ComboBoxGadget(#PB_Any, 120, 500, 250, 20)
  Button_SelSkin = ButtonGadget(#PB_Any, 400, 500, 210, 20, "Select Skin")
EndProcedure

Global NewList Skins.s()
Global Skin.CSkinFramework

Procedure LoadSkins()
  Protected Directory.s = #CODEJOCK_PATH + "\Utils\Styles\"
  
  If ExamineDirectory(0, Directory, "*.cjstyles")  
    While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
      EndIf
      
      AddElement(Skins())
      Skins() = Directory + DirectoryEntryName(0)
      
      AddGadgetItem(Combo_Skin, -1, DirectoryEntryName(0))
    Wend
    
    FinishDirectory(0)
  EndIf
  
  SetGadgetState(Combo_Skin, 0)
EndProcedure

Procedure OnSelectSkin()
  Protected index.l
  
  index = GetGadgetState(Combo_Skin)
  
  If Not index = -1
    If SelectElement(Skins(), index)
      If Not Skin\LoadSkin(Skins())
        MessageRequester("Error", "Failed to load skin: "+Skins(),#MB_ICONERROR)
      EndIf
    EndIf
  EndIf
  
EndProcedure

Procedure OnSelectSkinBox()
  Protected Filename.s
  
  Filename = OpenFileRequester("Select your skin...", "", "Skin File (*.cjstyles)|*.cjstyles", 0)
  
  If Filename And FileSize(Filename) > -1
    If Not Skin\LoadSkin(Filename)
      MessageRequester("Error", "Failed to load skin: "+Filename,#MB_ICONERROR)
    EndIf
  EndIf
EndProcedure

Skin = New_CSkinFramework()

Skin\SetAutoApplyNewThreads(1)
Skin\SetAutoApplyNewWindows(1)

InitWindow_0()

LoadSkins()

Repeat
  event = WaitWindowEvent()
  
  If event = #PB_Event_Gadget
    If EventGadget() = Combo_Skin
      If EventType() = #PB_EventType_Change
        OnSelectSkin()
      EndIf
      
    ElseIf EventGadget() = Button_SelSkin
      If EventType() = #PB_EventType_LeftClick
        OnSelectSkinBox()
      EndIf
    EndIf
  EndIf
Until event = #PB_Event_CloseWindow
Warning: This wrapper uses dynamic linking which means it will need the dll.

DLLs needed:

Code: Select all

Ansi: ToolkitPro1531vc100.dll
Unicode: ToolkitPro1531vc100U.dll
Last edited by Toni6 on Sun Jan 20, 2013 1:46 pm, edited 3 times in total.
sphinx
Enthusiast
Enthusiast
Posts: 120
Joined: Thu Oct 26, 2006 6:34 pm
Contact:

Re: Codejock SkinFramework Wrapper (Skinning)

Post by sphinx »

Nice, I used to use it with VB6 before :)
User avatar
Tenaja
Addict
Addict
Posts: 1959
Joined: Tue Nov 09, 2010 10:15 pm

Re: Codejock SkinFramework Wrapper (Skinning)

Post by Tenaja »

Is their site down? I don't see anything related to this, and all of the google results go to a 404.
User avatar
Kiffi
Addict
Addict
Posts: 1504
Joined: Tue Mar 02, 2004 1:20 pm
Location: Amphibios 9

Re: Codejock SkinFramework Wrapper (Skinning)

Post by Kiffi »

Hygge
User avatar
ts-soft
Always Here
Always Here
Posts: 5756
Joined: Thu Jun 24, 2004 2:44 pm
Location: Berlin - Germany

Re: Codejock SkinFramework Wrapper (Skinning)

Post by ts-soft »

The side is not down, but the content is empty :mrgreen:
PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.
Image
rsts
Addict
Addict
Posts: 2736
Joined: Wed Aug 24, 2005 8:39 am
Location: Southwest OH - USA

Re: Codejock SkinFramework Wrapper (Skinning)

Post by rsts »

seems to be up now - at least it is for me.
Post Reply