From: Glenn W M. <gwm...@gm...> - 2006-01-13 17:02:39
|
It would be convenient to declare a groupbox and then identify the groupbox as the parent control for other controls to facilitate positioning and operations on the entire group (I think this would also be useful for tabstrips, per the question the other day). The example below shows how moving the groupbox also moves the child controls on resizing the main window. However, I've noticed a couple of problems: * The syntax for accessing the child controls is subtly different. For instance, instead of $obMW->txParent you must use $obMW->gp->{txChild}; * Tabstops don't seem to work for the child controls; * Disabling the group disables the child controls, but there is no visual feedback (i.e. they don't get greyed out). The first point isn't major, but I wonder if the second two aren't related to it. Are these bugs, unimplemented features or do I misunderstand something? Glenn M. #!perl -w use strict; use Win32::GUI; my $obMW; $obMW = Win32::GUI::Window->new( -title => "Hierarchical Controls", -pos => [ 100, 100 ], -size => [ 240, 150 ], -minsize => [ 240, 150 ], -dialogui => 1, -onResize => sub { $obMW->gp->Move(0, $obMW->Height-90); 1 }, ); $obMW->AddButton( -name => "btParent", -text => "Button 1", -size => [ 70, 22 ], -pos => [ 20, 20 ], -tabstop => 1, -onClick => sub { $obMW->txParent->Text("Button 1"); $obMW->gp->{txChild}->Text("Button 1"); $obMW->gp->Enable($obMW->gp->IsEnabled ? 0 : 1); 1; }, ); $obMW->AddTextfield( -name => "txParent", -text => "Textfield 1", -size => [ 100, 22 ], -pos => [ 100, 22 ], -tabstop => 1, ); $obMW->AddGroupbox( -name => "gp", -size => [ ($obMW->GetClientRect)[2]-10, 52 ], -pos => [ 0, 60 ], ); $obMW->AddButton( -name => "btChild", -parent => $obMW->gp, -text => "Button 2", -size => [ 70, 22 ], -pos => [ 20, 15 ], -tabstop => 1, -onClick => sub { $obMW->txParent->Text("Button 2"); $obMW->gp->{txChild}->Text("Button 2"); $obMW->txParent->Enable($obMW->txParent->IsEnabled ? 0 : 1); $obMW->btParent->Enable($obMW->btParent->IsEnabled ? 0 : 1); 1; }, ); $obMW->AddTextfield( -name => "txChild", -parent => $obMW->gp, -text => "Textfield 2", -size => [ 100, 22 ], -pos => [ 100, 15 ], -tabstop => 1, ); $obMW->Show(); Win32::GUI::Dialog(); undef $obMW; |
From: Jeremy W. <jez...@ho...> - 2006-01-17 09:19:24
|
>It would be convenient to declare a groupbox and then identify the groupbox >as the parent control for other controls to facilitate positioning and >operations on the entire group (I think this would also be useful for >tabstrips, per the question the other day). The example below shows how >moving the groupbox also moves the child controls on resizing the main >window. However, I've noticed a couple of problems: >The first point isn't major, but I wonder if the second two aren't related >to it. Are these bugs, unimplemented features or do I misunderstand >something? I must admit that I didn't know you could do this. I also noticed a problem when displaying your example when running with XP styles turned on, so something is not quite right. To achieve a similar effect, I use child windows as "containers" for a group of controls. In your example, I would create a child window which has the group box and the other controls. Moving the child window would move all the controls. Cheers, jez. |
From: Glenn W M. <gwm...@gm...> - 2006-01-17 14:56:54
|
Thanks, Jez. I hadn't thought of that! What styles do you use for the child container windows? Does tabbing work as I had hoped? Glenn -----Original Message----- From: Jeremy White [mailto:jez...@ho...] Sent: Tuesday, 17 January, 2006 06:19 To: gwm...@gm...; per...@li... Subject: RE: [perl-win32-gui-users] Hierarchical controls >It would be convenient to declare a groupbox and then identify the groupbox >as the parent control for other controls to facilitate positioning and >operations on the entire group (I think this would also be useful for >tabstrips, per the question the other day). The example below shows how >moving the groupbox also moves the child controls on resizing the main >window. However, I've noticed a couple of problems: >The first point isn't major, but I wonder if the second two aren't related >to it. Are these bugs, unimplemented features or do I misunderstand >something? I must admit that I didn't know you could do this. I also noticed a problem when displaying your example when running with XP styles turned on, so something is not quite right. To achieve a similar effect, I use child windows as "containers" for a group of controls. In your example, I would create a child window which has the group box and the other controls. Moving the child window would move all the controls. Cheers, jez. |
From: Jeremy W. <jez...@ho...> - 2006-01-17 15:06:43
|
I use: $mainContainer = new Win32::GUI::Window( -name => 'Container', -width => 800, -height => 500, -pos => [0, 310], -parent => $mainwin, -popstyle => Win32::GUI::WS_CAPTION | Win32::GUI::WS_SIZEBOX, -pushstyle => Win32::GUI::WS_CHILD | Win32::GUI::WS_CLIPCHILDREN, -class => $WC, -onResize => \&ContainerResize, ); If you add a class of: $WC = new Win32::GUI::Class( -name => "flicker", -style => 0, ); Then you'll get flicker free resizing when the child window is resized. Not sure about tabbing... Cheers, jez. |
From: Glenn W M. <gwm...@gm...> - 2006-01-17 21:21:59
Attachments:
HierarchicalWindow.pl
|
I reworked my example using a child window instead of a group (as an attachment to preserve formatting). I got exactly the same symptoms (no tabbing to the child controls and no visual indication of a disabled child control). I thought I had it when I discovered this: "WS_EX_CONTROLPARENT Allows the user to navigate among the child windows of the window by using the TAB key." But that didn't work :-( Anybody else have any ideas? Could it be simply a question of getting the right combination of -group and -tabstop options? I can't help feeling there's something deeper going wrong. Glenn -----Original Message----- From: Jeremy White [mailto:jez...@ho...] Sent: Tuesday, 17 January, 2006 12:07 To: gwm...@gm...; per...@li... Subject: RE: [perl-win32-gui-users] Hierarchical controls I use: $mainContainer = new Win32::GUI::Window( -name => 'Container', -width => 800, -height => 500, -pos => [0, 310], -parent => $mainwin, -popstyle => Win32::GUI::WS_CAPTION | Win32::GUI::WS_SIZEBOX, -pushstyle => Win32::GUI::WS_CHILD | Win32::GUI::WS_CLIPCHILDREN, -class => $WC, -onResize => \&ContainerResize, ); If you add a class of: $WC = new Win32::GUI::Class( -name => "flicker", -style => 0, ); Then you'll get flicker free resizing when the child window is resized. Not sure about tabbing... Cheers, jez. |