From: <jez...@ho...> - 2006-11-21 16:22:31
|
Yeah I would be - perhaps we could add SetLayeredWindowAttributes to the core? Cheers, Jez. -----Original Message----- From: "Steve Loughran" <ste...@sc...> To: "per...@li..." <per...@li...> Sent: 21/11/06 09:41 Subject: Re: [perl-win32-gui-users] [win32-gui] SetLayeredWindowAttributes ? I managed to get window translucency and transparency working pretty quickly. If anyone is interested, I can post some info about it. Steve Robert May wrote: > Steve Loughran wrote: >> Just a quickie... I can find references in Win32::GUI to SetWindowLong() >> but no mention of SetLayeredWindowAttributes(). Will I have to go down >> the Win32::API call route to obtain this? (I dont want to reinvent the >> wheel). > > No support for SetLayeredWindowAttributes in Win32::GUI currently. > You're on your own with Win32::API at the moment. > > Rob. > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ > ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ 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: Steve L. <ste...@sc...> - 2006-11-21 17:16:42
|
here we go, a very rough idea of how I managed to get it to work. (Am doing a reinstall at the moment on the other machine, so things are a bit of a mess here right now) You will need to cut-n-paste the relevant pieces into your code, but I hope its clear enough. I haven't managed to get translucency and transparency to work on the same window at the same time, but I haven't actually tried all that hard :) Original Visual Basic info found here: http://www.codeguru.com/vb/gen/vb_graphics/transparency/article.php/c6979__1 and http://www.codeguru.com/vb/gen/vb_graphics/transparency/article.php/c6981/ #============================== #for the "SetLayeredWindowAttributes" call import 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 $SetLayeredWindowAttributes = Win32::API->new("user32","SetLayeredWindowAttributes", "LLIN", "I") or die "Failed to load SetLayeredWindowAttributes: $!"; #============ # For Translucency # # This affects the entire window and contents # # where $value is between 255 (solid) and 0 (invisible) #============ my $winstyle = $window->GetWindowLong(GWL_EXSTYLE); $winstyle = $winstyle | WS_EX_LAYERED; $window->SetWindowLong(GWL_EXSTYLE, $winstyle || WS_EX_LAYERED); $SetLayeredWindowAttributes->Call($window->{-handle}, 0, $value, LWA_ALPHA); #============ # For Transparency # # This makes color-keyed areas transparent, so any area of the window # or any item within it that has the exact RGB color match will be # affected by any applied transparency. The rest of the window and items # within it will be unaffected by this. # # where $value is a 0x00bbggrr color value # where $alpha is from 255 (solid) to 0 (completely transparent) # # NOTE: where the $alpha is 0, you can click-through the window into # windows behind it through those transparent areas!! Seriously! #============ my $winstyle = $window->GetWindowLong(GWL_EXSTYLE); $winstyle = $winstyle | WS_EX_LAYERED; $window->SetWindowLong(GWL_EXSTYLE, $winstyle || WS_EX_LAYERED); $SetLayeredWindowAttributes->Call($window->{-handle}, $value, $alpha, LWA_COLORKEY); #============================== I hope that is helpful to someone. |
From: Steve L. <ste...@sc...> - 2006-11-21 17:30:48
|
oh, these only work on windows 2000 and above. I havent tested them on anything before that (my VMWare install is on the box i`m rebuilding), but I`m guessing the WIN32::API import call will fail on < win2000 Steve Steve Loughran wrote: > here we go, a very rough idea of how I managed to get it to work. (Am > doing a reinstall at the moment on the other machine, so things are a > bit of a mess here right now) > > You will need to cut-n-paste the relevant pieces into your code, but I > hope its clear enough. I haven't managed to get translucency and > transparency to work on the same window at the same time, but I haven't > actually tried all that hard :) > > Original Visual Basic info found here: > > http://www.codeguru.com/vb/gen/vb_graphics/transparency/article.php/c6979__1 > > and > > http://www.codeguru.com/vb/gen/vb_graphics/transparency/article.php/c6981/ > > #============================== > > #for the "SetLayeredWindowAttributes" call import > 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 $SetLayeredWindowAttributes = > Win32::API->new("user32","SetLayeredWindowAttributes", "LLIN", "I") > or die "Failed to load SetLayeredWindowAttributes: $!"; > > #============ > # For Translucency > # > # This affects the entire window and contents > # > # where $value is between 255 (solid) and 0 (invisible) > #============ > > my $winstyle = $window->GetWindowLong(GWL_EXSTYLE); > > $winstyle = $winstyle | WS_EX_LAYERED; > > $window->SetWindowLong(GWL_EXSTYLE, $winstyle || WS_EX_LAYERED); > > $SetLayeredWindowAttributes->Call($window->{-handle}, 0, $value, > LWA_ALPHA); > > #============ > # For Transparency > # > # This makes color-keyed areas transparent, so any area of the window > # or any item within it that has the exact RGB color match will be > # affected by any applied transparency. The rest of the window and items > # within it will be unaffected by this. > # > # where $value is a 0x00bbggrr color value > # where $alpha is from 255 (solid) to 0 (completely transparent) > # > # NOTE: where the $alpha is 0, you can click-through the window into > # windows behind it through those transparent areas!! Seriously! > #============ > > my $winstyle = $window->GetWindowLong(GWL_EXSTYLE); > $winstyle = $winstyle | WS_EX_LAYERED; > > $window->SetWindowLong(GWL_EXSTYLE, $winstyle || WS_EX_LAYERED); > > $SetLayeredWindowAttributes->Call($window->{-handle}, $value, $alpha, > LWA_COLORKEY); > > #============================== > > > I hope that is helpful to someone. > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > 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: Jason P. <jp...@un...> - 2006-11-21 17:51:45
|
They will fail < 2000, it wasn't available until 2000 Steve Loughran wrote: > oh, these only work on windows 2000 and above. I havent tested them on > anything before that (my VMWare install is on the box i`m rebuilding), > but I`m guessing the WIN32::API import call will fail on < win2000 > > Steve > > Steve Loughran wrote: > >> here we go, a very rough idea of how I managed to get it to work. (Am >> doing a reinstall at the moment on the other machine, so things are a >> bit of a mess here right now) >> >> You will need to cut-n-paste the relevant pieces into your code, but I >> hope its clear enough. I haven't managed to get translucency and >> transparency to work on the same window at the same time, but I haven't >> actually tried all that hard :) >> >> Original Visual Basic info found here: >> >> http://www.codeguru.com/vb/gen/vb_graphics/transparency/article.php/c6979__1 >> >> and >> >> http://www.codeguru.com/vb/gen/vb_graphics/transparency/article.php/c6981/ >> >> #============================== >> >> #for the "SetLayeredWindowAttributes" call import >> 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 $SetLayeredWindowAttributes = >> Win32::API->new("user32","SetLayeredWindowAttributes", "LLIN", "I") >> or die "Failed to load SetLayeredWindowAttributes: $!"; >> >> #============ >> # For Translucency >> # >> # This affects the entire window and contents >> # >> # where $value is between 255 (solid) and 0 (invisible) >> #============ >> >> my $winstyle = $window->GetWindowLong(GWL_EXSTYLE); >> >> $winstyle = $winstyle | WS_EX_LAYERED; >> >> $window->SetWindowLong(GWL_EXSTYLE, $winstyle || WS_EX_LAYERED); >> >> $SetLayeredWindowAttributes->Call($window->{-handle}, 0, $value, >> LWA_ALPHA); >> >> #============ >> # For Transparency >> # >> # This makes color-keyed areas transparent, so any area of the window >> # or any item within it that has the exact RGB color match will be >> # affected by any applied transparency. The rest of the window and items >> # within it will be unaffected by this. >> # >> # where $value is a 0x00bbggrr color value >> # where $alpha is from 255 (solid) to 0 (completely transparent) >> # >> # NOTE: where the $alpha is 0, you can click-through the window into >> # windows behind it through those transparent areas!! Seriously! >> #============ >> >> my $winstyle = $window->GetWindowLong(GWL_EXSTYLE); >> $winstyle = $winstyle | WS_EX_LAYERED; >> >> $window->SetWindowLong(GWL_EXSTYLE, $winstyle || WS_EX_LAYERED); >> >> $SetLayeredWindowAttributes->Call($window->{-handle}, $value, $alpha, >> LWA_COLORKEY); >> >> #============================== >> >> >> I hope that is helpful to someone. >> >> ------------------------------------------------------------------------- >> Take Surveys. Earn Cash. Influence the Future of IT >> Join SourceForge.net's Techsay panel and you'll get the chance to share your >> opinions on IT & business topics through brief surveys - and earn cash >> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV >> _______________________________________________ >> Perl-Win32-GUI-Users mailing list >> Per...@li... >> https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >> http://perl-win32-gui.sourceforge.net/ >> >> > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > 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: Steve L. <ste...@sc...> - 2006-11-21 22:00:36
|
OK, that will teach me to post code before I run into head-scratching problems :) You can set the color-key area to be totally transparent, or you can set the window to be a variable level of translucent, or both... but it appears you cannot set a color-key area to be partially transparent, its all or nothing.... unless someone can show me how Steve Steve Loughran wrote: > here we go, a very rough idea of how I managed to get it to work. (Am > doing a reinstall at the moment on the other machine, so things are a > bit of a mess here right now) > > You will need to cut-n-paste the relevant pieces into your code, but I > hope its clear enough. I haven't managed to get translucency and > transparency to work on the same window at the same time, but I haven't > actually tried all that hard :) > > Original Visual Basic info found here: > > http://www.codeguru.com/vb/gen/vb_graphics/transparency/article.php/c6979__1 > > and > > http://www.codeguru.com/vb/gen/vb_graphics/transparency/article.php/c6981/ > > #============================== > > #for the "SetLayeredWindowAttributes" call import > 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 $SetLayeredWindowAttributes = > Win32::API->new("user32","SetLayeredWindowAttributes", "LLIN", "I") > or die "Failed to load SetLayeredWindowAttributes: $!"; > > #============ > # For Translucency > # > # This affects the entire window and contents > # > # where $value is between 255 (solid) and 0 (invisible) > #============ > > my $winstyle = $window->GetWindowLong(GWL_EXSTYLE); > > $winstyle = $winstyle | WS_EX_LAYERED; > > $window->SetWindowLong(GWL_EXSTYLE, $winstyle || WS_EX_LAYERED); > > $SetLayeredWindowAttributes->Call($window->{-handle}, 0, $value, > LWA_ALPHA); > > #============ > # For Transparency > # > # This makes color-keyed areas transparent, so any area of the window > # or any item within it that has the exact RGB color match will be > # affected by any applied transparency. The rest of the window and items > # within it will be unaffected by this. > # > # where $value is a 0x00bbggrr color value > # where $alpha is from 255 (solid) to 0 (completely transparent) > # > # NOTE: where the $alpha is 0, you can click-through the window into > # windows behind it through those transparent areas!! Seriously! > #============ > > my $winstyle = $window->GetWindowLong(GWL_EXSTYLE); > $winstyle = $winstyle | WS_EX_LAYERED; > > $window->SetWindowLong(GWL_EXSTYLE, $winstyle || WS_EX_LAYERED); > > $SetLayeredWindowAttributes->Call($window->{-handle}, $value, $alpha, > LWA_COLORKEY); > > #============================== > > > I hope that is helpful to someone. > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ > |