From: Robert M. <rm...@po...> - 2006-10-11 23:46:02
|
Chris Wearn wrote: > I have a need to insert images into subitems of a listview control in=20 > columns other than the first. >=20 > It is relatively easy to add images to the Listview column header using= : >=20 > $lvwCtrl->InsertColumn(-index =3D> 0, -subitem =3D> $i, -text =3D> =93=94= , -image=20 > =3D> 0); # where -image references an imagelist item >=20 > However there seems to be no provision to add images to InsertItem that= =20 > I can find; >=20 > Or is this already possible and I have misinterpreted the documentation= =20 > for Win32-GUI? Not something I had looked at before with Win32::GUI, but knew it was=20 possible with a standard listview control. The sample below shows it working, although the Win32::GUI::Listview API=20 is a bit hit or miss in this respect. (you may need to tweak it a bit=20 to run on older Win32::GUI versions) (1) You need to add the -subitemimages =3D> 1 option to the Listview=20 constructor. (2) You need to insert the main items using InsertItem - don't try to=20 use the arrayref syntax for the text option, unless you want your=20 subitems to have the same images as the 'main' item. (3) Then use SetItem, using -index and -subitem options to insert the=20 text and set the imagelist reference for each subitem (column). Good luck. I guess this is another area to add to my ever growing list=20 of bits that need looking at. Regards, Rob. #!perl -w use strict; use warnings; use Win32::GUI 1.03_04, qw(ILC_COLOR ILC_COLOR24 ILC_MASK); use Win32::GUI::BitmapInline(); # the image list created has the following indexes: # 0 - red icon # 1 - green icon # 2 - blue icon my $il =3D create_image_list(); my $mw =3D Win32::GUI::Window->new( -title =3D> "ListView - Subitem icons", -size =3D> [400,300], ); $mw->AddListView( -name =3D> "LV", -width =3D> $mw->ScaleWidth(), -height =3D> $mw->ScaleHeight(), -report =3D> 1, -subitemimages =3D> 1, -imagelist =3D> $il, ); for my $col_name ("Title", "Card Number", "Shelf Location") { $mw->LV->InsertColumn( -text =3D> $col_name, -width =3D> 100, ); } my @items =3D ( [ "Green Eggs and Ham", [ "JF SEU", "Children's" ], ], [ "A Brief History of the Universe", [ "897.112", "2nd Floor" ], ], [ "Your Book Title Here", [ "501.2", "Vault" ], ], ); foreach my $item (@items) { my $index =3D $mw->LV->InsertItem( -text =3D> $item->[0], -image =3D> 0, ); my $subindex =3D 1; foreach my $subtext (@{$item->[1]}) { $mw->LV->SetItem( -index =3D> $index, -text =3D> $subtext, -subitem =3D> $subindex++, -image =3D> int(rand(2)) + 1, ); } } $mw->Show(); Win32::GUI::Dialog(); exit(0); sub create_image_list { my $red_icon =3D Win32::GUI::BitmapInline->newIcon( q( AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAEgAAABIAAAAE= AAA AAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/A= AAA /wD/AP//AAD///8AAAAAAAAAAAAAAAAJkAAAAAAAmZmZmQAAAAmZmZmZkAAAmZmZmZmZAACZm= ZmZ mZkACZmZmZmZmZAJmZmZmZmZkAmZmZmZmZmQAJmZmZmZmQAAmZmZmZmZAACZmZmZmZkAAAmZm= ZmZ kAAAAJmZmZkAAAAAAAmZAAAAAAAAAAAAAAD+fwAA8A8AAMADAADAAwAAgAEAAIABAAAAAAAAA= AAA AAAAAACAAQAAgAEAAIABAADAAwAAwAMAAPAPAAD+PwAA ) ); my $green_icon =3D Win32::GUI::BitmapInline->newIcon( q( AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAEgAAABIAAAAE= AAA AAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/A= AAA /wD/AP//AAD///8AAAAAAAAAAAAAAAAKoAAAAAAAqqqqqgAAAAqqqqqqoAAAqqqqqqqqAACqq= qqq qqoACqqqqqqqqqAKqqqqqqqqoAqqqqqqqqqgAKqqqqqqqgAAqqqqqqqqAACqqqqqqqoAAAqqq= qqq oAAAAKqqqqoAAAAAAAqqAAAAAAAAAAAAAAD+fwAA8A8AAMADAADAAwAAgAEAAIABAAAAAAAAA= AAA AAAAAACAAQAAgAEAAIABAADAAwAAwAMAAPAPAAD+PwAA ) ); my $blue_icon =3D Win32::GUI::BitmapInline->newIcon( q( AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAEgAAABIAAAAE= AAA AAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/A= AAA /wD/AP//AAD///8AAAAAAAAAAAAAAAAMwAAAAAAAzMzMzAAAAAzMzMzMwAAAzMzMzMzMAADMz= MzM zMwADMzMzMzMzMAMzMzMzMzMwAzMzMzMzMzAAMzMzMzMzAAAzMzMzMzMAADMzMzMzMwAAAzMz= MzM wAAAAMzMzMwAAAAAAAzMAAAAAAAAAAAAAAD+fwAA8A8AAMADAADAAwAAgAEAAIABAAAAAAAAA= AAA AAAAAACAAQAAgAEAAIABAADAAwAAwAMAAPAPAAD+PwAA ) ); my $image_list =3D Win32::GUI::ImageList->new( 16, 16, ILC_COLOR|ILC_COLOR24|ILC_MASK, 3, 0 ); $image_list->AddIcon($red_icon); $image_list->AddIcon($green_icon); $image_list->AddIcon($blue_icon); return $image_list; } __END__ |