You want to add the buttons to the tab, not a child window. So remove all
the child window "stuff" and change
 
$childwin->AddButton
 
to 
 
$win->Tab->AddButton
 
 
and now $win will remain in focus.
 
 

-----Original Message-----
From: Jez White [mailto:[EMAIL PROTECTED]
Sent: Friday, January 16, 2004 7:37 AM
To: Win32-GUI
Subject: [perl-win32-gui-users] Scroll bar example


Hi,
 
The example below will only work on the latest code line from CVS. 
 
I'm trying to get my head round using scroll bars. In my test example I want
to create a window containing one tab strip. In the tab strip there will be
a child window containing a scroll bar and 10 buttons. Scrolling the scroll
bar will move the buttons into and out view.
 
Now, the scrolling part works fine - but is using a child window in this way
the correct approach? For example, interacting with the child window
(clicking on a button, or scrolling) loses focus (which you would expect for
a normal window) but is not the correct behaviour in this case. Am I missing
something fundamental?
 
Apologies for the dodgy code - is a hack job:)
 
cheers,
 
jez.
 
===========
use Win32::GUI;
use Win32::GUI::BorderlessWindow;
 
#create the main window
my $win = new Win32::GUI::Window (
 -name => "MainWin",
 -left => 0,
 -top => 100,
 -width => 500,
 -height => 300,
 -sizable => 1,
 -text => "Scrollbar Test 2",
 -noflicker => 1,
);
 
#create a tab strip
$win->AddTabStrip (
 -name => "Tab",
 -left => 0,
 -top => 100,
 -width => 250,
 -height => 150,  
);
$win->Tab->InsertItem(-text => 'Some Tab');
 
#create a child window with a scroll bar
my $childwin = new Win32::GUI::BorderlessWindow (
 -name => "Child",
 -parent =>$win,
 -left => 10,
 -top => 250,
 -width => 200,
 -height => 120,
 -hscroll => 1,
 -noflicker => 1,
 -onScroll => \&scrolled
);
 
#create content for our child window, 10 buttons.
foreach (0..9) {
  $childwin->AddButton (
           -name     => "Button".$_,
           -pos      => [$_*50, 30],
           -size     => [50, 20],
           -text     => 'Button'.$_,);
}
 
#set the scrollbar range and starting pos
$childwin->ScrollRange(0,0,450);
$childwin->ScrollPos(0,0);
 
$win->Show;
$childwin->Show;
Win32::GUI::Dialog;
 
sub scrolled {
 my($object,$bar,$operation,$pos) = @_;
 my $string;
 $object->Scroll($bar,$operation,$pos);
 #Scroll the buttons...
 if($operation == SB_THUMBTRACK) {
    foreach (0..9) {
      $string='Button'.$_;
      $childwin->$string->Move(($_*50)-$pos,30);
    }
  }
}

 

Reply via email to