1. LV header images example

Hi Derek,

Attached is a simple program that places an image on a Listview Header. 
However when
it does so, the lv column affected gets a one-pixel width. I don't 
experience this
when i use direct API. I'll probably figure this out later but just 
incase you know
why this is happening inform me. The icon is loaded at run-time. 

-----X Cut here

include win32lib.ew 
  
constant
  lvcolumn_mask       = allot(Long),
  lvcolumn_fmt        = allot(Long),
  lvcolumn_cx         = allot(Long),
  lvcolumn_pszText    = allot(Lpsz),
  lvcolumn_cchTextMax = allot(Long),
  lvcolumn_iSubItem   = allot(Long),
  lvcolumn_iImage     = allot(Long),
  lvcolumn_iOrder     = allot(Long),
  sizeof_lvcolumn     = allotted_size(),

  LVCFMT_IMAGE            = #0800,
  LVCFMT_COL_HAS_IMAGES   = #8000 
  

global procedure SetColumnImage(atom lv,integer col,integer img)
  atom MemAddr,void             
    MemAddr = acquire_mem(0,sizeof_lvcolumn)
    store(MemAddr,lvcolumn_mask, or_bits(LVCF_FMT,LVCF_IMAGE))
    
store(MemAddr,lvcolumn_fmt,or_bits(LVCFMT_IMAGE,LVCFMT_COL_HAS_IMAGES))
    store(MemAddr,lvcolumn_iImage,img-1)
    void = sendMessage(lv,LVM_SETCOLUMN,col-1,MemAddr)
    release_mem(MemAddr)
  end procedure

