| Eljay Elite Member
 
      
 
  :O
 
 Posts: 2945
 Reputation: 77
 – /
  / – Joined: May 2004
 
 | | RE: Colour window code:MSDN: CHOOSECOLOR struct documentation//Show color picker common dialog
 
 //Create our CHOOSECOLOR data block
 var CHOOSECOLOR = Interop.Allocate(36);
 CHOOSECOLOR.WriteDWORD(0, 36); //DWORD lStructSize
 CHOOSECOLOR.WriteDWORD(4, 0); //HWND hwndOwner
 CHOOSECOLOR.WriteDWORD(8, 0); //HWND hInstance
 CHOOSECOLOR.WriteDWORD(12, 0x000000FF); //COLORREF rgbResult (COLORREF = 0x00bbggrr)
 var CustColors = Interop.Allocate(64); //Create an array of 16 COLORREFs for CustColors
 CHOOSECOLOR.WriteDWORD(16, CustColors.DataPtr); //COLORREF *lpCustColors (pointer to our array)
 CHOOSECOLOR.WriteDWORD(20, 3); //DWORD Flags (3 = 2 (CC_FULLOPEN) + 1 (CC_RGBINIT) )
 CHOOSECOLOR.WriteDWORD(24, 0); //LPARAM lCustData
 CHOOSECOLOR.WriteDWORD(28, 0); //LPCCHOOKPROC lpfnHook
 CHOOSECOLOR.WriteDWORD(32, 0); //LPCTSTR lpTemplateName
 
 //Open the dialog box
 var result = Interop.Call('comdlg32.dll', 'ChooseColorA', CHOOSECOLOR);
 //If the user pressed ok convert it to hex
 if(result == 1){
 //Get decimal values
 var r = CHOOSECOLOR.ReadDWORD(12) & 0xFF;
 var g = (CHOOSECOLOR.ReadDWORD(12) / 0x100) & 0xFF;
 var b = (CHOOSECOLOR.ReadDWORD(12) / 0x10000) & 0xFF;
 Debug.Trace('RGB: ' + r + ',' + g + ',' + b)
 //Get hex values
 var hexchars="0123456789ABCDEF";
 var r = hexchars.charAt((r >> 4) & 0xf) + hexchars.charAt(r & 0xF);
 var g = hexchars.charAt((g >> 4) & 0xf) + hexchars.charAt(g & 0xF);
 var b = hexchars.charAt((b >> 4) & 0xf) + hexchars.charAt(b & 0xF);
 Debug.Trace('HEX: ' + r + g + b);
 }
 
  for more information.This post was edited on 07-31-2006 at 09:09 AM by Eljay.
 | 
 |