You can subscribe to this list here.
2001 |
Jan
(226) |
Feb
(139) |
Mar
(156) |
Apr
(95) |
May
(181) |
Jun
(166) |
Jul
(80) |
Aug
(59) |
Sep
(69) |
Oct
(83) |
Nov
(142) |
Dec
(33) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(42) |
Feb
(91) |
Mar
(76) |
Apr
(113) |
May
(67) |
Jun
(68) |
Jul
(37) |
Aug
(41) |
Sep
(16) |
Oct
(135) |
Nov
(51) |
Dec
(21) |
2003 |
Jan
(37) |
Feb
(36) |
Mar
(37) |
Apr
(103) |
May
(68) |
Jun
(70) |
Jul
(77) |
Aug
(12) |
Sep
(9) |
Oct
(53) |
Nov
(88) |
Dec
(63) |
2004 |
Jan
(263) |
Feb
(106) |
Mar
(36) |
Apr
(21) |
May
(21) |
Jun
(34) |
Jul
(33) |
Aug
(34) |
Sep
(35) |
Oct
(21) |
Nov
(43) |
Dec
(63) |
2005 |
Jan
(28) |
Feb
(42) |
Mar
(29) |
Apr
(14) |
May
(41) |
Jun
(20) |
Jul
(65) |
Aug
(136) |
Sep
(41) |
Oct
(74) |
Nov
(34) |
Dec
(94) |
2006 |
Jan
(85) |
Feb
(94) |
Mar
(68) |
Apr
(103) |
May
(66) |
Jun
(51) |
Jul
(24) |
Aug
(56) |
Sep
(57) |
Oct
(85) |
Nov
(73) |
Dec
(68) |
2007 |
Jan
(59) |
Feb
(32) |
Mar
(13) |
Apr
(32) |
May
(36) |
Jun
(36) |
Jul
(64) |
Aug
(35) |
Sep
(19) |
Oct
(10) |
Nov
(13) |
Dec
(20) |
2008 |
Jan
(26) |
Feb
(41) |
Mar
(19) |
Apr
(24) |
May
(16) |
Jun
(33) |
Jul
(34) |
Aug
(4) |
Sep
(11) |
Oct
|
Nov
(26) |
Dec
(23) |
2009 |
Jan
(5) |
Feb
(2) |
Mar
(21) |
Apr
(16) |
May
(13) |
Jun
(6) |
Jul
(34) |
Aug
(2) |
Sep
(1) |
Oct
(7) |
Nov
(5) |
Dec
(24) |
2010 |
Jan
(3) |
Feb
(5) |
Mar
(6) |
Apr
(6) |
May
(14) |
Jun
(6) |
Jul
(1) |
Aug
(12) |
Sep
(10) |
Oct
(9) |
Nov
|
Dec
(2) |
2011 |
Jan
(4) |
Feb
(5) |
Mar
(30) |
Apr
(1) |
May
(2) |
Jun
(5) |
Jul
(3) |
Aug
(2) |
Sep
(3) |
Oct
|
Nov
(6) |
Dec
|
2012 |
Jan
|
Feb
(10) |
Mar
|
Apr
|
May
(1) |
Jun
(3) |
Jul
(1) |
Aug
|
Sep
(2) |
Oct
|
Nov
(2) |
Dec
(4) |
2013 |
Jan
(5) |
Feb
(3) |
Mar
|
Apr
(3) |
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
(2) |
Feb
|
Mar
|
Apr
(1) |
May
(3) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(9) |
Nov
(7) |
Dec
|
2015 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(4) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2017 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(5) |
Dec
|
2019 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
|
From: prashanth k. <pra...@gm...> - 2011-01-07 04:19:40
|
-- Regards Prasanth Kemparaj |
From: Hulley, R. (A. G. S. TPM) <Rob...@hp...> - 2010-12-29 23:07:12
|
You could try this multisel option. -multisel => 10, # use 40000 byte buffer -----Original Message----- From: Octavian Rasnita [mailto:ora...@gm...] Sent: Thursday, 30 December 2010 2:30 AM To: Per...@li... Subject: [perl-win32-gui-users] Error when using GetOpenFileName() Hi, I have tried the following code: my @files = Win32::GUI::GetOpenFileName( -title => "Select the FLV files", -directory => "$FindBin::Bin", -filter => ["FLV files", "*.flv", "All files", "*.*"], -defaultfilter => 0, -filemustexist => 1, -multisel => 1, ); The program works fine if the user selects less than 85 files. If she or he selects more than 85 files (or more than 90 for sure), this code returns [undef] just like nothing was selected. Is there a bug in Win32::GUI or I need to do something special if I want to offer the possibility of selecting more files? If there is a bug, is there a workaround for it? Thank you. Octavian ------------------------------------------------------------------------------ Learn how Oracle Real Application Clusters (RAC) One Node allows customers to consolidate database storage, standardize their database environment, and, should the need arise, upgrade to a full multi-node Oracle RAC database without downtime or disruption http://p.sf.net/sfu/oracle-sfdevnl _______________________________________________ Perl-Win32-GUI-Users mailing list Per...@li... https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users http://perl-win32-gui.sourceforge.net/ |
From: Octavian R. <ora...@gm...> - 2010-12-29 16:30:03
|
Hi, I have tried the following code: my @files = Win32::GUI::GetOpenFileName( -title => "Select the FLV files", -directory => "$FindBin::Bin", -filter => ["FLV files", "*.flv", "All files", "*.*"], -defaultfilter => 0, -filemustexist => 1, -multisel => 1, ); The program works fine if the user selects less than 85 files. If she or he selects more than 85 files (or more than 90 for sure), this code returns [undef] just like nothing was selected. Is there a bug in Win32::GUI or I need to do something special if I want to offer the possibility of selecting more files? If there is a bug, is there a workaround for it? Thank you. Octavian |
From: shilpa h. <200...@gm...> - 2010-10-21 05:52:37
|
Hi All, i am trying to automate the GUI . Gui has a small rectangle window which glows green if connected else it will be gray. i wanted to test this functionality using perl script. Kindly help how to do this .... Regards, Sangeeta |
From: Jeremy W. <jez...@ho...> - 2010-10-20 07:30:30
|
Hi, I'm not sure what you example code actually does:)? If I comment out all the code for SetLayeredWindowAttributes there is no change to the window? You'll probably want to set the background of the button to the same color as the window as any app with windows XP styles set will use rounded buttons. To answer your questions, you shouldn't have any issue displaying bitmaps with transparancy, it's just a case of converting it to the correct object (I use icon's with 24 or 32 bit color). In most cases WS_CLIPCHILDREN will remove flicker on resize, but there is also a -noflicker option that works in some cases (it uses double buffering). Flicker free child windows with scroll bars are no problem as WS_CLIPCHILDREN will solve the flicker issue. Regards, jez. Date: Tue, 19 Oct 2010 23:44:55 -0600 From: rob...@gm... To: per...@li... Subject: [perl-win32-gui-users] Robust Windows Hi all, I'm trying to come up with the best approach for creating aesthetically pleasing windows that: - Have labels whose bitmap has transparency (.png files loaded by DIBitmap) - Don't exhibit any flicker - Are layered windows (this seems to improve quality during animation/transparency) - Support child windows that can be scrolled and don't flicker Below is the code I've come up with so far (without bitmap labels). Is there anything else I should consider? Could I be doing something better? ########## CODE BEGIN use strict; use Win32::GUI qw(WS_CLIPCHILDREN); use Win32::API; use constant WS_EX_LAYERED => 0x00080000; use constant LWA_COLORKEY => 0x00000001; use constant LWA_ALPHA => 0x00000002; use constant GWL_EXSTYLE => -20; my $main = Win32::GUI::Window->new ( -background => [153,0,0], -pushstyle => WS_CLIPCHILDREN, -text => 'Test', -size => [500,500], ); my $setLayeredWindowAttributes = Win32::API->new('user32', 'SetLayeredWindowAttributes', 'LLIN', 'I'); my $winstyle = $main->GetWindowLong(GWL_EXSTYLE); $winstyle = $winstyle | WS_EX_LAYERED; $main->SetWindowLong(GWL_EXSTYLE, $winstyle || WS_EX_LAYERED); $setLayeredWindowAttributes->Call($main->{-handle}, 0, 255, LWA_ALPHA); my $OK = $main->AddButton ( -name => 'OK', -text => 'OK', -size => [80,25], -pos => [10,10], ); $main->Center(); $main->Show(); Win32::GUI::Dialog(); ########## CODE END Thanks, Rob ------------------------------------------------------------------------------ Download new Adobe(R) Flash(R) Builder(TM) 4 The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly Flex(R) Builder(TM)) enable the development of rich applications that run across multiple browsers and platforms. Download your free trials today! http://p.sf.net/sfu/adobe-dev2dev _______________________________________________ Perl-Win32-GUI-Users mailing list Per...@li... https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users http://perl-win32-gui.sourceforge.net/ |
From: Kevin M. <kej...@ho...> - 2010-10-11 00:34:31
|
Rob, You could try the Win32::GUI::Skin module on Sourceforge here <http://sourceforge.net/projects/win32-gui-skin/>. Kevin. > Hi, > > I'd like to create/skin my windows with custom shapes and/or images > (e.g. a PNG with transparency). I see that the SetWindowRgn() function > is available in Win32::GUI 1.06, but this is not the best approach > according to Microsoft (see this URL: > http://msdn.microsoft.com/en-us/library/ms997507.aspx). Instead they > recommend using the UpdateLayeredWindow() function, which doesn't seem > to be available in Win32::GUI by default. Before I to use > UpdateLayeredWindow() with help from Win32::API, does anyone have any > experience, recommendations, or code samples? > > Thanks, > Rob Johansen > > > ------------------------------------------------------------------------------ > Beautiful is writing same markup. Internet Explorer 9 supports > standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2& L3. > Spend less time writing and rewriting code and more time creating great > experiences on the web. Be a part of the beta today. > http://p.sf.net/sfu/beautyoftheweb > > > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ |
From: Jeremy W. <jez...@ho...> - 2010-10-10 06:46:55
|
Hi, If you do a search in this group you should find examples of skinning apps using UpdateLayeredWindow as a base. This function should be really added to the core at some point. Could you add an item on the tracker for this function (and related functions) once you've got your example working? That way it wont be lost for future updates. http://sourceforge.net/tracker/?group_id=16572&atid=366572 Cheers, jez. Date: Fri, 8 Oct 2010 12:41:59 -0600 From: rob...@gm... To: per...@li... Subject: [perl-win32-gui-users] Custom window shapes Hi, I'd like to create/skin my windows with custom shapes and/or images (e.g. a PNG with transparency). I see that the SetWindowRgn() function is available in Win32::GUI 1.06, but this is not the best approach according to Microsoft (see this URL: http://msdn.microsoft.com/en-us/library/ms997507.aspx). Instead they recommend using the UpdateLayeredWindow() function, which doesn't seem to be available in Win32::GUI by default. Before I to use UpdateLayeredWindow() with help from Win32::API, does anyone have any experience, recommendations, or code samples? Thanks, Rob Johansen ------------------------------------------------------------------------------ Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today. http://p.sf.net/sfu/beautyoftheweb _______________________________________________ Perl-Win32-GUI-Users mailing list Per...@li... https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users http://perl-win32-gui.sourceforge.net/ |
From: Shishir S. <rep...@gm...> - 2010-10-10 02:39:38
|
Hello, I was trying to use perl-Win32-gui "Label" in my project. I have a requirement to change dynamically the text color and change the text(& text size) of the label also. I can not use the text box instead of the label. Keeping the label blank is not working as this reduces the size.. Thanks and Regards, Shishir Srivastava India-Bangalore |
From: <a98...@gm...> - 2010-10-01 19:33:01
|
hi rob, I wanted to use some peace of your code. the main function is ok. I want to use TextFields. Is there a possibility to move all Labels, Textfields,... of an window? When I try to work through the hash -> only the text field is moved but no prompt of it. I've enclosed my testcode. thx. juergen __CODE__ #!perl -w use strict; use warnings; my %config = ( config1 => 0, config2 => 0, config3 => "a" ); use Win32::GUI 1.05 qw( SB_VERT SB_LINEUP SB_LINEDOWN SB_PAGEUP SB_PAGEDOWN SB_THUMBTRACK SB_THUMBPOSITION ); my $window = Win32::GUI::DialogBox->new( -name => "scroll_test", -text => "Scroll Test", -size => [400, 400], -vscroll => 1, -onScroll => \&process_scroll, ); my $count = 0; foreach my $l (sort(keys %config)) { $count = $count + 1; $window->AddTextfield( -name => "$l", -text => "$config{$l}", -tip => "", -left => 35, -prompt => [ "$l:" , 150 ], -height => 20, -width => 200, -top => 25 + ($count * 20), -width => 100, -tabstop => 1, ); } $window->ScrollRange(SB_VERT, 0, 5 + (35 * 99) + $window->config1->Height()); $window->ScrollPage(SB_VERT, $window->ScaleHeight()); $window->Show(); Win32::GUI::Dialog(); sub process_scroll { my ( $self, $bar, $op, $pos ) = @_; my $prev_pos = $self->ScrollPos($bar); my $new_pos = $prev_pos; if ( $op == SB_LINEUP ) { # or SB_LINELEFT $new_pos -= 35; } elsif ( $op == SB_LINEDOWN ) { # or SB_LINERIGHT $new_pos += 35; } elsif ( $op == SB_PAGEUP ) { # or SB_PAGELEFT $new_pos -= $self->ScrollPage($bar); } elsif ( $op == SB_PAGEDOWN ) { # or SB_PAGERIGHT $new_pos += $self->ScrollPage($bar); } elsif ( $op == SB_THUMBTRACK ) { $new_pos = $pos; } elsif ( $op == SB_THUMBPOSITION ) { $new_pos = $pos; } $new_pos = $self->ScrollPos( $bar, $new_pos ); if ( $bar == SB_VERT ) { my $v_pos = 5; $v_pos += 35; foreach my $lab (sort(keys %config)) { $self->{"$lab"}->Top($v_pos - $new_pos + 15); } } $self->Redraw(1); 1; } __END__ -------- Original-Nachricht -------- > Datum: Thu, 1 May 2008 23:01:47 +0100 > Von: "Robert May" <ro...@th...> > An: "Steven Vasilogianis" <ste...@gm...> > CC: per...@li... > Betreff: Re: [perl-win32-gui-users] Scrollbars > 2008/4/30 Steven Vasilogianis <ste...@gm...>: > > I have been having some trouble getting my scroll bars to work well. I > > have been modifying an example I found on Rob May's weblog > > (http://blog.robmay.me.uk/search/label/perl-win32-gui). > > > > Sample code is included below. The problems I am having are: > > > > 1) The ScrollRange() call does not seem to be doing anything - I can > > scroll well beyond the range specified. > > I don't think you can really. > > > 2) SB_PAGE(UP|DOWN) events are not working at all > > Because you never set the page size. > > > I am rather new to Win32::GUI and would appreciate any help. > > Here's a minimally adapted version of your code that works for me. > There are easier ways to do this, and you really need to see the next > few examples in the series of scrollbar articles - I wrote the code at > the same time as the first 7 articles, but haven't had time to turn > them into full articles yet. I will post to this list when I do. > > Regards, > Rob. > > #!perl -w > use strict; > use warnings; > > use Win32::GUI 1.05 qw( > SB_VERT SB_LINEUP SB_LINEDOWN SB_PAGEUP SB_PAGEDOWN > SB_THUMBTRACK SB_THUMBPOSITION > ); > > my $window = Win32::GUI::DialogBox->new( > -name => "scroll_test", > -text => "Scroll Test", > -size => [400, 400], > -vscroll => 1, > -onScroll => \&process_scroll, > ); > > my $v_pos = 5; > for ( 1..100 ) { > $window->AddLabel( > -name => "label$_", > -text => "Label $_", > -pos => [5, $v_pos], > -size => [100, 30], > ); > > $v_pos += 35; > } > > $window->ScrollRange(SB_VERT, 0, 5 + (35 * 99) + > $window->label1->Height()); > $window->ScrollPage(SB_VERT, $window->ScaleHeight()); > > $window->Show(); > Win32::GUI::Dialog(); > > sub process_scroll { > my ( $self, $bar, $op, $pos ) = @_; > > my $prev_pos = $self->ScrollPos($bar); > my $new_pos = $prev_pos; > > if ( $op == SB_LINEUP ) { # or SB_LINELEFT > $new_pos -= 35; > } elsif ( $op == SB_LINEDOWN ) { # or SB_LINERIGHT > $new_pos += 35; > } elsif ( $op == SB_PAGEUP ) { # or SB_PAGELEFT > $new_pos -= $self->ScrollPage($bar); > } elsif ( $op == SB_PAGEDOWN ) { # or SB_PAGERIGHT > $new_pos += $self->ScrollPage($bar); > } elsif ( $op == SB_THUMBTRACK ) { > $new_pos = $pos; > } elsif ( $op == SB_THUMBPOSITION ) { > $new_pos = $pos; > } > > $new_pos = $self->ScrollPos( $bar, $new_pos ); > print "NP: $new_pos\n"; > > if ( $bar == SB_VERT ) { > my $v_pos = 5; > for ( 1..100 ) { > $self->{"label$_"}->Top($v_pos - $new_pos); > > $v_pos += 35; > } > } > $self->Redraw(1); > > 1; > } > __END__ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by the 2008 JavaOne(SM) Conference > Don't miss this year's exciting event. There's still time to save $100. > Use priority code J8TL2D2. > http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ > -- Neu: GMX De-Mail - Einfach wie E-Mail, sicher wie ein Brief! Jetzt De-Mail-Adresse reservieren: http://portal.gmx.net/de/go/demail |
From: Kevin M. <kej...@ho...> - 2010-09-27 00:50:37
|
John, It is odd that PPM could not find the module. I tried it on my computer and managed to find it OK. Note that the package would be called Win32-VisualStyles (:: replaced with -). The repository that I use is http://ppm4.activestate.com/MSWin32-x86/5.12/1200/packages.xml, though it would be slightly different for you as you are using a different version of Perl. Try going to the web page http://ppm4.activestate.com/ and browsing for the appropriate repository for your version of Perl. You could also try downloading the package from http://ppm4.activestate.com/MSWin32-x86/5.8/825/R/RO/ROBERTMAY/Win32-VisualStyles/Win32-VisualStyles-0.02.ppmx and installing it yourself using the command line PPM. Kevin. > Kevin: > > Thanks again for your response. > > That was the first thing I tried, was to enter PPM and look for it. But I could not find it under search win32, search visual, or search style. I was listed lots of packages with win32 visual or style in their name, but I could not find Win32-VisualStyles. Again I apologize for missing something. Is it under another name, or just not there? > > John Whitney > > > >> -------Original Message------- >> From: Kevin Marshall<kej...@ho...> >> To: john<jo...@jo...> >> Cc: per...@li... >> Subject: Re: [perl-win32-gui-users] Vertical line spacing and a Win98/WinXP issue >> Sent: 26 Sep '10 11:32 >> >> John, >> >> Win32::VisualStyles has XS code that calls the underlying Windows >> functions. You will either need to compile the module yourself, or you >> should be able to install the module using the Perl Package Manager. >> >> Kevin. >> > Appreciate the response. >> > >> > In regard to Question 2, I tried to use your example program to see if problem is solved. I got VisualStyles.pm file from CPAN and placed it in my c:/perl/site/lib/win32 folder. >> > >> > Then tried to run your example. I get... >> > >> > Can't locate loadable object for module Win32::VisualStyles in @INC (@INC contains: . C:/Perl/lib C:/Perl/site/lib .) at C:/Perl/lib/DynaLoader.pm line 118 >> > DynaLoader::croak('Can\'t locate loadable object for module Win32::VisualStyles ...') called at C:/Perl/lib/DynaLoader.pm line 196 >> > DynaLoader::bootstrap('Win32::VisualStyles', 0.02) called at C:/Perl/lib/XSLoader.pm line 111 >> > XSLoader::bootstrap_inherit('Win32::VisualStyles', 0.02) called at tmp.pl line 39 >> > >> > This is out of my league to understand what I'm missing. I have perl versions... >> > >> > Perl v5.8.8 built for MSWin32-x86-multi-thread >> > Binary build 817 [257965] by ActiveState Mar 20 2006 17:54:25 >> > WIN32::GUI version 1.06 >> > >> > Am I missing something? >> > >> > John >> > >> > >> >> -------Original Message------- >> >> From: Kevin Marshall<kej...@ho...> >> >> To: John Whitney<jo...@jo...> >> >> Cc: per...@li... >> >> Subject: Re: [perl-win32-gui-users] Vertical line spacing and a Win98/WinXP issue >> >> Sent: 25 Sep '10 11:43 >> >> >> >> John, >> >> >> >> Question 1: >> >> >> >> After looking through the Windows SDK docs, as far as I can tell, labels >> >> don't allow you to set the line spacing of the text. The best I can >> >> think of is to either choose a font with a large line spacing, or you >> >> could create an owner drawn control and draw the text yourself. >> >> >> >> Question 2: >> >> >> >> After doing a bit of digging, it seems that if you have themes enabled, >> >> the method that Win32::GUI uses to change the background and foreground >> >> colours doesn't work. Depending on the version of Perl that you use, the >> >> themes may be enabled or not. For example, I use ActiveState Perl 5.12.0 >> >> which has themes enabled by default. Robert May released a module called >> >> Win32::VisualStyles (it's on CPAN) which you can use to control the >> >> styles applied to your window. Simply disable themes before creating the >> >> checkbox and the foreground and background colors will be applied. Here >> >> is an example: >> >> >> >> #!perl >> >> use strict; >> >> use warnings; >> >> use feature qw(:5.12); >> >> >> >> use Win32::GUI qw(); >> >> use Win32::GUI::Constants qw(CW_USEDEFAULT); >> >> use Win32::VisualStyles qw(:all); >> >> >> >> # Enable themes only for window, disable for controls >> >> SetThemeAppProperties(STAP_ALLOW_NONCLIENT); >> >> >> >> my $win = Win32::GUI::Window->new( >> >> -name => 'win', >> >> -size => [ 320, 240 ], >> >> -left => CW_USEDEFAULT, >> >> ); >> >> $win->AddCheckbox( >> >> -pos => [ 5, 5 ], >> >> -text => 'Checkbox', >> >> -foreground => 0x0000ff, >> >> -background => 0x00ff00, >> >> ); >> >> $win->Show(); >> >> >> >> Win32::GUI::Dialog(); >> >> >> >> __END__ >> >> >> >> As an alternative, you could draw the text in the control yourself using >> >> an owner drawn checkbox. >> >> >> >> Hope this helps, >> >> >> >> Kevin. >> >> > Question 1) >> >> > >> >> > Anyone know how to get multiple lines in a Win32::GUI::Label to spread out >> >> > vertially, so there would be an extra 5 pixels between each line? Yes, I >> >> > could create multiple labels, one for each line, and spread them out an >> >> > extra 5 pixels. But a simple -linespacing => 5 would be nice. Anything >> >> > like this in the Win32::GUI world? Below is the label I have. >> >> > >> >> > my $window_main_text_label = new Win32::GUI::Label >> >> > ( >> >> > $window_main , >> >> > -text => "Line 1 \n Line 2 \n Line 3 \n Line 4 " , >> >> > -name => 'window_settings_option_text_label' , >> >> > -font => $font , >> >> > -pos => [ 195 , 297 ] , >> >> > -size => [ 280 , 100 ] >> >> > ) ; >> >> > >> >> > >> >> > Question 2) >> >> > >> >> > With Win32::GUI::RadioButton, and with Win32::GUI::CheckBox I can set and >> >> > change the -foreground => 0x000000 value just fine to 0x000000 and 0xff0000 >> >> > on my Win98SE PC. But on my XP PC the $window_main_cb -> Change >> >> > ( -foreground => 0xff0000 ) and the initial setting of the -foreground => >> >> > 0xff0000 has no effect. Just always black. I can change -background colors >> >> > on both Win98SE and WinXP platforms fine, but not -foreground. Any >> >> > thoughts? My solution is to have the radio button or checkbox without any >> >> > text, and add a text label near it that I can change the -foreground >> >> > and -background, but this is a kludge I would like to avoid. >> >> > >> >> > John Whitney >> >> > Utah, USA >> >> > john at johnwhitney period com >> >> > >> >> > >> >> > ------------------------------------------------------------------------------ >> >> > Start uncovering the many advantages of virtual appliances >> >> > and start using them to simplify application deployment and >> >> > accelerate your shift to cloud computing. >> >> > http://p.sf.net/sfu/novell-sfdev2dev >> >> > _______________________________________________ >> >> > Perl-Win32-GUI-Users mailing list >> >> > Per...@li... >> >> > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >> >> > http://perl-win32-gui.sourceforge.net/ >> >> > >> >> > >> >> > >> >> >> >> >> >> >> > >> > >> >> >> > > |
From: Kevin M. <kej...@ho...> - 2010-09-26 11:32:51
|
John, Win32::VisualStyles has XS code that calls the underlying Windows functions. You will either need to compile the module yourself, or you should be able to install the module using the Perl Package Manager. Kevin. > Appreciate the response. > > In regard to Question 2, I tried to use your example program to see if problem is solved. I got VisualStyles.pm file from CPAN and placed it in my c:/perl/site/lib/win32 folder. > > Then tried to run your example. I get... > > Can't locate loadable object for module Win32::VisualStyles in @INC (@INC contains: . C:/Perl/lib C:/Perl/site/lib .) at C:/Perl/lib/DynaLoader.pm line 118 > DynaLoader::croak('Can\'t locate loadable object for module Win32::VisualStyles ...') called at C:/Perl/lib/DynaLoader.pm line 196 > DynaLoader::bootstrap('Win32::VisualStyles', 0.02) called at C:/Perl/lib/XSLoader.pm line 111 > XSLoader::bootstrap_inherit('Win32::VisualStyles', 0.02) called at tmp.pl line 39 > > This is out of my league to understand what I'm missing. I have perl versions... > > Perl v5.8.8 built for MSWin32-x86-multi-thread > Binary build 817 [257965] by ActiveState Mar 20 2006 17:54:25 > WIN32::GUI version 1.06 > > Am I missing something? > > John > > >> -------Original Message------- >> From: Kevin Marshall<kej...@ho...> >> To: John Whitney<jo...@jo...> >> Cc: per...@li... >> Subject: Re: [perl-win32-gui-users] Vertical line spacing and a Win98/WinXP issue >> Sent: 25 Sep '10 11:43 >> >> John, >> >> Question 1: >> >> After looking through the Windows SDK docs, as far as I can tell, labels >> don't allow you to set the line spacing of the text. The best I can >> think of is to either choose a font with a large line spacing, or you >> could create an owner drawn control and draw the text yourself. >> >> Question 2: >> >> After doing a bit of digging, it seems that if you have themes enabled, >> the method that Win32::GUI uses to change the background and foreground >> colours doesn't work. Depending on the version of Perl that you use, the >> themes may be enabled or not. For example, I use ActiveState Perl 5.12.0 >> which has themes enabled by default. Robert May released a module called >> Win32::VisualStyles (it's on CPAN) which you can use to control the >> styles applied to your window. Simply disable themes before creating the >> checkbox and the foreground and background colors will be applied. Here >> is an example: >> >> #!perl >> use strict; >> use warnings; >> use feature qw(:5.12); >> >> use Win32::GUI qw(); >> use Win32::GUI::Constants qw(CW_USEDEFAULT); >> use Win32::VisualStyles qw(:all); >> >> # Enable themes only for window, disable for controls >> SetThemeAppProperties(STAP_ALLOW_NONCLIENT); >> >> my $win = Win32::GUI::Window->new( >> -name => 'win', >> -size => [ 320, 240 ], >> -left => CW_USEDEFAULT, >> ); >> $win->AddCheckbox( >> -pos => [ 5, 5 ], >> -text => 'Checkbox', >> -foreground => 0x0000ff, >> -background => 0x00ff00, >> ); >> $win->Show(); >> >> Win32::GUI::Dialog(); >> >> __END__ >> >> As an alternative, you could draw the text in the control yourself using >> an owner drawn checkbox. >> >> Hope this helps, >> >> Kevin. >> > Question 1) >> > >> > Anyone know how to get multiple lines in a Win32::GUI::Label to spread out >> > vertially, so there would be an extra 5 pixels between each line? Yes, I >> > could create multiple labels, one for each line, and spread them out an >> > extra 5 pixels. But a simple -linespacing => 5 would be nice. Anything >> > like this in the Win32::GUI world? Below is the label I have. >> > >> > my $window_main_text_label = new Win32::GUI::Label >> > ( >> > $window_main , >> > -text => "Line 1 \n Line 2 \n Line 3 \n Line 4 " , >> > -name => 'window_settings_option_text_label' , >> > -font => $font , >> > -pos => [ 195 , 297 ] , >> > -size => [ 280 , 100 ] >> > ) ; >> > >> > >> > Question 2) >> > >> > With Win32::GUI::RadioButton, and with Win32::GUI::CheckBox I can set and >> > change the -foreground => 0x000000 value just fine to 0x000000 and 0xff0000 >> > on my Win98SE PC. But on my XP PC the $window_main_cb -> Change >> > ( -foreground => 0xff0000 ) and the initial setting of the -foreground => >> > 0xff0000 has no effect. Just always black. I can change -background colors >> > on both Win98SE and WinXP platforms fine, but not -foreground. Any >> > thoughts? My solution is to have the radio button or checkbox without any >> > text, and add a text label near it that I can change the -foreground >> > and -background, but this is a kludge I would like to avoid. >> > >> > John Whitney >> > Utah, USA >> > john at johnwhitney period com >> > >> > >> > ------------------------------------------------------------------------------ >> > Start uncovering the many advantages of virtual appliances >> > and start using them to simplify application deployment and >> > accelerate your shift to cloud computing. >> > http://p.sf.net/sfu/novell-sfdev2dev >> > _______________________________________________ >> > Perl-Win32-GUI-Users mailing list >> > Per...@li... >> > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >> > http://perl-win32-gui.sourceforge.net/ >> > >> > >> > >> >> >> > > |
From: Kevin M. <kej...@ho...> - 2010-09-25 11:44:16
|
John, Question 1: After looking through the Windows SDK docs, as far as I can tell, labels don't allow you to set the line spacing of the text. The best I can think of is to either choose a font with a large line spacing, or you could create an owner drawn control and draw the text yourself. Question 2: After doing a bit of digging, it seems that if you have themes enabled, the method that Win32::GUI uses to change the background and foreground colours doesn't work. Depending on the version of Perl that you use, the themes may be enabled or not. For example, I use ActiveState Perl 5.12.0 which has themes enabled by default. Robert May released a module called Win32::VisualStyles (it's on CPAN) which you can use to control the styles applied to your window. Simply disable themes before creating the checkbox and the foreground and background colors will be applied. Here is an example: #!perl use strict; use warnings; use feature qw(:5.12); use Win32::GUI qw(); use Win32::GUI::Constants qw(CW_USEDEFAULT); use Win32::VisualStyles qw(:all); # Enable themes only for window, disable for controls SetThemeAppProperties(STAP_ALLOW_NONCLIENT); my $win = Win32::GUI::Window->new( -name => 'win', -size => [ 320, 240 ], -left => CW_USEDEFAULT, ); $win->AddCheckbox( -pos => [ 5, 5 ], -text => 'Checkbox', -foreground => 0x0000ff, -background => 0x00ff00, ); $win->Show(); Win32::GUI::Dialog(); __END__ As an alternative, you could draw the text in the control yourself using an owner drawn checkbox. Hope this helps, Kevin. > Question 1) > > Anyone know how to get multiple lines in a Win32::GUI::Label to spread out > vertially, so there would be an extra 5 pixels between each line? Yes, I > could create multiple labels, one for each line, and spread them out an > extra 5 pixels. But a simple -linespacing => 5 would be nice. Anything > like this in the Win32::GUI world? Below is the label I have. > > my $window_main_text_label = new Win32::GUI::Label > ( > $window_main , > -text => "Line 1 \n Line 2 \n Line 3 \n Line 4 " , > -name => 'window_settings_option_text_label' , > -font => $font , > -pos => [ 195 , 297 ] , > -size => [ 280 , 100 ] > ) ; > > > Question 2) > > With Win32::GUI::RadioButton, and with Win32::GUI::CheckBox I can set and > change the -foreground => 0x000000 value just fine to 0x000000 and 0xff0000 > on my Win98SE PC. But on my XP PC the $window_main_cb -> Change > ( -foreground => 0xff0000 ) and the initial setting of the -foreground => > 0xff0000 has no effect. Just always black. I can change -background colors > on both Win98SE and WinXP platforms fine, but not -foreground. Any > thoughts? My solution is to have the radio button or checkbox without any > text, and add a text label near it that I can change the -foreground > and -background, but this is a kludge I would like to avoid. > > John Whitney > Utah, USA > john at johnwhitney period com > > > ------------------------------------------------------------------------------ > Start uncovering the many advantages of virtual appliances > and start using them to simplify application deployment and > accelerate your shift to cloud computing. > http://p.sf.net/sfu/novell-sfdev2dev > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ > > > |
From: Hulley, R. (A. G. S. TPM) <Rob...@hp...> - 2010-09-25 09:51:51
|
You could try the "style" common option parameter. I think one of them is line-height. -pushstyle -pushstyle => NUMBER Add the specified styles to the window's style mask. This option can be repeated multiple times, or values can be 'or'ed together. -----Original Message----- From: John Whitney [mailto:jo...@jo...] Sent: Saturday, 25 September 2010 4:04 PM To: per...@li... Subject: [perl-win32-gui-users] Vertical line spacing and a Win98/WinXP issue Question 1) Anyone know how to get multiple lines in a Win32::GUI::Label to spread out vertially, so there would be an extra 5 pixels between each line? Yes, I could create multiple labels, one for each line, and spread them out an extra 5 pixels. But a simple -linespacing => 5 would be nice. Anything like this in the Win32::GUI world? Below is the label I have. my $window_main_text_label = new Win32::GUI::Label ( $window_main , -text => "Line 1 \n Line 2 \n Line 3 \n Line 4 " , -name => 'window_settings_option_text_label' , -font => $font , -pos => [ 195 , 297 ] , -size => [ 280 , 100 ] ) ; Question 2) With Win32::GUI::RadioButton, and with Win32::GUI::CheckBox I can set and change the -foreground => 0x000000 value just fine to 0x000000 and 0xff0000 on my Win98SE PC. But on my XP PC the $window_main_cb -> Change ( -foreground => 0xff0000 ) and the initial setting of the -foreground => 0xff0000 has no effect. Just always black. I can change -background colors on both Win98SE and WinXP platforms fine, but not -foreground. Any thoughts? My solution is to have the radio button or checkbox without any text, and add a text label near it that I can change the -foreground and -background, but this is a kludge I would like to avoid. John Whitney Utah, USA john at johnwhitney period com ------------------------------------------------------------------------------ Start uncovering the many advantages of virtual appliances and start using them to simplify application deployment and accelerate your shift to cloud computing. http://p.sf.net/sfu/novell-sfdev2dev _______________________________________________ Perl-Win32-GUI-Users mailing list Per...@li... https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users http://perl-win32-gui.sourceforge.net/ |
From: John W. <jo...@jo...> - 2010-09-25 05:29:05
|
Question 1) Anyone know how to get multiple lines in a Win32::GUI::Label to spread out vertially, so there would be an extra 5 pixels between each line? Yes, I could create multiple labels, one for each line, and spread them out an extra 5 pixels. But a simple -linespacing => 5 would be nice. Anything like this in the Win32::GUI world? Below is the label I have. my $window_main_text_label = new Win32::GUI::Label ( $window_main , -text => "Line 1 \n Line 2 \n Line 3 \n Line 4 " , -name => 'window_settings_option_text_label' , -font => $font , -pos => [ 195 , 297 ] , -size => [ 280 , 100 ] ) ; Question 2) With Win32::GUI::RadioButton, and with Win32::GUI::CheckBox I can set and change the -foreground => 0x000000 value just fine to 0x000000 and 0xff0000 on my Win98SE PC. But on my XP PC the $window_main_cb -> Change ( -foreground => 0xff0000 ) and the initial setting of the -foreground => 0xff0000 has no effect. Just always black. I can change -background colors on both Win98SE and WinXP platforms fine, but not -foreground. Any thoughts? My solution is to have the radio button or checkbox without any text, and add a text label near it that I can change the -foreground and -background, but this is a kludge I would like to avoid. John Whitney Utah, USA john at johnwhitney period com |
From: Kevin M. <kej...@ho...> - 2010-09-23 02:03:02
|
Rob, Unfortunately, the 'Create New' button is not available for the BrowseForFolder() function. Perhaps it is something that you could mention to the developers. Kevin. > > Hi Everyone, > > I am using "Win32::GUI::BrowseForFolder" . > > I cannot work out how to add the "create new" option as seen on other > "browse for folder" windows. > > Is this feature available? > > Thanks > > Rob > > > ------------------------------------------------------------------------------ > This SF.net Dev2Dev email is sponsored by: > > Show off your parallel programming skills. > Enter the Intel(R) Threading Challenge 2010. > http://p.sf.net/sfu/intel-thread-sfd > > > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ |
From: Kevin M. <kej...@ho...> - 2010-09-23 01:36:47
|
Shilpa, You could try using the Win32::GuiTest or Win32::GUIRobot modules. They can be found on CPAN. Kevin. > Hi all, > I m trying to automate an GUI which is created using Java > if i see the window in Winspy it shows class as > "vncviewer.ViewportFrame " for top window and no child windows > there are 2 subwindows seen as "SunAwtScrollPane" and "SunAwtCanvas " > but i can see so many buttons and selections in the main window . > > How will i access then is it possible to automate this window using > the Perl Win32 GUI library. > If not what is the way i can automate this > > > Thanks in advance, > Shilpa > > > ------------------------------------------------------------------------------ > Start uncovering the many advantages of virtual appliances > and start using them to simplify application deployment and > accelerate your shift to cloud computing. > http://p.sf.net/sfu/novell-sfdev2dev > > > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ |
From: shilpa h. <200...@gm...> - 2010-09-22 13:24:36
|
Hi all, I m trying to automate an GUI which is created using Java if i see the window in Winspy it shows class as "vncviewer.ViewportFrame " for top window and no child windows there are 2 subwindows seen as "SunAwtScrollPane" and "SunAwtCanvas " but i can see so many buttons and selections in the main window . How will i access then is it possible to automate this window using the Perl Win32 GUI library. If not what is the way i can automate this Thanks in advance, Shilpa |
From: Angelos K. <an...@un...> - 2010-09-17 13:45:06
|
here is a little demo of what Win32::Gui can do http://www.unix.gr/FLOSSeavesDrop.pl Many thanks to all the great people |
From: Vijay M. <vij...@gm...> - 2010-09-17 12:57:02
|
Hi All, Can any body tell me how to use Win32 GuiTest.pm on 64 Bit Win7 machine. If any other module available which can be used for MFC Based Windows application automation. Thanx in Advance Vijay |
From: Kevin M. <kej...@ho...> - 2010-08-29 13:07:59
|
Octavian, According to the Windows docs, the common controls are automatically accessible, which are what Win32::GUI uses, whereas custom controls require additional setup. Kevin. > Hi Kevin, > > I was asking this because all the standard controls which can be created with Win32::GUI are accessible without doing anything special. > > Octavian > > ----- Original Message ----- > From: "Kevin Marshall"<kej...@ho...> > To: "Octavian Rasnita"<ora...@gm...> > Cc:<per...@li...> > Sent: Saturday, August 28, 2010 1:56 PM > Subject: Re: [perl-win32-gui-users] Win32::GUI Owner Drawn Controls > > > >> Hi Octavian, >> >> Thanks for your comments. It's good to know that you find it useful. >> >> I have been looking into Windows Accessibility to see how it works, and >> it seems that under normal circumstances (i.e. creating GUIs using C++, >> rather than Perl), the custom controls must provide an interface to the >> Accessibility API, which accessibility programs can use to interact with >> the control. Unfortunately, it looks like it is probably beyond the >> scope of the Win32::GUI module. >> >> Perhaps it is something that could be looked into for a separate module. >> >> Other people may have thoughts on the topic. >> >> Thanks again, >> >> Kevin. >> >> >>> Hi Kevin, >>> >>> Congratulations for the program! >>> >>> I have tested it with a screen reader and it works. I added the -dialogui => 1 option to the $winMain object to be able to use the keyboard for changing the focus. >>> >>> The only problem, which is an important one, is that if I arrow up or down in the list box, the screen reader announces just things like "item 1 of 8, item 2 of 8" and so on, without telling the label of the current item as it should. >>> >>> Do you (or somebody else) have any idea how to add accessibility features (MSAA) to this custom control in order to be as useful as a standard control? >>> >>> Basicly it should also report the labels of the list box items and not just print them. >>> >>> Thank you. >>> >>> Octavian >>> >>> ----- Original Message ----- >>> From: "Kevin Marshall"<kej...@ho...> >>> To:<per...@li...> >>> Sent: Saturday, August 28, 2010 8:07 AM >>> Subject: [perl-win32-gui-users] Win32::GUI Owner Drawn Controls >>> >>> >>> >>> >>>> Hi everyone, >>>> >>>> After much experimentation, I have finally succeeded in creating an >>>> owner-drawn control in Win32::GUI. I decided to create this post >>>> detailing how to create an owner-drawn control in case someone else has >>>> the need to use one. >>>> >>>> For those of you who don't know, an owner-drawn control allows the user >>>> more control over the appearance of the control. This usually involves >>>> responding to messages sent whenever the control needs to be drawn and >>>> drawing the control in anyway that you wish. >>>> >>>> In order to get my sample to work you will need to install the PeekPoke >>>> module from CPAN. This module allows reading and writing of data to and >>>> from arbitrary memory locations. This is needed to set the height of the >>>> items of the listbox. More on this below. >>>> >>>> This example was created using ActiveState Perl v5.12.0 running on >>>> Windows XP. >>>> >>>> For this example, I will demonstrate how to create an owner-drawn >>>> listbox. The listbox will have items with a larger height, will display >>>> two lines of text with different formats, and an image. >>>> >>>> All of the files related to this example at the bottom of this post. >>>> >>>> Anyway, on with the example. >>>> >>>> I decided to store the information about each listbox item in an >>>> external XML file and use XML::Simple to parse it. This makes it rather >>>> simple to change the information for the listbox items. >>>> >>>> I also created 8 simple 40x40 bitmaps that will be displayed in each >>>> listbox item. >>>> >>>> Now for a description of the code. >>>> >>>> The first step is to create a window for our listbox and load our XML >>>> data from the file using XML::Simple::XMLin(). This is all fairly >>>> simple, so I won't bother explaining. >>>> >>>> Next step is to create a hook for the WM_MEASUREITEM message. This >>>> message is sent when the listbox is created so the user can specify the >>>> width and height of the listbox items. The $lParam variable contains the >>>> address of the structure that is passed to the message, which needs to >>>> be filled out. Here we use the poke() function to write the desired >>>> height into the structure, which in our case is 50. 16 is the offset of >>>> the itemHeight member of the structure which needs to contain the height >>>> that we want when the message returns. >>>> >>>> Next a hook is created for the WM_DRAWITEM message. This message is sent >>>> whenever an item in the listbox requires drawing. First step is to >>>> unpack the structure that is passed to the message. If the itemID >>>> contains -1, then the listbox is empty, so we simply return from the sub >>>> if this occurs. Otherwise, it contains the zero-based index of the item >>>> being drawn. The itemAction member contains the action required for the >>>> drawing. Here we respond if the entire item needs drawing. To begin with >>>> we draw the bitmap for the item. First we create a compatible DC from >>>> the DC that is passed to the message, then select the bitmap for the >>>> current item into it. Then we BitBlt() the contents of the compatible DC >>>> into the item DC. Next we need to draw the text that will be displayed >>>> in the item. We create a large font that will be used for the item's >>>> heading, and select the font into the item DC, remembering the old font. >>>> Then we draw the text into the item DC using DrawText(). Next we select >>>> the old font, and draw the other text that will be displayed in the >>>> item. That completes the drawing for the item, so we return from our sub. >>>> >>>> Next step is to create our listbox. The only difference here from >>>> creating an ordinary listbox is to specify the LBS_OWNERDRAWFIXED style. >>>> This specifies that the listbox will be owner-drawn, and all the items >>>> have the same height. An alternative would be to use the >>>> LBS_OWNERDRAWVARIABLE style instead, which specifies that each item will >>>> have a different height. In this case, the WM_MEASUREITEM would be sent >>>> for each item when the control is created, not just once like our case. >>>> >>>> Next we loop through each item returned from the XML file, create a >>>> Win32::GUI::Bitmap from the file name specified in the file, and add the >>>> relevant data to an array which will be used when drawing the listbox >>>> items. We also add an item to the listbox using the text as a place >>>> holder, although it won't get drawn, so it doesn't matter what is >>>> inserted here. Then we simply show the window and enter the dialog phase. >>>> >>>> The listbox acts like any other listbox, it just has larger items and >>>> different content. This is demonstrated here when an item is selected: >>>> the heading and text of the selected item are printed. >>>> >>>> That's it for creating an owner-drawn listbox. >>>> >>>> Various other controls can also be owner-draw, such as buttons, labels, >>>> and combo boxes. I have yet to try it with other controls, but it >>>> shouldn't be much different from a listbox. >>>> >>>> More information about owner-draw controls can be found in the Windows >>>> SDK Documentation. >>>> >>>> I hope that someone finds this example useful. If you come up with >>>> something interesting, I wouldn't mind a reply post detailing what you >>>> have done. >>>> >>>> Kevin. >>>> >>>> Here are the files: >>>> >>>> This is the main code: >>>> >>>> #!perl >>>> ################################################################################ >>>> # >>>> # customlistbox.pl >>>> # >>>> # Win32::GUI Owner-drawn Controls >>>> # >>>> # This script demonstrates the creation and use of an owner-drawn listbox. >>>> # >>>> # Requirements: >>>> # Win32::GUI >>>> # PeekPoke >>>> # XML::Simple >>>> # >>>> # This program was written using ActiveState Perl 5.12.0 Build 1200 >>>> running on >>>> # Windows XP and using Win32::GUI v1.06, PeekPoke v0.01, and >>>> XML::Simple v2.18 >>>> # >>>> ################################################################################ >>>> use strict; >>>> use warnings; >>>> >>>> use PeekPoke qw(poke); >>>> use Win32::GUI qw(); >>>> use Win32::GUI::Constants qw(CW_USEDEFAULT WM_MEASUREITEM WM_DRAWITEM >>>> ODA_DRAWENTIRE SRCCOPY DT_LEFT DT_TOP DT_WORDBREAK LBS_OWNERDRAWFIXED); >>>> use XML::Simple; >>>> >>>> # Create our main window >>>> my $winMain = Win32::GUI::Window->new( >>>> -name => 'winMain', >>>> -text => 'Owner-Drawn Listbox', >>>> -size => [ 320, 240 ], >>>> -minwidth => 320, >>>> -minheight => 240, >>>> ); >>>> >>>> # Load XML data >>>> my $ListBoxItems = XMLin('customlistbox.xml'); >>>> my @Items; >>>> >>>> # Create a hook to handle WM_MEASUREITEM message. This message is used >>>> to set the >>>> # height of the listbox items. >>>> $winMain->Hook( >>>> WM_MEASUREITEM, >>>> sub { >>>> my( $self, $wParam, $lParam, $type, $msgcode ) = @_; >>>> return 1 unless $type == 0; >>>> return 1 unless $msgcode == WM_MEASUREITEM; >>>> # Write desired height of items to structure. 16 is the offset >>>> of the >>>> # itemHeight member of the MEASUREITEMSTRUCT structure >>>> poke( $lParam + 16, 50 ); >>>> return 1; >>>> }, >>>> ); >>>> >>>> # Create a hook to handle the WM_DRAWITEM message. This message is sent >>>> whenever >>>> # a listbox item needs drawing >>>> $winMain->Hook( >>>> WM_DRAWITEM, >>>> sub { >>>> my( $self, $wParam, $lParam, $type, $msgcode ) = @_; >>>> my %drawitem; >>>> # Unpack data from the structure >>>> @drawitem{qw(CtlType CtlID itemID itemAction itemState hwndItem >>>> hDC left >>>> top right bottom itemData)} = unpack 'IIIIILLllllL', unpack >>>> 'P48', >>>> pack 'L', $lParam; >>>> # itemID will contain -1 if there are no items, so we just return >>>> return 1 if $drawitem{'itemID'} == -1; >>>> >>>> # Draw the bitmap and text for the list box item. >>>> if( $drawitem{'itemAction'} == ODA_DRAWENTIRE ){ >>>> my $hDC = $drawitem{'hDC'}; >>>> >>>> # Display the bitmap associated with the item. >>>> my $image = $Items[ $drawitem{'itemID'} ]{'image'}; >>>> my $memdc = Win32::GUI::DC::CreateCompatibleDC($hDC); >>>> my $oldimage = $memdc->SelectObject($image); >>>> Win32::GUI::DC::BitBlt( >>>> $hDC, $drawitem{'right'} - 45, $drawitem{'top'} + 5, >>>> 40, 40, $memdc, 0, 0, SRCCOPY >>>> ); >>>> >>>> # Display the text associated with the item. >>>> my $titlefont = Win32::GUI::Font->new( >>>> -height => 12, >>>> -weight => 700, >>>> ); >>>> my $oldfont = Win32::GUI::DC::SelectObject( $hDC, $titlefont ); >>>> Win32::GUI::DC::DrawText( >>>> $hDC, >>>> $Items[ $drawitem{'itemID'} ]{'heading'}, >>>> $drawitem{'left'} + 5, $drawitem{'top'} + 5, >>>> $drawitem{'right'} - 50, $drawitem{'bottom'} - 5, >>>> ); >>>> Win32::GUI::DC::SelectObject($drawitem{'hDC'}, $oldfont); >>>> Win32::GUI::DC::DrawText( >>>> $hDC, >>>> $Items[ $drawitem{'itemID'} ]{'text'}, >>>> $drawitem{'left'} + 5, $drawitem{'top'} + 30, >>>> $drawitem{'right'} - 50, $drawitem{'bottom'} - 5, >>>> DT_LEFT | DT_TOP | DT_WORDBREAK >>>> ); >>>> } >>>> return 1; >>>> } >>>> ); >>>> >>>> # Create our listbox control >>>> my $lsbCustom = $winMain->AddListbox( >>>> -name => 'lsbCustom', >>>> -pos => [ 10, 10 ], >>>> -size => [ $winMain->ScaleWidth() - 20, >>>> $winMain->ScaleHeight() - 20 ], >>>> -nointegralheight => 1, >>>> -vscroll => 1, >>>> -pushstyle => LBS_OWNERDRAWFIXED, >>>> ); >>>> # Add items to listbox >>>> foreach my $item ( @{ $ListBoxItems->{'item'} } ){ >>>> my $bmp = Win32::GUI::Bitmap->new( $item->{'image'} ); >>>> push @Items, { >>>> heading => $item->{'heading'}, >>>> text => $item->{'text'}, >>>> image => $bmp, >>>> }; >>>> $lsbCustom->InsertString( $item->{text} ); >>>> } >>>> >>>> $winMain->Show(); >>>> >>>> Win32::GUI::Dialog(); >>>> >>>> sub winMain_Terminate { >>>> return -1; >>>> } >>>> >>>> sub winMain_Resize { >>>> my $width = $winMain->ScaleWidth(); >>>> my $height = $winMain->ScaleHeight(); >>>> $lsbCustom->Resize( $width - 20, $height - 20 ); >>>> return 1; >>>> } >>>> >>>> sub lsbCustom_SelChange { >>>> my $index = $lsbCustom->GetCurSel(); >>>> print<<EOT; >>>> $Items[$index]{heading} >>>> $Items[$index]{text} >>>> EOT >>>> return 1; >>>> } >>>> >>>> __END__ # of customlistbox.pl >>>> >>>> >>>> >>>> This is the XML file that stores the data for each item in the listbox: >>>> >>>> <!-- customlistbox.xml --> >>>> <listboxitems> >>>> <item> >>>> <heading>Item 1</heading> >>>> <image>item1.bmp</image> >>>> <text>This is some text for item 1</text> >>>> </item> >>>> <item> >>>> <heading>Item 2</heading> >>>> <image>item2.bmp</image> >>>> <text>This is some text for item 2</text> >>>> </item> >>>> <item> >>>> <heading>Item 3</heading> >>>> <image>item3.bmp</image> >>>> <text>This is some text for item 3</text> >>>> </item> >>>> <item> >>>> <heading>Item 4</heading> >>>> <image>item4.bmp</image> >>>> <text>This is some text for item 4</text> >>>> </item> >>>> <item> >>>> <heading>Item 5</heading> >>>> <image>item5.bmp</image> >>>> <text>This is some text for item 5</text> >>>> </item> >>>> <item> >>>> <heading>Item 6</heading> >>>> <image>item6.bmp</image> >>>> <text>This is some text for item 6</text> >>>> </item> >>>> <item> >>>> <heading>Item 7</heading> >>>> <image>item7.bmp</image> >>>> <text>This is some text for item 7</text> >>>> </item> >>>> <item> >>>> <heading>Item 8</heading> >>>> <image>item8.bmp</image> >>>> <text>This is some text for item 8</text> >>>> </item> >>>> </listboxitems> >>>> <!-- end of customlistbox.xml --> >>>> >>>> If you execute this script, it will create a file called pics.7z file, >>>> which will contain the 8 bitmaps needed for this sample: >>>> >>>> #!perl >>>> use strict; >>>> use warnings; >>>> >>>> use MIME::Base64; >>>> >>>> open my $fh, '>', 'pics.7z' or die $!; >>>> binmode $fh; >>>> print {$fh} MIME::Base64::decode( >>>> 'N3q8ryccAANPwVVtOwEAAAAAAAAjAAAAAAAAAJASfkEAIRNayxcGoME2nyL7I4JzfZi4oHYg66A8 >>>> nm6WsRvMHTne+oX2PHIJM7ayDfdnbZ0DmCN8Mf70re7XhMyBeX4+OafcrXhvLiG669M+EMuzgnG7 >>>> JvuHqsUDJQokFWg0SzmcesrNrAHXMApzksKeghHSU1HMZ64/6cXUSTzQaCJdREH7ieEAAACBMweu >>>> D9Uvw85WbCkfSCtBMmjGwE0B4XqeDwoyHBt1/T8r3bH8o1BWWPseZbEvATR9EeL4s4UpAsX59y9L >>>> RF7bndv+H7Dz0pCHk43K2555nX5iAiwmibuV8uDOx83QgHHTqy9AORcPkqPfO6duMlkZ+UYo1t0/ >>>> TapX+1Jl1LSaAcpSost05OeRFdSSTWGt3tvzEPzEG8sIrZ+vTlWBzDSQrvvsJkdLC0r63jRJhP2+ >>>> sK6GAAAXBoCFAQmAtgAHCwEAASMDAQEFXQAQAAAMgWMKAVQcA6kAAA=='); >>>> close $fh; >>>> >>>> __END__ >>>> >>>> >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Sell apps to millions through the Intel(R) Atom(Tm) Developer Program >>>> Be part of this innovative community and reach millions of netbook users >>>> worldwide. Take advantage of special opportunities to increase revenue and >>>> speed time-to-market. Join now, and jumpstart your future. >>>> http://p.sf.net/sfu/intel-atom-d2d >>>> _______________________________________________ >>>> Perl-Win32-GUI-Users mailing list >>>> Per...@li... >>>> https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >>>> http://perl-win32-gui.sourceforge.net/ >>>> >>>> >>> >>> > > |
From: Kevin M. <kej...@ho...> - 2010-08-29 13:06:45
|
Reini, The thing is that Custom Draw is supported by a different set of controls to Owner Draw, so I suppose a combination of both could be used. Kevin. > 2010/8/28 Kevin Marshall<kej...@ho...>: > >> After much experimentation, I have finally succeeded in creating an >> owner-drawn control in Win32::GUI. I decided to create this post >> detailing how to create an owner-drawn control in case someone else has >> the need to use one. >> > I posted a fullfletched patch for the simplier CustomDraw, > which I'm using for years to do the same. > I primarily use it to color list items. > > Added > http://www.mail-archive.com/per...@li.../msg00624.html > and removed, promised for 1.04, but it didn't happen. > http://www.mail-archive.com/per...@li.../msg00628.html > > |
From: Joshua N. <jo...@jo...> - 2010-08-29 00:29:52
|
Kevin, Excellent work! Thank you very much for your efforts on this. I'm going to test it out this week. If everyone is interested, I'll let everyone know how it goes. Reini, Also, excellent work. The unfortunate thing is that your patch is for 1.04. Most people are using 1.06 these days. I found a patch for 1.05 but again that's still not 1.06. Do you have a patch for 1.06? Regards, Joshua New On Sat, August 28, 2010 7:17 am, Reini Urban wrote: > 2010/8/28 Kevin Marshall <kej...@ho...>: > >> After much experimentation, I have finally succeeded in creating an >> owner-drawn control in Win32::GUI. I decided to create this post >> detailing how to create an owner-drawn control in case someone else has >> the need to use one. > > I posted a fullfletched patch for the simplier CustomDraw, > which I'm using for years to do the same. I primarily use it to color list > items. > > Added > http://www.mail-archive.com/per...@li.../m > sg00624.html and removed, promised for 1.04, but it didn't happen. > http://www.mail-archive.com/per...@li.../ > msg00628.html > > -- > Reini Urban > http://phpwiki.org/ http://murbreak.at/ > > > ------------------------------------------------------------------------- > ----- > Sell apps to millions through the Intel(R) Atom(Tm) Developer Program > Be part of this innovative community and reach millions of netbook users > worldwide. Take advantage of special opportunities to increase revenue and > speed time-to-market. Join now, and jumpstart your future. > http://p.sf.net/sfu/intel-atom-d2d > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ |
From: glass <gla...@ya...> - 2010-08-28 15:11:58
|
Thank you Kevin for the rich example, here is a picture of what i got: http://img130.imageshack.us/img130/1870/customlistbox.png the two codes are inspiring and very usefull. thanks peter Kevin Marshall-4 wrote: > > Hi everyone, > > After much experimentation, I have finally succeeded in creating an > owner-drawn control in Win32::GUI. I decided to create this post > detailing how to create an owner-drawn control in case someone else has > the need to use one. > > For those of you who don't know, an owner-drawn control allows the user > more control over the appearance of the control. This usually involves > responding to messages sent whenever the control needs to be drawn and > drawing the control in anyway that you wish. > > In order to get my sample to work you will need to install the PeekPoke > module from CPAN. This module allows reading and writing of data to and > from arbitrary memory locations. This is needed to set the height of the > items of the listbox. More on this below. > > This example was created using ActiveState Perl v5.12.0 running on > Windows XP. > > For this example, I will demonstrate how to create an owner-drawn > listbox. The listbox will have items with a larger height, will display > two lines of text with different formats, and an image. > > All of the files related to this example at the bottom of this post. > > Anyway, on with the example. > > I decided to store the information about each listbox item in an > external XML file and use XML::Simple to parse it. This makes it rather > simple to change the information for the listbox items. > > I also created 8 simple 40x40 bitmaps that will be displayed in each > listbox item. > > Now for a description of the code. > > The first step is to create a window for our listbox and load our XML > data from the file using XML::Simple::XMLin(). This is all fairly > simple, so I won't bother explaining. > > Next step is to create a hook for the WM_MEASUREITEM message. This > message is sent when the listbox is created so the user can specify the > width and height of the listbox items. The $lParam variable contains the > address of the structure that is passed to the message, which needs to > be filled out. Here we use the poke() function to write the desired > height into the structure, which in our case is 50. 16 is the offset of > the itemHeight member of the structure which needs to contain the height > that we want when the message returns. > > Next a hook is created for the WM_DRAWITEM message. This message is sent > whenever an item in the listbox requires drawing. First step is to > unpack the structure that is passed to the message. If the itemID > contains -1, then the listbox is empty, so we simply return from the sub > if this occurs. Otherwise, it contains the zero-based index of the item > being drawn. The itemAction member contains the action required for the > drawing. Here we respond if the entire item needs drawing. To begin with > we draw the bitmap for the item. First we create a compatible DC from > the DC that is passed to the message, then select the bitmap for the > current item into it. Then we BitBlt() the contents of the compatible DC > into the item DC. Next we need to draw the text that will be displayed > in the item. We create a large font that will be used for the item's > heading, and select the font into the item DC, remembering the old font. > Then we draw the text into the item DC using DrawText(). Next we select > the old font, and draw the other text that will be displayed in the > item. That completes the drawing for the item, so we return from our sub. > > Next step is to create our listbox. The only difference here from > creating an ordinary listbox is to specify the LBS_OWNERDRAWFIXED style. > This specifies that the listbox will be owner-drawn, and all the items > have the same height. An alternative would be to use the > LBS_OWNERDRAWVARIABLE style instead, which specifies that each item will > have a different height. In this case, the WM_MEASUREITEM would be sent > for each item when the control is created, not just once like our case. > > Next we loop through each item returned from the XML file, create a > Win32::GUI::Bitmap from the file name specified in the file, and add the > relevant data to an array which will be used when drawing the listbox > items. We also add an item to the listbox using the text as a place > holder, although it won't get drawn, so it doesn't matter what is > inserted here. Then we simply show the window and enter the dialog phase. > > The listbox acts like any other listbox, it just has larger items and > different content. This is demonstrated here when an item is selected: > the heading and text of the selected item are printed. > > That's it for creating an owner-drawn listbox. > > Various other controls can also be owner-draw, such as buttons, labels, > and combo boxes. I have yet to try it with other controls, but it > shouldn't be much different from a listbox. > > More information about owner-draw controls can be found in the Windows > SDK Documentation. > > I hope that someone finds this example useful. If you come up with > something interesting, I wouldn't mind a reply post detailing what you > have done. > > Kevin. > > Here are the files: > > This is the main code: > > #!perl > ################################################################################ > # > # customlistbox.pl > # > # Win32::GUI Owner-drawn Controls > # > # This script demonstrates the creation and use of an owner-drawn > listbox. > # > # Requirements: > # Win32::GUI > # PeekPoke > # XML::Simple > # > # This program was written using ActiveState Perl 5.12.0 Build 1200 > running on > # Windows XP and using Win32::GUI v1.06, PeekPoke v0.01, and > XML::Simple v2.18 > # > ################################################################################ > use strict; > use warnings; > > use PeekPoke qw(poke); > use Win32::GUI qw(); > use Win32::GUI::Constants qw(CW_USEDEFAULT WM_MEASUREITEM WM_DRAWITEM > ODA_DRAWENTIRE SRCCOPY DT_LEFT DT_TOP DT_WORDBREAK > LBS_OWNERDRAWFIXED); > use XML::Simple; > > # Create our main window > my $winMain = Win32::GUI::Window->new( > -name => 'winMain', > -text => 'Owner-Drawn Listbox', > -size => [ 320, 240 ], > -minwidth => 320, > -minheight => 240, > ); > > # Load XML data > my $ListBoxItems = XMLin('customlistbox.xml'); > my @Items; > > # Create a hook to handle WM_MEASUREITEM message. This message is used > to set the > # height of the listbox items. > $winMain->Hook( > WM_MEASUREITEM, > sub { > my( $self, $wParam, $lParam, $type, $msgcode ) = @_; > return 1 unless $type == 0; > return 1 unless $msgcode == WM_MEASUREITEM; > # Write desired height of items to structure. 16 is the offset > of the > # itemHeight member of the MEASUREITEMSTRUCT structure > poke( $lParam + 16, 50 ); > return 1; > }, > ); > > # Create a hook to handle the WM_DRAWITEM message. This message is sent > whenever > # a listbox item needs drawing > $winMain->Hook( > WM_DRAWITEM, > sub { > my( $self, $wParam, $lParam, $type, $msgcode ) = @_; > my %drawitem; > # Unpack data from the structure > @drawitem{qw(CtlType CtlID itemID itemAction itemState hwndItem > hDC left > top right bottom itemData)} = unpack 'IIIIILLllllL', unpack > 'P48', > pack 'L', $lParam; > # itemID will contain -1 if there are no items, so we just return > return 1 if $drawitem{'itemID'} == -1; > > # Draw the bitmap and text for the list box item. > if( $drawitem{'itemAction'} == ODA_DRAWENTIRE ){ > my $hDC = $drawitem{'hDC'}; > > # Display the bitmap associated with the item. > my $image = $Items[ $drawitem{'itemID'} ]{'image'}; > my $memdc = Win32::GUI::DC::CreateCompatibleDC($hDC); > my $oldimage = $memdc->SelectObject($image); > Win32::GUI::DC::BitBlt( > $hDC, $drawitem{'right'} - 45, $drawitem{'top'} + 5, > 40, 40, $memdc, 0, 0, SRCCOPY > ); > > # Display the text associated with the item. > my $titlefont = Win32::GUI::Font->new( > -height => 12, > -weight => 700, > ); > my $oldfont = Win32::GUI::DC::SelectObject( $hDC, $titlefont > ); > Win32::GUI::DC::DrawText( > $hDC, > $Items[ $drawitem{'itemID'} ]{'heading'}, > $drawitem{'left'} + 5, $drawitem{'top'} + 5, > $drawitem{'right'} - 50, $drawitem{'bottom'} - 5, > ); > Win32::GUI::DC::SelectObject($drawitem{'hDC'}, $oldfont); > Win32::GUI::DC::DrawText( > $hDC, > $Items[ $drawitem{'itemID'} ]{'text'}, > $drawitem{'left'} + 5, $drawitem{'top'} + 30, > $drawitem{'right'} - 50, $drawitem{'bottom'} - 5, > DT_LEFT | DT_TOP | DT_WORDBREAK > ); > } > return 1; > } > ); > > # Create our listbox control > my $lsbCustom = $winMain->AddListbox( > -name => 'lsbCustom', > -pos => [ 10, 10 ], > -size => [ $winMain->ScaleWidth() - 20, > $winMain->ScaleHeight() - 20 ], > -nointegralheight => 1, > -vscroll => 1, > -pushstyle => LBS_OWNERDRAWFIXED, > ); > # Add items to listbox > foreach my $item ( @{ $ListBoxItems->{'item'} } ){ > my $bmp = Win32::GUI::Bitmap->new( $item->{'image'} ); > push @Items, { > heading => $item->{'heading'}, > text => $item->{'text'}, > image => $bmp, > }; > $lsbCustom->InsertString( $item->{text} ); > } > > $winMain->Show(); > > Win32::GUI::Dialog(); > > sub winMain_Terminate { > return -1; > } > > sub winMain_Resize { > my $width = $winMain->ScaleWidth(); > my $height = $winMain->ScaleHeight(); > $lsbCustom->Resize( $width - 20, $height - 20 ); > return 1; > } > > sub lsbCustom_SelChange { > my $index = $lsbCustom->GetCurSel(); > print <<EOT; > $Items[$index]{heading} > $Items[$index]{text} > EOT > return 1; > } > > __END__ # of customlistbox.pl > > > > This is the XML file that stores the data for each item in the listbox: > > <!-- customlistbox.xml --> > <listboxitems> > <item> > <heading>Item 1</heading> > <image>item1.bmp</image> > <text>This is some text for item 1</text> > </item> > <item> > <heading>Item 2</heading> > <image>item2.bmp</image> > <text>This is some text for item 2</text> > </item> > <item> > <heading>Item 3</heading> > <image>item3.bmp</image> > <text>This is some text for item 3</text> > </item> > <item> > <heading>Item 4</heading> > <image>item4.bmp</image> > <text>This is some text for item 4</text> > </item> > <item> > <heading>Item 5</heading> > <image>item5.bmp</image> > <text>This is some text for item 5</text> > </item> > <item> > <heading>Item 6</heading> > <image>item6.bmp</image> > <text>This is some text for item 6</text> > </item> > <item> > <heading>Item 7</heading> > <image>item7.bmp</image> > <text>This is some text for item 7</text> > </item> > <item> > <heading>Item 8</heading> > <image>item8.bmp</image> > <text>This is some text for item 8</text> > </item> > </listboxitems> > <!-- end of customlistbox.xml --> > > If you execute this script, it will create a file called pics.7z file, > which will contain the 8 bitmaps needed for this sample: > > #!perl > use strict; > use warnings; > > use MIME::Base64; > > open my $fh, '>', 'pics.7z' or die $!; > binmode $fh; > print {$fh} MIME::Base64::decode( > 'N3q8ryccAANPwVVtOwEAAAAAAAAjAAAAAAAAAJASfkEAIRNayxcGoME2nyL7I4JzfZi4oHYg66A8 > nm6WsRvMHTne+oX2PHIJM7ayDfdnbZ0DmCN8Mf70re7XhMyBeX4+OafcrXhvLiG669M+EMuzgnG7 > JvuHqsUDJQokFWg0SzmcesrNrAHXMApzksKeghHSU1HMZ64/6cXUSTzQaCJdREH7ieEAAACBMweu > D9Uvw85WbCkfSCtBMmjGwE0B4XqeDwoyHBt1/T8r3bH8o1BWWPseZbEvATR9EeL4s4UpAsX59y9L > RF7bndv+H7Dz0pCHk43K2555nX5iAiwmibuV8uDOx83QgHHTqy9AORcPkqPfO6duMlkZ+UYo1t0/ > TapX+1Jl1LSaAcpSost05OeRFdSSTWGt3tvzEPzEG8sIrZ+vTlWBzDSQrvvsJkdLC0r63jRJhP2+ > sK6GAAAXBoCFAQmAtgAHCwEAASMDAQEFXQAQAAAMgWMKAVQcA6kAAA=='); > close $fh; > > __END__ > > > > > ------------------------------------------------------------------------------ > Sell apps to millions through the Intel(R) Atom(Tm) Developer Program > Be part of this innovative community and reach millions of netbook users > worldwide. Take advantage of special opportunities to increase revenue and > speed time-to-market. Join now, and jumpstart your future. > http://p.sf.net/sfu/intel-atom-d2d > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ > > -- View this message in context: http://old.nabble.com/Win32%3A%3AGUI-Owner-Drawn-Controls-tp29558631p29560854.html Sent from the perl-win32-gui-users mailing list archive at Nabble.com. |
From: Reini U. <ru...@x-...> - 2010-08-28 14:18:06
|
2010/8/28 Kevin Marshall <kej...@ho...>: > After much experimentation, I have finally succeeded in creating an > owner-drawn control in Win32::GUI. I decided to create this post > detailing how to create an owner-drawn control in case someone else has > the need to use one. I posted a fullfletched patch for the simplier CustomDraw, which I'm using for years to do the same. I primarily use it to color list items. Added http://www.mail-archive.com/per...@li.../msg00624.html and removed, promised for 1.04, but it didn't happen. http://www.mail-archive.com/per...@li.../msg00628.html -- Reini Urban http://phpwiki.org/ http://murbreak.at/ |
From: Octavian R. <ora...@gm...> - 2010-08-28 13:27:15
|
Hi Kevin, I was asking this because all the standard controls which can be created with Win32::GUI are accessible without doing anything special. Octavian ----- Original Message ----- From: "Kevin Marshall" <kej...@ho...> To: "Octavian Rasnita" <ora...@gm...> Cc: <per...@li...> Sent: Saturday, August 28, 2010 1:56 PM Subject: Re: [perl-win32-gui-users] Win32::GUI Owner Drawn Controls > Hi Octavian, > > Thanks for your comments. It's good to know that you find it useful. > > I have been looking into Windows Accessibility to see how it works, and > it seems that under normal circumstances (i.e. creating GUIs using C++, > rather than Perl), the custom controls must provide an interface to the > Accessibility API, which accessibility programs can use to interact with > the control. Unfortunately, it looks like it is probably beyond the > scope of the Win32::GUI module. > > Perhaps it is something that could be looked into for a separate module. > > Other people may have thoughts on the topic. > > Thanks again, > > Kevin. > >> Hi Kevin, >> >> Congratulations for the program! >> >> I have tested it with a screen reader and it works. I added the -dialogui => 1 option to the $winMain object to be able to use the keyboard for changing the focus. >> >> The only problem, which is an important one, is that if I arrow up or down in the list box, the screen reader announces just things like "item 1 of 8, item 2 of 8" and so on, without telling the label of the current item as it should. >> >> Do you (or somebody else) have any idea how to add accessibility features (MSAA) to this custom control in order to be as useful as a standard control? >> >> Basicly it should also report the labels of the list box items and not just print them. >> >> Thank you. >> >> Octavian >> >> ----- Original Message ----- >> From: "Kevin Marshall"<kej...@ho...> >> To:<per...@li...> >> Sent: Saturday, August 28, 2010 8:07 AM >> Subject: [perl-win32-gui-users] Win32::GUI Owner Drawn Controls >> >> >> >>> Hi everyone, >>> >>> After much experimentation, I have finally succeeded in creating an >>> owner-drawn control in Win32::GUI. I decided to create this post >>> detailing how to create an owner-drawn control in case someone else has >>> the need to use one. >>> >>> For those of you who don't know, an owner-drawn control allows the user >>> more control over the appearance of the control. This usually involves >>> responding to messages sent whenever the control needs to be drawn and >>> drawing the control in anyway that you wish. >>> >>> In order to get my sample to work you will need to install the PeekPoke >>> module from CPAN. This module allows reading and writing of data to and >>> from arbitrary memory locations. This is needed to set the height of the >>> items of the listbox. More on this below. >>> >>> This example was created using ActiveState Perl v5.12.0 running on >>> Windows XP. >>> >>> For this example, I will demonstrate how to create an owner-drawn >>> listbox. The listbox will have items with a larger height, will display >>> two lines of text with different formats, and an image. >>> >>> All of the files related to this example at the bottom of this post. >>> >>> Anyway, on with the example. >>> >>> I decided to store the information about each listbox item in an >>> external XML file and use XML::Simple to parse it. This makes it rather >>> simple to change the information for the listbox items. >>> >>> I also created 8 simple 40x40 bitmaps that will be displayed in each >>> listbox item. >>> >>> Now for a description of the code. >>> >>> The first step is to create a window for our listbox and load our XML >>> data from the file using XML::Simple::XMLin(). This is all fairly >>> simple, so I won't bother explaining. >>> >>> Next step is to create a hook for the WM_MEASUREITEM message. This >>> message is sent when the listbox is created so the user can specify the >>> width and height of the listbox items. The $lParam variable contains the >>> address of the structure that is passed to the message, which needs to >>> be filled out. Here we use the poke() function to write the desired >>> height into the structure, which in our case is 50. 16 is the offset of >>> the itemHeight member of the structure which needs to contain the height >>> that we want when the message returns. >>> >>> Next a hook is created for the WM_DRAWITEM message. This message is sent >>> whenever an item in the listbox requires drawing. First step is to >>> unpack the structure that is passed to the message. If the itemID >>> contains -1, then the listbox is empty, so we simply return from the sub >>> if this occurs. Otherwise, it contains the zero-based index of the item >>> being drawn. The itemAction member contains the action required for the >>> drawing. Here we respond if the entire item needs drawing. To begin with >>> we draw the bitmap for the item. First we create a compatible DC from >>> the DC that is passed to the message, then select the bitmap for the >>> current item into it. Then we BitBlt() the contents of the compatible DC >>> into the item DC. Next we need to draw the text that will be displayed >>> in the item. We create a large font that will be used for the item's >>> heading, and select the font into the item DC, remembering the old font. >>> Then we draw the text into the item DC using DrawText(). Next we select >>> the old font, and draw the other text that will be displayed in the >>> item. That completes the drawing for the item, so we return from our sub. >>> >>> Next step is to create our listbox. The only difference here from >>> creating an ordinary listbox is to specify the LBS_OWNERDRAWFIXED style. >>> This specifies that the listbox will be owner-drawn, and all the items >>> have the same height. An alternative would be to use the >>> LBS_OWNERDRAWVARIABLE style instead, which specifies that each item will >>> have a different height. In this case, the WM_MEASUREITEM would be sent >>> for each item when the control is created, not just once like our case. >>> >>> Next we loop through each item returned from the XML file, create a >>> Win32::GUI::Bitmap from the file name specified in the file, and add the >>> relevant data to an array which will be used when drawing the listbox >>> items. We also add an item to the listbox using the text as a place >>> holder, although it won't get drawn, so it doesn't matter what is >>> inserted here. Then we simply show the window and enter the dialog phase. >>> >>> The listbox acts like any other listbox, it just has larger items and >>> different content. This is demonstrated here when an item is selected: >>> the heading and text of the selected item are printed. >>> >>> That's it for creating an owner-drawn listbox. >>> >>> Various other controls can also be owner-draw, such as buttons, labels, >>> and combo boxes. I have yet to try it with other controls, but it >>> shouldn't be much different from a listbox. >>> >>> More information about owner-draw controls can be found in the Windows >>> SDK Documentation. >>> >>> I hope that someone finds this example useful. If you come up with >>> something interesting, I wouldn't mind a reply post detailing what you >>> have done. >>> >>> Kevin. >>> >>> Here are the files: >>> >>> This is the main code: >>> >>> #!perl >>> ################################################################################ >>> # >>> # customlistbox.pl >>> # >>> # Win32::GUI Owner-drawn Controls >>> # >>> # This script demonstrates the creation and use of an owner-drawn listbox. >>> # >>> # Requirements: >>> # Win32::GUI >>> # PeekPoke >>> # XML::Simple >>> # >>> # This program was written using ActiveState Perl 5.12.0 Build 1200 >>> running on >>> # Windows XP and using Win32::GUI v1.06, PeekPoke v0.01, and >>> XML::Simple v2.18 >>> # >>> ################################################################################ >>> use strict; >>> use warnings; >>> >>> use PeekPoke qw(poke); >>> use Win32::GUI qw(); >>> use Win32::GUI::Constants qw(CW_USEDEFAULT WM_MEASUREITEM WM_DRAWITEM >>> ODA_DRAWENTIRE SRCCOPY DT_LEFT DT_TOP DT_WORDBREAK LBS_OWNERDRAWFIXED); >>> use XML::Simple; >>> >>> # Create our main window >>> my $winMain = Win32::GUI::Window->new( >>> -name => 'winMain', >>> -text => 'Owner-Drawn Listbox', >>> -size => [ 320, 240 ], >>> -minwidth => 320, >>> -minheight => 240, >>> ); >>> >>> # Load XML data >>> my $ListBoxItems = XMLin('customlistbox.xml'); >>> my @Items; >>> >>> # Create a hook to handle WM_MEASUREITEM message. This message is used >>> to set the >>> # height of the listbox items. >>> $winMain->Hook( >>> WM_MEASUREITEM, >>> sub { >>> my( $self, $wParam, $lParam, $type, $msgcode ) = @_; >>> return 1 unless $type == 0; >>> return 1 unless $msgcode == WM_MEASUREITEM; >>> # Write desired height of items to structure. 16 is the offset >>> of the >>> # itemHeight member of the MEASUREITEMSTRUCT structure >>> poke( $lParam + 16, 50 ); >>> return 1; >>> }, >>> ); >>> >>> # Create a hook to handle the WM_DRAWITEM message. This message is sent >>> whenever >>> # a listbox item needs drawing >>> $winMain->Hook( >>> WM_DRAWITEM, >>> sub { >>> my( $self, $wParam, $lParam, $type, $msgcode ) = @_; >>> my %drawitem; >>> # Unpack data from the structure >>> @drawitem{qw(CtlType CtlID itemID itemAction itemState hwndItem >>> hDC left >>> top right bottom itemData)} = unpack 'IIIIILLllllL', unpack >>> 'P48', >>> pack 'L', $lParam; >>> # itemID will contain -1 if there are no items, so we just return >>> return 1 if $drawitem{'itemID'} == -1; >>> >>> # Draw the bitmap and text for the list box item. >>> if( $drawitem{'itemAction'} == ODA_DRAWENTIRE ){ >>> my $hDC = $drawitem{'hDC'}; >>> >>> # Display the bitmap associated with the item. >>> my $image = $Items[ $drawitem{'itemID'} ]{'image'}; >>> my $memdc = Win32::GUI::DC::CreateCompatibleDC($hDC); >>> my $oldimage = $memdc->SelectObject($image); >>> Win32::GUI::DC::BitBlt( >>> $hDC, $drawitem{'right'} - 45, $drawitem{'top'} + 5, >>> 40, 40, $memdc, 0, 0, SRCCOPY >>> ); >>> >>> # Display the text associated with the item. >>> my $titlefont = Win32::GUI::Font->new( >>> -height => 12, >>> -weight => 700, >>> ); >>> my $oldfont = Win32::GUI::DC::SelectObject( $hDC, $titlefont ); >>> Win32::GUI::DC::DrawText( >>> $hDC, >>> $Items[ $drawitem{'itemID'} ]{'heading'}, >>> $drawitem{'left'} + 5, $drawitem{'top'} + 5, >>> $drawitem{'right'} - 50, $drawitem{'bottom'} - 5, >>> ); >>> Win32::GUI::DC::SelectObject($drawitem{'hDC'}, $oldfont); >>> Win32::GUI::DC::DrawText( >>> $hDC, >>> $Items[ $drawitem{'itemID'} ]{'text'}, >>> $drawitem{'left'} + 5, $drawitem{'top'} + 30, >>> $drawitem{'right'} - 50, $drawitem{'bottom'} - 5, >>> DT_LEFT | DT_TOP | DT_WORDBREAK >>> ); >>> } >>> return 1; >>> } >>> ); >>> >>> # Create our listbox control >>> my $lsbCustom = $winMain->AddListbox( >>> -name => 'lsbCustom', >>> -pos => [ 10, 10 ], >>> -size => [ $winMain->ScaleWidth() - 20, >>> $winMain->ScaleHeight() - 20 ], >>> -nointegralheight => 1, >>> -vscroll => 1, >>> -pushstyle => LBS_OWNERDRAWFIXED, >>> ); >>> # Add items to listbox >>> foreach my $item ( @{ $ListBoxItems->{'item'} } ){ >>> my $bmp = Win32::GUI::Bitmap->new( $item->{'image'} ); >>> push @Items, { >>> heading => $item->{'heading'}, >>> text => $item->{'text'}, >>> image => $bmp, >>> }; >>> $lsbCustom->InsertString( $item->{text} ); >>> } >>> >>> $winMain->Show(); >>> >>> Win32::GUI::Dialog(); >>> >>> sub winMain_Terminate { >>> return -1; >>> } >>> >>> sub winMain_Resize { >>> my $width = $winMain->ScaleWidth(); >>> my $height = $winMain->ScaleHeight(); >>> $lsbCustom->Resize( $width - 20, $height - 20 ); >>> return 1; >>> } >>> >>> sub lsbCustom_SelChange { >>> my $index = $lsbCustom->GetCurSel(); >>> print<<EOT; >>> $Items[$index]{heading} >>> $Items[$index]{text} >>> EOT >>> return 1; >>> } >>> >>> __END__ # of customlistbox.pl >>> >>> >>> >>> This is the XML file that stores the data for each item in the listbox: >>> >>> <!-- customlistbox.xml --> >>> <listboxitems> >>> <item> >>> <heading>Item 1</heading> >>> <image>item1.bmp</image> >>> <text>This is some text for item 1</text> >>> </item> >>> <item> >>> <heading>Item 2</heading> >>> <image>item2.bmp</image> >>> <text>This is some text for item 2</text> >>> </item> >>> <item> >>> <heading>Item 3</heading> >>> <image>item3.bmp</image> >>> <text>This is some text for item 3</text> >>> </item> >>> <item> >>> <heading>Item 4</heading> >>> <image>item4.bmp</image> >>> <text>This is some text for item 4</text> >>> </item> >>> <item> >>> <heading>Item 5</heading> >>> <image>item5.bmp</image> >>> <text>This is some text for item 5</text> >>> </item> >>> <item> >>> <heading>Item 6</heading> >>> <image>item6.bmp</image> >>> <text>This is some text for item 6</text> >>> </item> >>> <item> >>> <heading>Item 7</heading> >>> <image>item7.bmp</image> >>> <text>This is some text for item 7</text> >>> </item> >>> <item> >>> <heading>Item 8</heading> >>> <image>item8.bmp</image> >>> <text>This is some text for item 8</text> >>> </item> >>> </listboxitems> >>> <!-- end of customlistbox.xml --> >>> >>> If you execute this script, it will create a file called pics.7z file, >>> which will contain the 8 bitmaps needed for this sample: >>> >>> #!perl >>> use strict; >>> use warnings; >>> >>> use MIME::Base64; >>> >>> open my $fh, '>', 'pics.7z' or die $!; >>> binmode $fh; >>> print {$fh} MIME::Base64::decode( >>> 'N3q8ryccAANPwVVtOwEAAAAAAAAjAAAAAAAAAJASfkEAIRNayxcGoME2nyL7I4JzfZi4oHYg66A8 >>> nm6WsRvMHTne+oX2PHIJM7ayDfdnbZ0DmCN8Mf70re7XhMyBeX4+OafcrXhvLiG669M+EMuzgnG7 >>> JvuHqsUDJQokFWg0SzmcesrNrAHXMApzksKeghHSU1HMZ64/6cXUSTzQaCJdREH7ieEAAACBMweu >>> D9Uvw85WbCkfSCtBMmjGwE0B4XqeDwoyHBt1/T8r3bH8o1BWWPseZbEvATR9EeL4s4UpAsX59y9L >>> RF7bndv+H7Dz0pCHk43K2555nX5iAiwmibuV8uDOx83QgHHTqy9AORcPkqPfO6duMlkZ+UYo1t0/ >>> TapX+1Jl1LSaAcpSost05OeRFdSSTWGt3tvzEPzEG8sIrZ+vTlWBzDSQrvvsJkdLC0r63jRJhP2+ >>> sK6GAAAXBoCFAQmAtgAHCwEAASMDAQEFXQAQAAAMgWMKAVQcA6kAAA=='); >>> close $fh; >>> >>> __END__ >>> >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Sell apps to millions through the Intel(R) Atom(Tm) Developer Program >>> Be part of this innovative community and reach millions of netbook users >>> worldwide. Take advantage of special opportunities to increase revenue and >>> speed time-to-market. Join now, and jumpstart your future. >>> http://p.sf.net/sfu/intel-atom-d2d >>> _______________________________________________ >>> Perl-Win32-GUI-Users mailing list >>> Per...@li... >>> https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >>> http://perl-win32-gui.sourceforge.net/ >>> >> >> |