From: Glenn W M. <gw...@se...> - 2005-11-17 15:53:18
|
The main window of my current project comprises a Grid control and a TreeView, in a Windows Explorer-like layout. I would like to provide the option of being able to resize the two controls by click-and-dragging the area between the two. Does anyone have any tips on how to do this? I tried adding a "-resizable => 1" option to the TreeView, but that would have been too easy! (It didn't work, of course). I imagine it makes use of the MouseOver et al. events, but the documentation is a bit thin on those events. Do I have to put another control (a 1-pixel-wide button perhaps?) between the two to get at the events? As usual, an example would be worth a thousand words. Thanks, Glenn |
From: Johan L. <johanl@DarSerMan.com> - 2005-11-17 16:18:28
|
At 16:54 2005-11-17, Glenn W Munroe wrote: >The main window of my current project comprises a Grid control and a >TreeView, in a Windows Explorer-like layout. I would like to provide the >option of being able to resize the two controls by click-and-dragging the >area between the two. Does anyone have any tips on how to do this? I tried >adding a "-resizable => 1" option to the TreeView, but that would have >been too easy! (It didn't work, of course). I imagine it makes use of the >MouseOver et al. events, but the documentation is a bit thin on those >events. Do I have to put another control (a 1-pixel-wide button perhaps?) >between the two to get at the events? As usual, an example would be worth >a thousand words Use the Splitter control. Perl Oasis uses this for an example: http://user.bahnhof.se/~johanl/perl/Oasis/download.html For a smaller and more focused example, download The GUI Loft http://user.bahnhof.se/~johanl/perl/Loft/ and look at the Demo/FileDisplay(manual_resize) example. The purpose of that demo is exactly what you're after. (using the Splitter makes TGL unable to handle all resize code automatically for you, but it still gives a helping hand by providing the basic resize code for the simple things (but not Splitter) which you can adjust and paste into your source). /J -------- ------ ---- --- -- -- -- - - - - - Johan Lindström Sourcerer @ Boss Casinos johanl AT DarSerMan.com Latest bookmark: "TCP Connection Passing" http://tcpcp.sourceforge.net/ dmoz: /Computers/Programming/Languages/JavaScript/ 12 |
From: Glenn W M. <gw...@se...> - 2005-11-17 17:43:35
|
Got it! Thanks, Johan. Glenn -----Original Message----- From: per...@li... [mailto:per...@li...] On Behalf Of = Johan Lindstrom Sent: Thursday, 17 November, 2005 13:18 To: per...@li... Subject: Re: [perl-win32-gui-users] Control Resize At 16:54 2005-11-17, Glenn W Munroe wrote: >The main window of my current project comprises a Grid control and a=20 >TreeView, in a Windows Explorer-like layout. I would like to provide = the=20 >option of being able to resize the two controls by click-and-dragging = the=20 >area between the two. Does anyone have any tips on how to do this? I = tried=20 >adding a "-resizable =3D> 1" option to the TreeView, but that would = have=20 >been too easy! (It didn't work, of course). I imagine it makes use of = the=20 >MouseOver et al. events, but the documentation is a bit thin on those=20 >events. Do I have to put another control (a 1-pixel-wide button = perhaps?)=20 >between the two to get at the events? As usual, an example would be = worth=20 >a thousand words=85 Use the Splitter control. Perl Oasis uses this for an example: http://user.bahnhof.se/~johanl/perl/Oasis/download.html For a smaller and more focused example, download The GUI Loft http://user.bahnhof.se/~johanl/perl/Loft/ and look at the Demo/FileDisplay(manual_resize) example. The purpose of=20 that demo is exactly what you're after. (using the Splitter makes TGL unable to handle all resize code=20 automatically for you, but it still gives a helping hand by providing = the=20 basic resize code for the simple things (but not Splitter) which you can = adjust and paste into your source). /J -------- ------ ---- --- -- -- -- - - - - - Johan Lindstr=F6m Sourcerer @ Boss Casinos johanl AT DarSerMan.com Latest bookmark: "TCP Connection Passing" http://tcpcp.sourceforge.net/ dmoz: /Computers/Programming/Languages/JavaScript/ 12 ------------------------------------------------------- This SF.Net email is sponsored by the JBoss Inc. Get Certified Today Register for a JBoss Training Course. Free Certification Exam for All Training Attendees Through End of 2005. For more info visit: http://ads.osdn.com/?ad_id=3D7628&alloc_id=3D16845&op=3Dclick _______________________________________________ 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: Robert M. <rm...@po...> - 2005-11-17 19:36:32
|
Johan Lindstrom wrote: > At 16:54 2005-11-17, Glenn W Munroe wrote: >=20 >> The main window of my current project comprises a Grid control and a=20 >> TreeView, in a Windows Explorer-like layout. I would like to provide=20 >> the option of being able to resize the two controls by=20 >> click-and-dragging the area between the two. Does anyone have any tips= =20 >> on how to do this? I tried adding a "-resizable =3D> 1" option to the=20 >> TreeView, but that would have been too easy! (It didn't work, of=20 >> course). I imagine it makes use of the MouseOver et al. events, but=20 >> the documentation is a bit thin on those events. Do I have to put=20 >> another control (a 1-pixel-wide button perhaps?) between the two to=20 >> get at the events? As usual, an example would be worth a thousand word= s=85 >=20 > Use the Splitter control. You beat me to it! > Perl Oasis uses this for an example: > http://user.bahnhof.se/~johanl/perl/Oasis/download.html >=20 > For a smaller and more focused example, download The GUI Loft > http://user.bahnhof.se/~johanl/perl/Loft/ > and look at the Demo/FileDisplay(manual_resize) example. The purpose of= =20 > that demo is exactly what you're after. For the record, here's a short example that shows it working with 2=20 Textfield controls. Regards, Rob. #!perl -w use strict; use warnings; use Win32::GUI; my $mw =3D Win32::GUI::Window->new( -title =3D> "Splitter Test", -pos =3D> [100,100], -size =3D> [500,400], -onResize =3D> \&main_resize, ); $mw->AddTextfield( -name =3D> "TF1", -multiline =3D> 1, -width =3D> 200, ); $mw->AddSplitter( -name =3D> "SP", -left =3D> 200, -width =3D> 2, -onRelease =3D> \&do_splitter, ); $mw->AddTextfield( -name =3D> "TF2", -multiline =3D> 1, -left =3D> 200 + $mw->SP->Width(), ); $mw->Show(); Win32::GUI::Dialog(); exit(0); # NEM splitter event gets 2 parameters. The first (as always) # is the window object the wvwnt came from - in this case the # splitter window; The second depends on the splitter orientation: # if horzontal it is the top coordinate; if vertical it is # the left coordinate. (coordinates relative to the parent's # client area) # The splitter window is moved by the splitter object, so you only # have to re-position your other windows sub do_splitter { my ($splitter, $coord) =3D @_; $mw->TF1->Width($coord); $mw->TF2->Move($coord+$mw->SP->Width(), 0); $mw->TF2->Resize($mw->ScaleWidth()-$mw->SP->Width(), $mw->ScaleHeight())= ; } sub main_resize { my $self =3D shift; $mw->TF1->Height($self->ScaleHeight()); $mw->SP->Height($self->ScaleHeight()); $mw->TF2->Resize($mw->ScaleWidth()-$self->TF1->Width()-$mw->SP->Width(), $mw->ScaleHeight()); } __END__ --=20 Robert May Win32::GUI, a perl extension for native Win32 applications http://perl-win32-gui.sourceforge.net/ |