From: <ra...@me...> - 2004-01-24 22:24:18
|
Hi All, I noticed that when I use the module Win32::FileOp in a GUI application (may be also not gui) in a Threads, When the threads starts, the script shows error that says : The instruction at "0x28053f9a" referenced memory at "0x000010c0". The = memory ould not be "read". Click on OK to terminate the program Click on CANCEL to debug the program and sometimes it is The memory ould not be "Written" instead of "read". I actually found that if I use the module "Win32::API" it will generate this error and of course Win32::FileOp use internally this module. The threads works fine if I remove the "use Win32::FileOp;" line but I need to use it for the File Open and Save Dialogs. Any solutions or suggestions? Thank you in advance for help Ramy |
From: Steve P. <st...@ba...> - 2004-01-25 01:02:36
|
Hi Ramy, Could you verify that Win32::GUI is causing this by testing without GUI = code running. Create an application that uses threads and Win32::FileOp = without Win32::GUI loaded and see if the problem still occurs. If so, = it's out of our hands and is a fault in Win32::FileOp. A lot of modules = are not threads-compatible, and it's probable that Win32::FileOp is one = of them. If it only happens with Win32::GUI loaded, please let us know and we'll = undoubtable jump at the chance to look into it, such a powerhouse of = activity that we are. Thanks, Steve ----- Original Message -----=20 From: ra...@me...=20 To: per...@li...=20 Sent: Saturday, January 24, 2004 10:24 PM Subject: [perl-win32-gui-users] Win32::FileOp Erro with Win32::GUI Hi All, I noticed that when I use the module Win32::FileOp in a GUI application (may be also not gui) in a Threads, When the threads starts, the script shows error that says : The instruction at "0x28053f9a" referenced memory at "0x000010c0". The = memory ould not be "read". Click on OK to terminate the program Click on CANCEL to debug the program and sometimes it is The memory ould not be "Written" instead of = "read". I actually found that if I use the module "Win32::API" it will = generate this error and of course Win32::FileOp use internally this module. The threads works fine if I remove the "use Win32::FileOp;" line but I need to use it for the File Open and Save Dialogs. Any solutions or suggestions? Thank you in advance for help Ramy |
From: <ra...@me...> - 2004-01-25 01:13:14
|
Dear Steve, Thanks first for your prompt reply. After some investigation of removing the modules from the script,=20 I found out that the main source of the error come from Win32::API = module Since the Win32::FileOp Which uses the Win32::API therefore it generates = the error That means a big loose for me and everyone that can not use Win32::API = module and all modules based on using it to load and interface to windows with = threads as it makes life easier with loading dll's. I am not sure if WIn32::API is actively updated or not as this may be a = little bug in it Regards Ramy ----- Original Message -----=20 From: Steve Pick=20 To: ra...@me... ; per...@li...=20 Sent: Sunday, January 25, 2004 3:03 AM Subject: Re: [perl-win32-gui-users] Win32::FileOp Erro with Win32::GUI Hi Ramy, Could you verify that Win32::GUI is causing this by testing without = GUI code running. Create an application that uses threads and = Win32::FileOp without Win32::GUI loaded and see if the problem still = occurs. If so, it's out of our hands and is a fault in Win32::FileOp. A = lot of modules are not threads-compatible, and it's probable that = Win32::FileOp is one of them. If it only happens with Win32::GUI loaded, please let us know and = we'll undoubtable jump at the chance to look into it, such a powerhouse = of activity that we are. Thanks, Steve ----- Original Message -----=20 From: ra...@me...=20 To: per...@li...=20 Sent: Saturday, January 24, 2004 10:24 PM Subject: [perl-win32-gui-users] Win32::FileOp Erro with Win32::GUI Hi All, I noticed that when I use the module Win32::FileOp in a GUI application (may be also not gui) in a Threads, When the threads starts, the script shows error that says : The instruction at "0x28053f9a" referenced memory at "0x000010c0". = The memory ould not be "read". Click on OK to terminate the program Click on CANCEL to debug the program and sometimes it is The memory ould not be "Written" instead of = "read". I actually found that if I use the module "Win32::API" it will = generate this error and of course Win32::FileOp use internally this module. The threads works fine if I remove the "use Win32::FileOp;" line but I need to use it for the File Open and Save Dialogs. Any solutions or suggestions? Thank you in advance for help Ramy |
From: Steve P. <st...@ba...> - 2004-01-25 01:45:08
|
Hi again, Maybe if you send me the source of an example that causes the error I = could look into a fix for you, but I'm not promising anything. You'll = really need to talk to Aldo Calpini about this. He wrote Win32::GUI and = Win32::API, and his website is at http://dada.perl.it/ Although he assumedly reads this list every now and again to see how = people are abusing his babies, he hasn't posted in a very long time. Steve ----- Original Message -----=20 From: ra...@me...=20 To: Steve Pick ; per...@li...=20 Sent: Sunday, January 25, 2004 1:13 AM Subject: Re: [perl-win32-gui-users] Win32::FileOp Erro with Win32::GUI Dear Steve, Thanks first for your prompt reply. After some investigation of removing the modules from the script,=20 I found out that the main source of the error come from Win32::API = module Since the Win32::FileOp Which uses the Win32::API therefore it = generates the error That means a big loose for me and everyone that can not use Win32::API = module and all modules based on using it to load and interface to windows = with threads as it makes life easier with loading dll's. I am not sure if WIn32::API is actively updated or not as this may be = a little bug in it Regards Ramy ----- Original Message -----=20 From: Steve Pick=20 To: ra...@me... ; per...@li...=20 Sent: Sunday, January 25, 2004 3:03 AM Subject: Re: [perl-win32-gui-users] Win32::FileOp Erro with = Win32::GUI Hi Ramy, Could you verify that Win32::GUI is causing this by testing without = GUI code running. Create an application that uses threads and = Win32::FileOp without Win32::GUI loaded and see if the problem still = occurs. If so, it's out of our hands and is a fault in Win32::FileOp. A = lot of modules are not threads-compatible, and it's probable that = Win32::FileOp is one of them. If it only happens with Win32::GUI loaded, please let us know and = we'll undoubtable jump at the chance to look into it, such a powerhouse = of activity that we are. Thanks, Steve ----- Original Message -----=20 From: ra...@me...=20 To: per...@li...=20 Sent: Saturday, January 24, 2004 10:24 PM Subject: [perl-win32-gui-users] Win32::FileOp Erro with Win32::GUI Hi All, I noticed that when I use the module Win32::FileOp in a GUI application (may be also not gui) in a Threads, When the threads starts, the script shows error that says : The instruction at "0x28053f9a" referenced memory at "0x000010c0". = The memory ould not be "read". Click on OK to terminate the program Click on CANCEL to debug the program and sometimes it is The memory ould not be "Written" instead of = "read". I actually found that if I use the module "Win32::API" it will = generate this error and of course Win32::FileOp use internally this module. The threads works fine if I remove the "use Win32::FileOp;" line = but I need to use it for the File Open and Save Dialogs. Any solutions or suggestions? Thank you in advance for help Ramy |
From: <ra...@me...> - 2004-02-15 21:03:43
|
Hello all, SInce we all were looking for functions f\to control the toolbar and I really needed one and after digging, here is a good control code will make you happy. Anyone interested to complete the package and include it with the WIn3::GUI welcomed, I realy did not have the time as = I just needed to do basci enable/disable buttons, replace images. The code below has functions for enabling/disabling, deleting buttons setting toolbar style,checking buttons, alot to doc..... The code is here: use Win32::GUI; #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub WM_USER {0x0400;} # 0x0400 =3D 1024 #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TBCDRF_NOEDGES {0x00010000;} # Don't draw button edges sub TBCDRF_HILITEHOTTRACK {0x00020000;} # Use color of the button bk = when hottracked sub TBCDRF_NOOFFSET {0x00040000;} # Don't offset button if = pressed sub TBCDRF_NOMARK {0x00080000;} # Don't draw default highlight = of image/text for TBSTATE_MARKED sub TBCDRF_NOETCHEDEFFECT {0x00100000;} # Don't draw etched effect for = disabled items #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #------------- Toolbar button states functions for use with Send = Message--------- sub TB_ENABLEBUTTON {(&WM_USER + 1);} sub TB_CHECKBUTTON {(&WM_USER + 2);} sub TB_PRESSBUTTON {(&WM_USER + 3);} sub TB_HIDEBUTTON {(&WM_USER + 4);} sub TB_INDETERMINATE {(&WM_USER + 5);} sub TB_MARKBUTTON {(&WM_USER + 6);} sub TB_ISBUTTONENABLED {(&WM_USER + 9);} sub TB_ISBUTTONCHECKED {(&WM_USER + 10);} sub TB_ISBUTTONPRESSED {(&WM_USER + 11);} sub TB_ISBUTTONHIDDEN {(&WM_USER + 12);} sub TB_ISBUTTONINDETERMINATE {(&WM_USER + 13);} sub TB_ISBUTTONHIGHLIGHTED {(&WM_USER + 14);} sub TB_SETSTATE {(&WM_USER + 17);} sub TB_GETSTATE {(&WM_USER + 18);} #--------------------- Toolbar button states = constants--------------------------------------- sub TBSTATE_CHECKED {0x01;} sub TBSTATE_PRESSED {0x02} sub TBSTATE_ENABLED {0x04} sub TBSTATE_HIDDEN {0x08} sub TBSTATE_INDETERMINATE {0x10} sub TBSTATE_WRAP { 0x20} sub TBSTATE_ELLIPSES {0x40} sub TBSTATE_MARKED {0x80} sub TB_CheckButton {&TB_SetState(@_, &TBSTATE_CHECKED);} sub TB_EnableButton {&TB_SetState(@_, &TBSTATE_ENABLED);} sub TB_PressButton {&TB_SetState(@_, &TBSTATE_PRESSED);} sub TB_HideButton {&TB_SetState(@_, &TBSTATE_HIDDEN);} sub TB_Indeterminate {&TB_SetState(@_, &TBSTATE_INDETERMINATE);} sub TB_Wrap {&TB_SetState(@_, &TBSTATE_WRAP);} sub TB_Ellipses {&TB_SetState(@_, &TBSTATE_ELLIPSES);} sub TB_Marked {&TB_SetState(@_, &TBSTATE_MARKED);} sub TB_MarkButton {&TB_SetState(@_, &TB_ENABLEBUTTON);} sub TB_ISButtonEnabled {&TB_SetState(@_, &TB_ENABLEBUTTON);} sub TB_ISButtonChecked {&TB_SetState(@_, &TB_ENABLEBUTTON);} sub TB_ISButtonPressed {&TB_SetState(@_, &TB_ENABLEBUTTON);} sub TB_ISButtonHidden {&TB_SetState(@_, &TB_ENABLEBUTTON);} sub TB_ISButtonIndeterminate {&TB_SetState(@_, &TB_ENABLEBUTTON);} sub TB_ISButtonHighlighted {&TB_SetState(@_, &TB_ENABLEBUTTON);} sub TB_SetState{ my ($Handle, $Button, $State) =3D @_; =20 $Handle or return undef; $Button ||=3D0; $State ||=3D 1; =20 return Win32::GUI::SendMessage($Handle, &TB_SETSTATE, $Button, $State); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #--------------------- Toolbar = styles--------------------------------------------------- sub TBSTYLE_TOOLTIPS {0x0100} sub TBSTYLE_WRAPABLE {0x0200} sub TBSTYLE_ALTDRAG {0x0400} sub TBSTYLE_FLAT {0x0800} sub TBSTYLE_LIST {0x1000} sub TBSTYLE_CUSTOMERASE {0x2000} sub TBSTYLE_REGISTERDROP {0x4000} sub TBSTYLE_TRANSPARENT {0x8000} sub TBSTYLE_EX_DRAWDDARROWS {0x00000001} sub TB_SETSTYLE {(&WM_USER + 56);} sub TB_GETSTYLE {(&WM_USER + 57);} sub ToolbarSetStyle{ my ($Handle, $Style) =3D @_; $Handle or return undef; $Style ||=3D 0; =20 return Win32::GUI::SendMessage($Handle, &TB_SETSTYLE, 0, $Style | 1); #return Win32::GUI::SendMessage($Handle, &TB_SETSTYLE, 0, $Style | = &TBGetStyle); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TBGetStyle{ my ($Handle) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_GETSTYLE, 0, 0); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #--------------------- Toolbar button = styles--------------------------------------------------- sub TBSTYLE_BUTTON {0x0000} sub TBSTYLE_SEP {0x0001} sub TBSTYLE_CHECK {0x0002} sub TBSTYLE_GROUP {0x0004} sub TBSTYLE_CHECKGROUP {(&TBSTYLE_GROUP | &TBSTYLE_CHECK);} sub TBSTYLE_DROPDOWN {0x0008} sub TBSTYLE_AUTOSIZE {0x0010} # automatically calculate the cx of = the button sub TBSTYLE_NOPREFIX {0x0020} # if this button should not have = accel prefix #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #&ToolbarSetStyle($TB, 0x1000|0x0800); #&ToolbarSetStyle($TB, &TBSTYLE_FLAT|&TBSTYLE_ALTDRAG); #sub TBstyle_Transparent{&TBSetStyle(@_, &TBSTYLE_TRANSPARENT);} #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #&TBstyle_Transparent($TB, 2); sub TB_GETINSERTMARK {(&WM_USER + 79)}=20 sub TB_SETINSERTMARK {(&WM_USER + 80)}=20 sub TB_INSERTMARKHITTEST {(&WM_USER + 81)} sub TB_MOVEBUTTON {(&WM_USER + 82);} sub TB_GETMAXSIZE {(&WM_USER + 83)} sub TB_SETEXTENDEDSTYLE {(&WM_USER + 84)} sub TB_GETEXTENDEDSTYLE {(&WM_USER + 85)} sub TB_GETPADDING {(&WM_USER + 86)} sub TB_SETPADDING {(&WM_USER + 87)} sub TB_SETINSERTMARKCOLOR {(&WM_USER + 88)} sub TB_GETINSERTMARKCOLOR {(&WM_USER + 89)} sub TB_MoveButton{ my ($Handle, $OldButton, $NewButton) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_MOVEBUTTON, $OldButton, = $NewButton); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #&TB_MoveButton ($TB, 01, 5); #&TBSetStyle($TB, &TBSTYLE_SEP); #&TBSetStyle($TB, 3, &TBSTYLE_SEP); #$Style =3D &TBGetStyle($TB); #print "Style =3D", hex $Style, "\n"; #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TB_SETHOTIMAGELIST {(&WM_USER + 52)} sub TB_SetHotImageList{ my ($Handle, $OldButton, $NewButton) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_MOVEBUTTON, $OldButton, = $NewButton); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #$ImageList =3D=20 #&TB_SetHotImageList($TB, 0, $B); #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TB_CHANGEBITMAP {(&WM_USER + 43)} #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TB_ChangeBitmap { my ($Handle, $Button, $Bitmap) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_CHANGEBITMAP, $Button, = $Bitmap); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TB_CheckButton{ my ($Handle, $Button, $State) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_CHECKBUTTON, $Button, = $State); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #&TB_CheckButton($TB, 2, 1); #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TB_DELETEBUTTON {(&WM_USER + 22)} sub TB_DeleteButton{ my ($Handle, $Button) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_DELETEBUTTON, $Button, 0); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #&TB_DeleteButton($TB, 2); #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D # takes object new Win32::GUI::Tooltip(PARENT, %OPTIONS)=20 sub TB_SETTOOLTIPS {(&WM_USER + 36)} sub TB_SetToolTips { my ($Handle, $hwndToolTip) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_SETTOOLTIPS, $hwndToolTip, = 0); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #&TB_ChangeBitmap($TB, 1, 2); #TBSTATE_CHECKED The button has the TBSTYLE_CHECK style and is being = clicked.=20 #TBSTATE_ELLIPSES Version 4.70. The button's text is cut off and an = ellipsis is displayed.=20 #TBSTATE_ENABLED The button accepts user input. A button that doesn't = have this state is grayed.=20 #TBSTATE_HIDDEN The button is not visible and cannot receive user = input.=20 #TBSTATE_INDETERMINATE The button is grayed.=20 #TBSTATE_MARKED Version 4.71. The button is marked. The interpretation = of a marked item is dependent upon the application. =20 #TBSTATE_PRESSED The button is being clicked.=20 #TBSTATE_WRAP The button is followed by a line break. The button must = also have the TBSTATE_ENABLED state.=20 #TBSTYLE_AUTOSIZE Version 4.71. The button's width will be calculated = based on the text of the button, not on the size of the image. =20 #TBSTYLE_BUTTON Creates a standard push button. =20 #TBSTYLE_CHECK Creates a button that toggles between the pressed and = nonpressed states each time the user clicks it. The button has a = different background color when it is in the pressed state.=20 #TBSTYLE_CHECKGROUP Creates a check button that stays pressed until = another button in the group is pressed.=20 #TBSTYLE_DROPDOWN Version 4.70. Creates a drop-down list button. = Drop-down buttons send the TBN_DROPDOWN notification. If the toolbar has = the TBSTYLE_EX_DRAWDDARROWS extended style, drop-down buttons will have = a drop-down arrow displayed next to them. =20 #TBSTYLE_GROUP Creates a button that stays pressed until another button = in the group is pressed.=20 #TBSTYLE_NOPREFIX Version 4.71. The button text will not have an = accelerator prefix associated with it.=20 #TBSTYLE_SEP Creates a separator, providing a small gap between button = groups. A button that has this style does not receive user input. =20 #------------------------------------------------------------- # set button state functions test #&TB_HideButton ($TB, 2); #&TB_CheckButton ($TB, 2); #&TB_EnableButton ($TB, 2); #&TB_PressButton ($TB, 2); #&TB_Indeterminate ($TB, 2); #&TB_Wrap ($TB, 2); #&TB_Ellipses ($TB, 2); #&TB_Marked ($TB, 2); #------------------------------------------------------------- # End of the code |
From: <ra...@me...> - 2004-02-16 13:58:11
|
Hello all The new code and package below for the toolbar allows using Image lists for normal toolbar dispaly and for hot buttons and for disabled buttons. Also the new package and test code has the Tooltip working Does Aldo visits this mail list or anyone can send him this code to be attached to his main package for simplicity instead of making new package. Again anyone interested to use this code in a package to be attached with the main WIN32:GUI is welcomed and better for me and everyone Package code start: use Win32::GUI; # Ensure that the common control DLL is loaded.=20 # InitCommonControls();=20 #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub WM_USER {0x0400;} # 0x0400 =3D 1024 #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TBCDRF_NOEDGES {0x00010000;} # Don't draw button edges sub TBCDRF_HILITEHOTTRACK {0x00020000;} # Use color of the button bk = when hottracked sub TBCDRF_NOOFFSET {0x00040000;} # Don't offset button if = pressed sub TBCDRF_NOMARK {0x00080000;} # Don't draw default highlight = of image/text for TBSTATE_MARKED sub TBCDRF_NOETCHEDEFFECT {0x00100000;} # Don't draw etched effect for = disabled items #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #------------- Toolbar button states functions for use with Send = Message--------- sub TB_ENABLEBUTTON {(&WM_USER + 1);} sub TB_CHECKBUTTON {(&WM_USER + 2);} sub TB_PRESSBUTTON {(&WM_USER + 3);} sub TB_HIDEBUTTON {(&WM_USER + 4);} sub TB_INDETERMINATE {(&WM_USER + 5);} sub TB_MARKBUTTON {(&WM_USER + 6);} sub TB_ISBUTTONENABLED {(&WM_USER + 9);} sub TB_ISBUTTONCHECKED {(&WM_USER + 10);} sub TB_ISBUTTONPRESSED {(&WM_USER + 11);} sub TB_ISBUTTONHIDDEN {(&WM_USER + 12);} sub TB_ISBUTTONINDETERMINATE {(&WM_USER + 13);} sub TB_ISBUTTONHIGHLIGHTED {(&WM_USER + 14);} sub TB_SETSTATE {(&WM_USER + 17);} sub TB_GETSTATE {(&WM_USER + 18);} #--------------------- Toolbar button states = constants--------------------------------------- sub TBSTATE_CHECKED {0x01;} sub TBSTATE_PRESSED {0x02} sub TBSTATE_ENABLED {0x04} sub TBSTATE_HIDDEN {0x08} sub TBSTATE_INDETERMINATE {0x10} sub TBSTATE_WRAP { 0x20} sub TBSTATE_ELLIPSES {0x40} sub TBSTATE_MARKED {0x80} sub TB_CheckButton {&TB_SetState(@_, &TBSTATE_CHECKED);} sub TB_EnableButton {&TB_SetState(@_, &TBSTATE_ENABLED);} sub TB_PressButton {&TB_SetState(@_, &TBSTATE_PRESSED);} sub TB_HideButton {&TB_SetState(@_, &TBSTATE_HIDDEN);} sub TB_Indeterminate {&TB_SetState(@_, &TBSTATE_INDETERMINATE);} sub TB_Wrap {&TB_SetState(@_, &TBSTATE_WRAP);} sub TB_Ellipses {&TB_SetState(@_, &TBSTATE_ELLIPSES);} sub TB_Marked {&TB_SetState(@_, &TBSTATE_MARKED);} sub TB_MarkButton {&TB_SetState(@_, &TB_ENABLEBUTTON);} sub TB_ISButtonEnabled {&TB_SetState(@_, &TB_ENABLEBUTTON);} sub TB_ISButtonChecked {&TB_SetState(@_, &TB_ENABLEBUTTON);} sub TB_ISButtonPressed {&TB_SetState(@_, &TB_ENABLEBUTTON);} sub TB_ISButtonHidden {&TB_SetState(@_, &TB_ENABLEBUTTON);} sub TB_ISButtonIndeterminate {&TB_SetState(@_, &TB_ENABLEBUTTON);} sub TB_ISButtonHighlighted {&TB_SetState(@_, &TB_ENABLEBUTTON);} sub TB_SetState{ my ($Handle, $Button, $State) =3D @_; =20 $Handle or return undef; $Button ||=3D0; $State ||=3D 1; =20 return Win32::GUI::SendMessage($Handle, &TB_SETSTATE, $Button, $State); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #--------------------- Toolbar = styles--------------------------------------------------- sub TBSTYLE_TOOLTIPS {0x0100} sub TBSTYLE_WRAPABLE {0x0200} sub TBSTYLE_ALTDRAG {0x0400} sub TBSTYLE_FLAT {0x0800} sub TBSTYLE_LIST {0x1000} sub TBSTYLE_CUSTOMERASE {0x2000} sub TBSTYLE_REGISTERDROP {0x4000} sub TBSTYLE_TRANSPARENT {0x8000} sub TBSTYLE_EX_DRAWDDARROWS {0x00000001} sub TB_SETSTYLE {(&WM_USER + 56);} sub TB_GETSTYLE {(&WM_USER + 57);} sub ToolbarSetStyle{ my ($Handle, $Style) =3D @_; $Handle or return undef; $Style ||=3D 0; =20 return Win32::GUI::SendMessage($Handle, &TB_SETSTYLE, 0, $Style | 1); #return Win32::GUI::SendMessage($Handle, &TB_SETSTYLE, 0, $Style | = &TBGetStyle); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TBGetStyle{ my ($Handle) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_GETSTYLE, 0, 0); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #--------------------- Toolbar button = styles--------------------------------------------------- sub TBSTYLE_BUTTON {0x0000} sub TBSTYLE_SEP {0x0001} sub TBSTYLE_CHECK {0x0002} sub TBSTYLE_GROUP {0x0004} sub TBSTYLE_CHECKGROUP {(&TBSTYLE_GROUP | &TBSTYLE_CHECK);} sub TBSTYLE_DROPDOWN {0x0008} sub TBSTYLE_AUTOSIZE {0x0010} # automatically calculate the cx of = the button sub TBSTYLE_NOPREFIX {0x0020} # if this button should not have = accel prefix #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #&ToolbarSetStyle($TB, 0x1000|0x0800); #&ToolbarSetStyle($TB, &TBSTYLE_FLAT|&TBSTYLE_ALTDRAG); #sub TBstyle_Transparent{&TBSetStyle(@_, &TBSTYLE_TRANSPARENT);} #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #&TBstyle_Transparent($TB, 2); sub TB_GETINSERTMARK {(&WM_USER + 79)}=20 sub TB_SETINSERTMARK {(&WM_USER + 80)}=20 sub TB_INSERTMARKHITTEST {(&WM_USER + 81)} sub TB_MOVEBUTTON {(&WM_USER + 82);} sub TB_GETMAXSIZE {(&WM_USER + 83)} sub TB_SETEXTENDEDSTYLE {(&WM_USER + 84)} sub TB_GETEXTENDEDSTYLE {(&WM_USER + 85)} sub TB_GETPADDING {(&WM_USER + 86)} sub TB_SETPADDING {(&WM_USER + 87)} sub TB_SETINSERTMARKCOLOR {(&WM_USER + 88)} sub TB_GETINSERTMARKCOLOR {(&WM_USER + 89)} sub TB_MoveButton{ my ($Handle, $OldButton, $NewButton) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_MOVEBUTTON, $OldButton, = $NewButton); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #&TB_MoveButton ($TB, 01, 5); #&TBSetStyle($TB, &TBSTYLE_SEP); #&TBSetStyle($TB, 3, &TBSTYLE_SEP); #$Style =3D &TBGetStyle($TB); #print "Style =3D", hex $Style, "\n"; #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TB_SETHOTIMAGELIST {(&WM_USER + 52)} sub TB_SetHotImageList{ my ($Handle, $himlNewHot) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_SETHOTIMAGELIST, 0, = $himlNewHot); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #$ImageList =3D=20 #&TB_SetHotImageList($TB, 0, $B); #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TB_SETIMAGELIST {(&WM_USER + 48)} sub TB_SetImageList{ my ($Handle, $himlNew) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_SETIMAGELIST, 0, $himlNew); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TB_GETIMAGELIST {(&WM_USER + 49)} sub TB_GetImageList{ my ($Handle) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_GETIMAGELIST, 0, 0); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TB_SETDISABLEDIMAGELIST {(&WM_USER + 54)} sub TB_SetDisabledImageList{ my ($Handle, $himlNewDisabled) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_SETDISABLEDIMAGELIST, 0, = $himlNewDisabled); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TB_GETDISABLEDIMAGELIST {(&WM_USER + 55)} sub TB_GetDisabledImageList{ my ($Handle) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_GETDISABLEDIMAGELIST, 0, = 0); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TB_CHANGEBITMAP {(&WM_USER + 43)} sub TB_ChangeBitmap { my ($Handle, $Button, $Bitmap) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_CHANGEBITMAP, $Button, = $Bitmap); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TB_CheckButton{ my ($Handle, $Button, $State) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_CHECKBUTTON, $Button, = $State); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #&TB_CheckButton($TB, 2, 1); #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TB_DELETEBUTTON {(&WM_USER + 22)} sub TB_DeleteButton{ my ($Handle, $Button) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_DELETEBUTTON, $Button, 0); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #&TB_DeleteButton($TB, 2); #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D # takes object new Win32::GUI::Tooltip(PARENT, %OPTIONS)=20 sub TB_SETTOOLTIPS {(&WM_USER + 36)} sub TB_SetToolTips { my ($Handle, $hwndToolTip) =3D @_; $Handle or return undef; return Win32::GUI::SendMessage($Handle, &TB_SETTOOLTIPS, $hwndToolTip, = 0); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D sub TB_SETPADDING {(&WM_USER + 87)} sub TB_SetPadding{ my ($Handle, $X, $Y) =3D @_; $Handle or return undef; my $Padding =3D Win32::GUI::SendMessage($Handle, &TB_SETPADDING, 0, = (($Y *65536) & 0xFFFF0000) | $X); return ($Padding & 0xFFFF, ($Padding & 0xFFFF0000)>>16); } #=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D #($X, $Y) =3D &TB_SetPadding($TB, 1, 9);print "TB Padding ($X, $Y) \n"; #($X, $Y) =3D &TB_SetPadding($TB, 5, 6);print "TB Padding ($X, $Y) \n"; #&TB_ChangeBitmap($TB, 1, 2); #TBSTATE_CHECKED The button has the TBSTYLE_CHECK style and is being = clicked.=20 #TBSTATE_ELLIPSES Version 4.70. The button's text is cut off and an = ellipsis is displayed.=20 #TBSTATE_ENABLED The button accepts user input. A button that doesn't = have this state is grayed.=20 #TBSTATE_HIDDEN The button is not visible and cannot receive user = input.=20 #TBSTATE_INDETERMINATE The button is grayed.=20 #TBSTATE_MARKED Version 4.71. The button is marked. The interpretation = of a marked item is dependent upon the application. =20 #TBSTATE_PRESSED The button is being clicked.=20 #TBSTATE_WRAP The button is followed by a line break. The button must = also have the TBSTATE_ENABLED state.=20 #TBSTYLE_AUTOSIZE Version 4.71. The button's width will be calculated = based on the text of the button, not on the size of the image. =20 #TBSTYLE_BUTTON Creates a standard push button. =20 #TBSTYLE_CHECK Creates a button that toggles between the pressed and = nonpressed states each time the user clicks it. The button has a = different background color when it is in the pressed state.=20 #TBSTYLE_CHECKGROUP Creates a check button that stays pressed until = another button in the group is pressed.=20 #TBSTYLE_DROPDOWN Version 4.70. Creates a drop-down list button. = Drop-down buttons send the TBN_DROPDOWN notification. If the toolbar has = the TBSTYLE_EX_DRAWDDARROWS extended style, drop-down buttons will have = a drop-down arrow displayed next to them. =20 #TBSTYLE_GROUP Creates a button that stays pressed until another button = in the group is pressed.=20 #TBSTYLE_NOPREFIX Version 4.71. The button text will not have an = accelerator prefix associated with it.=20 #TBSTYLE_SEP Creates a separator, providing a small gap between button = groups. A button that has this style does not receive user input. =20 #------------------------------------------------------------- # set button state functions test #&TB_HideButton ($TB, 2); #&TB_CheckButton ($TB, 2); #&TB_EnableButton ($TB, 2); #&TB_PressButton ($TB, 2); #&TB_Indeterminate ($TB, 2); #&TB_Wrap ($TB, 2); #&TB_Ellipses ($TB, 2); #&TB_Marked ($TB, 2); #------------------------------------------------------------- 1; Package code end Test code start: use Toolbar; $W =3D new Win32::GUI::Window( -title =3D> "Win32::GUI::Toolbar test", -left =3D> 100,=20 -top =3D> 100,=20 -width =3D> 500,=20 -height =3D> 400, -style =3D> WS_OVERLAPPEDWINDOW , -name =3D> "Window", ); =20 $B1 =3D new Win32::GUI::Bitmap("1.bmp"); $B2 =3D new Win32::GUI::Bitmap("2.bmp"); $B3 =3D new Win32::GUI::Bitmap("3.bmp"); $IL =3D new Win32::GUI::ImageList(32, 32, 0, 3, 10); $IL->Add($B1, 0); $IL->Add($B2, 0); $IL->Add($B3, 0); $TB =3D $W->AddToolbar( #-imagelist=3D>$IL, -left =3D> 0, =20 -top =3D> 0,=20 -width =3D> $W->ScaleWidth-10,=20 -height =3D> 100, -name =3D> "Toolbar", #-style =3D> WS_VISIBLE | WS_CHILD|2048|0x0100, -addstyle =3D> WS_CHILD |WS_VISIBLE|0x0800| WS_BORDER | = WS_TABSTOP|0x0100, ); =20 my $tip=3DWin32::GUI::Tooltip->new( -name =3D> 'Tool', -parent =3D> $W); &TB_SetToolTips($TB, $tip->{-handle}); &TB_SetImageList($TB, $IL->{-handle}); #&ToolbarSetStyle($TB, &TBSTYLE_TOOLTIPS); $Bh1 =3D new Win32::GUI::Bitmap("1b.bmp"); $Bh2 =3D new Win32::GUI::Bitmap("2b.bmp"); $Bh3 =3D new Win32::GUI::Bitmap("3b.bmp"); $ILhot =3D new Win32::GUI::ImageList(32, 32, 0, 3, 10); $ILhot->Add($Bh1, 0); $ILhot->Add($Bh2, 0); $ILhot->Add($Bh3, 0); &TB_SetHotImageList($TB, $ILhot->{-handle}); #$TB->AddString("ONE"); #$TB->AddString("TWO"); #$TB->AddString("THREE"); =20 $TB->AddButtons( 3, 0, 1, 4, 0, 0, 1, 2, 4, 0, 1, 2, 3, 4, 0, 2, ); =20 #TB_DeleteButton($TB,2); #works $W->Show; =20 Win32::GUI::Dialog(); =20 sub print_and_die { my($text) =3D @_; my $err =3D Win32::GetLastError(); die "$text: Error $err\n"; } =20 sub Window_Terminate { return -1; } =20 sub Window_Resize { $TB->Resize($W->ScaleWidth-10, 100); } =20 sub Toolbar_ButtonClick { my($button) =3D @_; # print "Toolbar: clicked button $button\n"; } =20 sub ::Tool_NeedText { my $id=3Dshift; print "need text: " . $id, "\n"; $txt{1} =3D "Start "; $txt{2} =3D "Stop"; $txt{3} =3D "Pause"; $txt{4} =3D "Resume "; return $txt{$id}; } test code end |