From: george p. <gla...@ya...> - 2008-07-22 06:59:22
|
hello i have a solution, using the Google.pl found in the win32 gui package we add in the main body: # Register Event $Control->RegisterEvent ("DocumentComplete", "DocumentComplete_Event" ); and add the following: # Event handler sub DocumentComplete_Event { $OLEControl->{Document}->write($pic); # Write Html } so we have a good animated Gifs viewer the program now is: use strict; use warnings; use Cwd; use Win32::GUI qw(WS_VSCROLL WS_VISIBLE); use Win32::OLE; use Win32::GUI::AxWindow; my $dir = getcwd; our $OLEControl; our $pic; # main Window my $Window = new Win32::GUI::Window ( -title => "Win32::GUI::AxWindow and Win32::OLE", -pos => [0, 0], -size => [620, 470], -name => "Window", ) or die "new Window"; # Create AxWindow our $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [150, 0], -size => [400, 400], -control => "Shell.Explorer.2", ) or die "new Control"; # Register Event $Control->RegisterEvent ("DocumentComplete", "DocumentComplete_Event" ); my $PicList = $Window->AddListbox( -name => "PicList", -top => 0, -left => 0, -width => 125, -height => 110, -addstyle => WS_VISIBLE | 3 | WS_VSCROLL, ); opendir DH, $dir or die "Cannot open $dir: $!"; my @files = grep { ! -d } readdir DH; closedir DH; #choose only jpg or gif files my @picFiles = grep /.+\.jpg|gif/,@files; # work with @files foreach my $item (@picFiles) { $PicList->Add($item); } #Show application window $Window->Show(); #Enter event loop Win32::GUI::Dialog(); #Hide windows on exit $Window->Hide(); undef $Window; exit(0); # Event handler sub DocumentComplete_Event { $OLEControl->{Document}->write($pic); # Write Html } sub PicList_Click { my $ListSelection = $PicList->SelectedItem(); my $selectedPic = $PicList->GetString($ListSelection); my $picture = $dir . '/' . $selectedPic; # Get Ole object $OLEControl = $Control->GetOLE(); $OLEControl->Navigate("about:Blank"); # Clear control $pic = "<html><body><img src='$picture' /></body></html>"; return 0; } # Main window event handler sub Window_Terminate { # Release all before destroy window undef $OLEControl; $Control->Release(); return -1; } sub Window_Resize { if (defined $Window) { my($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Resize ($width, $height); } } __END__ |