constant Win = create(Window,"Test for Listview 
Column",0,Default,Default,300,200,0),
  Lst = 
create(ListView,{"Names","Age"},Win,10,10,280,160,or_all({LVS_SHOWSELALWAYS,LVS_SHAREIMAGELISTS,LVS_REPORT}))


constant TempIcoFile = getenv("TMP")&"\\cirico.tmp"        

-- Converted Using Enclude (C) Jordah Ferguson 2002 in RDS archives
-- Contacts: jorfergie03 at yahoo.com

constant aleph={'A','B','C','D','E','F','G','H','I','J','K','L','M',
  'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
  'a','b','c','d','e','f','g','h','i','j','k','l','m',
  'n','o','p','q','r','s','t','u','v','w','x','y','z',
  '0','1','2','3','4','5','6','7','8','9','+','/'}
constant drem ={64,16,4}
constant dmul ={4,16,64}
constant ddiv ={16,4,1}
constant nc3  ={3,1,2}
constant ldrop={2,1,1}

global function decode64(sequence in)
  integer len,oidx,case3,tmp
  sequence result
  sequence ccha
    len=length(in)
  if len >0 then
    if remainder(len,4)!=0 then
      puts(1,"Decode64: len not 4n")
      abort(1)
    end if
    oidx=(len/4)*3
    case3=3
    while in[len]='=' do
      oidx-=1
      case3=nc3[case3]
      len-=1
    end while
    ccha=repeat(0,256)
    for i=1 to 64 do
      ccha[aleph[i]]=i-1
    end for
    result=repeat('?',oidx)
    for i=oidx to 1 by-1 do
      tmp=remainder(ccha[in[len-1]],drem[case3])*dmul[case3]
      tmp+=floor(ccha[in[len]]/ddiv[case3])
      result[i]=tmp
      len-=ldrop[case3]
      case3=nc3[case3]
    end for
    return result
  else
    return {}
  end if
end function

sequence aa_ico

aa_ico = decode64(
"AAABAAEADQ0AAAEACAAsBQAAFgAAACgAAAANAAAAGgAAAAEACAAAAAAABAEAAAAAAAAAAAAAAAEA"&

"AAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAA"&

"/wD/AP//AAD///8ABgYGABISEgAfHx8ALCwsADk5OQBFRUUAUlJSAF9fXwBsbGwAeHh4AIWFhQCS"&

"kpIAn5+fAKurqwC4uLgAxcXFANLS0gDe3t4A6+vrAPj4+ADw+/8ApKCgAMDcwADwyqYAAAA+AAAA"&

"XQAAAHwAAACbAAAAugAAANkAAADwACQk/wBISP8AbGz/AJCQ/wC0tP8AABQ+AAAeXQAAKHwAADKb"&

"AAA8ugAARtkAAFXwACRt/wBIhf8AbJ3/AJC1/wC0zf8AACo+AAA/XQAAVHwAAGmbAAB+ugAAk9kA"&

"AKrwACS2/wBIwv8AbM7/AJDa/wC05v8AAD4+AABdXQAAfHwAAJubAAC6ugAA2dkAAPDwACT//wBI"&

"//8AbP//AJD//wC0//8AAD4qAABdPwAAfFQAAJtpAAC6fgAA2ZMAAPCqACT/tgBI/8IAbP/OAJD/"&

"2gC0/+YAAD4UAABdHgAAfCgAAJsyAAC6PAAA2UYAAPBVACT/bQBI/4UAbP+dAJD/tQC0/80AAD4A"&

"AABdAAAAfAAAAJsAAAC6AAAA2QAAAPAAACT/JABI/0gAbP9sAJD/kAC0/7QAFD4AAB5dAAAofAAA"&

"MpsAADy6AABG2QAAVfAAAG3/JACF/0gAnf9sALX/kADN/7QAKj4AAD9dAABUfAAAaZsAAH66AACT"&

"2QAAqvAAALb/JADC/0gAzv9sANr/kADm/7QAPj4AAF1dAAB8fAAAm5sAALq6AADZ2QAA8PAAAP//"&

"JAD//0gA//9sAP//kAD//7QAPioAAF0/AAB8VAAAm2kAALp+AADZkwAA8KoAAP+2JAD/wkgA/85s"&

"AP/akAD/5rQAPhQAAF0eAAB8KAAAmzIAALo8AADZRgAA8FUAAP9tJAD/hUgA/51sAP+1kAD/zbQA"&

"PgAAAF0AAAB8AAAAmwAAALoAAADZAAAA8AAAAP8kJAD/SEgA/2xsAP+QkAD/tLQAPgAUAF0AHgB8"&

"ACgAmwAyALoAPADZAEYA8ABVAP8kbQD/SIUA/2ydAP+QtQD/tM0APgAqAF0APwB8AFQAmwBpALoA"&

"fgDZAJMA8ACqAP8ktgD/SMIA/2zOAP+Q2gD/tOYAPgA+AF0AXQB8AHwAmwCbALoAugDZANkA8ADw"&

"AP8k/wD/SP8A/2z/AP+Q/wD/tP8AKgA+AD8AXQBUAHwAaQCbAH4AugCTANkAqgDwALYk/wDCSP8A"&

"zmz/ANqQ/wDmtP8AFAA+AB4AXQAoAHwAMgCbADwAugBGANkAVQDwAG0k/wCFSP8AnWz/ALWQ/wDN"&

"tP8ADw8PIB4lGxkXFRMAAAABAA8PIB4lGxkXFRMAAAAAAQAPIB4lOhk6FToAAAAT/wD/IB4lOhlF"&

"FUUAOgATFbCw5h4lOhlFFUYARQA6FRfh+OslOhlFFVEAUQBFFToZ/wD/Gxk6FUYAUgBGFToZG0my"&

"gRk6FUUAUQBRFUUZOiUAAAAXFToARQBGFUUZOiUeAP//FRMAOgBFFUUZOiUeIAAAABMAAAA6FToZ"&

"OiUeIA8A8dgAAAATFRcZGyUeIA8P/wD/AAATFRcZGyUeIA8PDwD//wAH//8AB///AAf//wAH//8A"&

"B///AAf//wAH//8AB///AAf//wAH//8AB///AAf//wAH//8=")
  
function Return_Icon_Handle(sequence data)
  atom handle,ic,void               
    handle = open(TempIcoFile,"wb")
    puts(handle,data)  
    close(handle)
    ic = extractIcon(TempIcoFile) 
    void = deleteFile(TempIcoFile)
    return ic
end function  

atom icon1,void
icon1 = Return_Icon_Handle(aa_ico)

-- Release internal memory
aa_ico = {}

-- Set the Icons in win32libs default image list
constant img1 = addIcon(icon1)

-- Delete the resource         
void = w32Func(xDeleteObject,{icon1})
 

procedure w32HOpen_Win(atom id,integer event,sequence params)
SetColumnImage(Lst,1,img1)
end procedure
setHandler(Win,w32HOpen,routine_id("w32HOpen_Win")) 

WinMain(Win,0)   

-------X End Cut here

Also, there seems to be a lot of flickering when you click,drag the 
headers.......

Derek, The below code found in struct_LVCOLUMN() is not needed. Usually 
text length
is needed when you are receiving info but once setting you need not 
specify.

    if sequence(text) then
        store( LV_COLUMN, LVCOLUMN_cchTextMax, length( text ))
    end if


Jordah Ferguson.

new topic     » topic index » view message » categorize

2. Re: LV header images example

Jordah,
there is a bug in the definition of the flags.
Currently in win32lib, it reads...

    LVCF_IMAGE               = 10,
    LVCF_ORDER               = 20,

but should read

    LVCF_IMAGE               = #10,
    LVCF_ORDER               = #20,


Also, I don't see any flickering on my machine.

I set the length field in the routine because I don't know how the structure
will be used after it is allocated. Its a safety thing. It does no harm.

----------------
cheers,
Derek Parnell

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu