You can subscribe to this list here.
2001 |
Jan
(226) |
Feb
(139) |
Mar
(156) |
Apr
(95) |
May
(181) |
Jun
(166) |
Jul
(80) |
Aug
(59) |
Sep
(69) |
Oct
(83) |
Nov
(142) |
Dec
(33) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(42) |
Feb
(91) |
Mar
(76) |
Apr
(113) |
May
(67) |
Jun
(68) |
Jul
(37) |
Aug
(41) |
Sep
(16) |
Oct
(135) |
Nov
(51) |
Dec
(21) |
2003 |
Jan
(37) |
Feb
(36) |
Mar
(37) |
Apr
(103) |
May
(68) |
Jun
(70) |
Jul
(77) |
Aug
(12) |
Sep
(9) |
Oct
(53) |
Nov
(88) |
Dec
(63) |
2004 |
Jan
(263) |
Feb
(106) |
Mar
(36) |
Apr
(21) |
May
(21) |
Jun
(34) |
Jul
(33) |
Aug
(34) |
Sep
(35) |
Oct
(21) |
Nov
(43) |
Dec
(63) |
2005 |
Jan
(28) |
Feb
(42) |
Mar
(29) |
Apr
(14) |
May
(41) |
Jun
(20) |
Jul
(65) |
Aug
(136) |
Sep
(41) |
Oct
(74) |
Nov
(34) |
Dec
(94) |
2006 |
Jan
(85) |
Feb
(94) |
Mar
(68) |
Apr
(103) |
May
(66) |
Jun
(51) |
Jul
(24) |
Aug
(56) |
Sep
(57) |
Oct
(85) |
Nov
(73) |
Dec
(68) |
2007 |
Jan
(59) |
Feb
(32) |
Mar
(13) |
Apr
(32) |
May
(36) |
Jun
(36) |
Jul
(64) |
Aug
(35) |
Sep
(19) |
Oct
(10) |
Nov
(13) |
Dec
(20) |
2008 |
Jan
(26) |
Feb
(41) |
Mar
(19) |
Apr
(24) |
May
(16) |
Jun
(33) |
Jul
(34) |
Aug
(4) |
Sep
(11) |
Oct
|
Nov
(26) |
Dec
(23) |
2009 |
Jan
(5) |
Feb
(2) |
Mar
(21) |
Apr
(16) |
May
(13) |
Jun
(6) |
Jul
(34) |
Aug
(2) |
Sep
(1) |
Oct
(7) |
Nov
(5) |
Dec
(24) |
2010 |
Jan
(3) |
Feb
(5) |
Mar
(6) |
Apr
(6) |
May
(14) |
Jun
(6) |
Jul
(1) |
Aug
(12) |
Sep
(10) |
Oct
(9) |
Nov
|
Dec
(2) |
2011 |
Jan
(4) |
Feb
(5) |
Mar
(30) |
Apr
(1) |
May
(2) |
Jun
(5) |
Jul
(3) |
Aug
(2) |
Sep
(3) |
Oct
|
Nov
(6) |
Dec
|
2012 |
Jan
|
Feb
(10) |
Mar
|
Apr
|
May
(1) |
Jun
(3) |
Jul
(1) |
Aug
|
Sep
(2) |
Oct
|
Nov
(2) |
Dec
(4) |
2013 |
Jan
(5) |
Feb
(3) |
Mar
|
Apr
(3) |
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
(2) |
Feb
|
Mar
|
Apr
(1) |
May
(3) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(9) |
Nov
(7) |
Dec
|
2015 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(4) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2017 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(5) |
Dec
|
2019 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
|
From: Jeremy W. <jez...@ho...> - 2011-03-23 14:42:44
|
> One more thing - maybe important. This background color problem is not > neccesary connected with a memory. I think that maybe the bigger problem is > that it rises the GDI object counter. Please compare difference between Perl8 > and Perl10 - in Perl 5.8 in principle the memory is stable whereas in Perl10 > it blows up. The memory issue you are seeing in 5.10 is a perl bug (my understanding). When GDI handles aren't released they can use a significant amount of memory . > Jeremy, how you manage the beckground problem? May you scatch it? I'm not sure the approach I use would help you as I draw the whole screen (fonts, graphics, backgrounds etc). I've looked at this again, and I think I've fixed the bug within Win32::GUI. You mentioned that you built Win32::GUI from scratch, so if you replace the DestroyWindow method in GUI.xs (around line 2231) with the code below it should fix things for you... ########################################################################### # (@)INTERNAL:DestroyWindow()BOOLDestroyWindow(...)CODE: HWND handle; LPPERLWIN32GUI_USERDATA perlud; handle = (HWND) handle_From(NOTXSCALL ST(0)); perlud = (LPPERLWIN32GUI_USERDATA) GetWindowLong(handle, GWL_USERDATA); if(ValidUserData(perlud) ) { //free any resources...need to check other things like fonts etc if (perlud->hBackgroundBrush != NULL) { DeleteObject((HGDIOBJ) perlud->hBackgroundBrush); perlud->hBackgroundBrush = NULL; } } RETVAL = DestroyWindow(handle);OUTPUT: RETVAL |
From: Waldemar B. <wb...@sa...> - 2011-03-23 13:51:45
|
One more thing - maybe important. This background color problem is not neccesary connected with a memory. I think that maybe the bigger problem is that it rises the GDI object counter. Please compare difference between Perl8 and Perl10 - in Perl 5.8 in principle the memory is stable whereas in Perl10 it blows up. Jeremy, how you manage the beckground problem? May you scatch it? Waldemar |
From: Waldemar B. <wb...@sa...> - 2011-03-23 13:34:05
|
Dnia środa, 23 marca 2011 o 13:46:46 Jeremy White napisał(a): > > Probably I am mixing something. I wrote another variant of the script: > > > test.pl:> ##########################################> #!/usr/bin/perl > > -w> use strict;> use warnings;> use Win32::GUI qw();> my $i = 0; > > Ok:) as soon as I saw your code, I can see the problem...The problem is: > -background=>0xff00ffComment out those lines and you'll have no memory or > GDI leak...checkout this bug report on > sourceforge:http://sourceforge.net/tracker/?func=detail&aid=2864551&group_ > id=16572&atid=116572A while back I did try and fix this bug as I had the > same problem, but didn't find a quick fix (it's in XS/C not perl). If > possible, could you add your example to this bug report as someone might > fix it for the next release of Win32::GUI (several people have been hit by > this bug, and in your case it's fatal).As a work around, I draw the > text/background manually - which worked well in my case (as text > fields/labels wasn't the right design approach). Not sure if that could > work for you...Cheers,Jeremy. OK. Thank you very much! Now I know more and l lost the ilusion that something can be simple. But: 1. Stil my first example couses leak of memory in Perl 5.10 - I've just did it: after few hundred iterations it has took 250MB RAM - so it is another problem. You do - from this point of view - rightly working in Perl 5.8 version. 2. The problem of the background color is a serious one and nobody seems to workout it in a reasonable time horizon. It is a very, very bad news for me because one of the main method of my application is to inform a user about meaning of different numbers with differen by colors (which in turn can be defined by people themself). He he, I even did textfield's borders in color. Without all the color staff the applications will not be so talkative as they are now. Thank you for your help and comments! I thing the thread can be close. Waldemar. |
From: Jeremy W. <jez...@ho...> - 2011-03-23 12:48:28
|
> Probably I am mixing something. I wrote another variant of the script: > test.pl:> ##########################################> #!/usr/bin/perl -w> use strict;> use warnings;> use Win32::GUI qw();> my $i = 0; Ok:) as soon as I saw your code, I can see the problem...The problem is: -background=>0xff00ffComment out those lines and you'll have no memory or GDI leak...checkout this bug report on sourceforge:http://sourceforge.net/tracker/?func=detail&aid=2864551&group_id=16572&atid=116572A while back I did try and fix this bug as I had the same problem, but didn't find a quick fix (it's in XS/C not perl). If possible, could you add your example to this bug report as someone might fix it for the next release of Win32::GUI (several people have been hit by this bug, and in your case it's fatal).As a work around, I draw the text/background manually - which worked well in my case (as text fields/labels wasn't the right design approach). Not sure if that could work for you...Cheers,Jeremy. |
From: Waldemar B. <wb...@sa...> - 2011-03-23 12:37:03
|
Jeremy I've forgotten to send it to the list so it is the second copy... Dnia środa, 23 marca 2011 o 11:22:52 napisałeś: > > > Vista and Windows 7 have larger default values, but you really need to > > > work out why you are using so many GDI objects. It shouldn't be that > > > high... > > > > I use about 1000 them in my biggest window - it is a table 12x20 of > > textfields plus their borders (I do them independently - I wanted to > > have them in color and of various width), some buttons width pictures on > > them, that's it. All my window cascade can have about 2000-3000 GUI > > objects maximum.. > > Could you send me a screenshot of this window so I can understand? Text > fields shouldn't use any GDI handles. So you draw your own boarders? Do > you reuse objects? Probably I am mixing something. I wrote another variant of the script: test.pl: ########################################## #!/usr/bin/perl -w use strict; use warnings; use Win32::GUI qw(); my $i = 0; while ( $i < 100 ) { $i++; { my $ch = Win32::GUI::Window->new( -name => "ch1", -text => "child window", -pos => [ 100+10*$i %800, 50 ], -size => [ 300 , 250 ], -background=>0xffaaff, ); for ( my $j = 0; $j < 1000; $j++ ) { $ch->{"lab_$j"} = $ch->AddLabel( -name => 'ch1_'.$j, -text => 'ch1_'.$j, -pos => [ 10, 0 ], -size => [ 300, 50 ], -background=>0xff00ff, ); } $ch->Show(); print "$i:\t",$ch,"\n"; undef $ch; } } $i=0; Win32::GUI::Dialog(); __END__ ################################# and on the site: http://sao.pl/win32-gui/ are images of my screen. The description is here: The Perl script "test.pl" was performed on my windows XP machine (virtual one, but I have the same results on 'true' Windows 7 64 bits host machine (HP laptop machine), I put the results from vitual machine because gimp can easier catch the result - at least I can do that :) Moreover: The error_1.png shows that there are 52074 GDI objects when the iteration 52 was performed. Everything is reasnable: 52 iteration steps times 1000 labels in each iteration gives 52000. Plus start objects and so on. The error_2.png is just after catastrophy. The error_3.png shows after script has finished. The error_4.png shows that screen refreshing is gradual: task bar is partially restored. Say it something to you? > I think there was a bug fixed in Perl which is why you are finding the > problem in some versions and not in others. But this is conneced only with the memory, NOT with the number of GDI objects. Besides strange is that in versions 5.8.8 and 5.8.9 (activestate and compiled) this memory issue does not apear whereas on 5.10th version does. > GDI objects do auto delete > when they go out of scope (at least they do for me). I thought that in my demo script it should be deleted after each iteration step. Maybe my script is errored. Please correct it. It is extremally simple so everything can be done! > I can create millions > of GDI objects during the run of my application. At this stage, I think > its a bug in your code or a design issue where you keeping hold of GDI > objects. See the upper remark - what there should be corrected? > In hindsight I would have looked more closely at wxPerl (for cross platform > support) but I am happy with Win32::GUI. As it's built in C and hits the > Win32 API directly you can do things that other GUI frameworks can't. I'm > doing some interesting things with threads that you would struggle to do > even in C#. Generally threads are not connected with GUI so other GUI versions in Perl are good too. I agree that this additionally graphic libraries in Win32-GUI are big advantages of Win32-GUI. But in my case when I do program for every-day managing SQL databases by many user simultaniously, the possibility to run program on three main systems: Windows, Linux and www-Browser in identical way is quite usefull for organizations (write one time and use everywhere). My idea seems to by similar to java, but in fact it is not - My goal is to write an application using very, very high script language and without any compilation of any kind. If you add command to the script the change works at once - like writing CGI scripts, but without any risk of errors (in the database). Better is to compare my scripts to html not to cgi, but not so long in si OK stop it. > Ok, to solve this we need to find out where and why you are using so many > GDI handles? Could you send screenshots/examples of your code where you > draw to the screen? As I said, point your brawser to http://sao.pl/win32-gui/ Thank you Waldemar PS. I've read Aldo remarks very carefully. Thank you! I have found the considerations before and already tried to use it but nothing had changed. I think that it is a different issue. |
From: Jeremy W. <jez...@ho...> - 2011-03-22 12:30:03
|
> Finding the GDI objects number was crucial. It was written 10000 and maximum - > according Microsoft is 65,536 (for XP). The number is written in registry > under the key: > > HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows > NT\CurrentVersion\Windows\GDIProcessHandleQuota Vista and Windows 7 have larger default values, but you really need to work out why you are using so many GDI objects. It shouldn't be that high... > However problem of reusing undefined objects remains. Now I know that it is not > problem with the memory but with deleting graphical objects. > > Jez I wonder what is a differences between your and my installations of > Win32::GUI (and windows) that I have problem with GDI objects number (objects > are not deleted) and you not? I do a lot of GDI drawing and have no leaking GDI objects (I hope!). As long as the object (pen, font etc) goes out of scope after you've used it then the GDI handle will be freed. For example, say you do something like this (sudo code): my $pen = new Win32::GUI::Pen( -color => [ rand()*255, rand()*255, rand()*255 ], -width => rand()*5, ); %pens{$pen} = $pen; #do some drawing undef $pen; The pen is stored in a global hash, and therefore will never be deleted. I also find creating and destroying GDI objects has performance implications (Windows not perl) so I tend to store pens, brushes, fonts in objects so I can just reuse them. You should be able to reuse GDI objects across windows (as long as the window and object were created in the same thread). > I have checked Perl 5.8.9(829) from 21-01-2011 08:00:46. > I use also Prima and I do not find version for Perl 5.10 - I have for 5.12 (the > newest). Is it save to install Win32::GUI from Perl 5.10 in Perl 5.12? Personally I've always had 'issues' with Perl 5.10.x which is why I have stuck with with 5.8.x - I have been meaning to try 5.12 but have never got round to it. Cheers, jez. |
From: Waldemar B. <wb...@sa...> - 2011-03-22 06:41:39
|
Uff some _real_ progress! Athough I am not full satisfied. > It may be worth downloading the latest version of either 5.8 or 10.0 as I > know there were fixes in Perl itself that could be causing your problem. 1. Yes! Installing Perl 5.8.9 helps. No memory drifting. 2. At last I have found this columns. Problem was I had a Polish version of Windows and I was unconsciensly looking for the word "columns" and not the Polish word "kolumny", which - as even no-Polish people can see - is the same word. I definitely work too much... Finding the GDI objects number was crucial. It was written 10000 and maximum - according Microsoft is 65,536 (for XP). The number is written in registry under the key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota So I have too big succeses: no MAD efect and my application can work. One of my application biggest window has over 1000 GDI objects... wow! That was the reason that I could open it only 10 times! When I'll increase the 'quota' number I'll get rigths to open my windows about 60 times. Not bad! I'am a little ironic, sorry of that! Luckily I have special way of acting my application, that the application windows are not removed but only hide and rising the 'quota' number helps a lot to remember full application in the memory. However problem of reusing undefined objects remains. Now I know that it is not problem with the memory but with deleting graphical objects. Jez I wonder what is a differences between your and my installations of Win32::GUI (and windows) that I have problem with GDI objects number (objects are not deleted) and you not? I have checked Perl 5.8.9(829) from 21-01-2011 08:00:46. I use also Prima and I do not find version for Perl 5.10 - I have for 5.12 (the newest). Is it save to install Win32::GUI from Perl 5.10 in Perl 5.12? Thank you Jez for help! Waldemar |
From: Jeremy W. <jez...@ho...> - 2011-03-21 20:38:41
|
> > What version of Perl are you using? > > Perl 8.8 and Perl 10.0 (both ActiveState's) - results the same I assume that's perl 5.8.8? It may be worth downloading the latest version of either 5.8 or 10.0 as I know there were fixes in Perl itself that could be causing your problem. > The most interesting fact in this second case is the behaviour of Prima > windows when I comment the close method out. Then I see on the screen all the > windows created one after another! And - of course - MAD effect arises. > > Mayby all the problem is that I do not use in Win32::GUI a similar method to > that ->close() ? But I can not find it though. With Win32::GUI you shouldn't need to do anything. Once the object goes out of scope, all resources should be released. > > It's likely that the issue you are having in your > > application is that you are storing references to Win32::GUI objects in > > different places so the reference count never gets to zero thus the object > > isn't destroyed. > But what about my example? > Jez, add a loop which adds to one window say 200 labels or textfields and check > what will happend. On my machine it needs 100-150 iterations to blow up. It is > not a "theoretical" example I have attached. I believe if I could fix the MAD > problem in the simple example then I could repair my application. Your example runs fine for me. With 400 labels and 4000 iterations, I leak about 128K. Handles, User Objects and GDI objects don't leak either. At the end of the run, your script uses 5MB. I am using Activestate Perl 5.8.9 build 827. > > I've found the "big memory problems" are associated with > > leaking windows handles and GDI objects (open task manager and display > > these columns, if they keep increasing then you need to work out why). > I can't fine the windows handles and GDI objects in my task manager - where are > they? Open Windows task manager, then under the view menu you should see Select columns, then select Handles, User Objects and GDI objects. If handles, user objects or GDI objects keep increasing in number then you'll end up with a serious problem - strange colors or wrong bitmaps painted can sometimes be seen. Cheers, jez. |
From: Waldemar B. <wb...@sa...> - 2011-03-21 18:57:38
|
Dnia poniedziałek, 21 marca 2011 o 10:04:43 Jeremy White napisał(a): > Hi, > > > I use windows XP, Windows 7 and win32::GUI 1.06. Problem exists on the > > both OS`s. > > What version of Perl are you using? Perl 8.8 and Perl 10.0 (both ActiveState's) - results the same > > > It is not problem with win32::GUI but I experienced it just using the > > module in my application. > On my machine, your script hardly leaks at all (Win32::GUI 1.06, Perl > 5.8.9). I would need to run your script for at least 100,000 iterations > before memory becomes an issue? When you get strange colors it usually > means your script is not freeing windows handles (which are > created/destroyed automatically by win32::gui). Your script isn't leaking > handles either. Lets call it MAD (memory addressing drift) - i don't claim it is the memory leak - I wrote the word "practicle". I wrote another two cases: one in which Win32::GUI was replaced by DBD::Pg and window by cennection: no MAD efect. But next case is very inetersting: Win32::GUI replaced by Prima GUI - which is independent of OS. Prima works in Windows and Linux. Well to the point! I have no MAD efects, but... I have to add apart of these two undef commands another one: $ch->{item}->close. This method closes windows (and - as it seems to me - clears the memory too ) - no MAD. The most interesting fact in this second case is the behaviour of Prima windows when I comment the close method out. Then I see on the screen all the windows created one after another! And - of course - MAD effect arises. Mayby all the problem is that I do not use in Win32::GUI a similar method to that ->close() ? But I can not find it though. > > > My question: Does anybode can show me how I could use the memory of > > deleted objects again? Please look at the example: The address of the > > object is going up and up... How to stop it? In the code I just delete > > the object so it is obvious that the memmory is free for reusing. > > Strange enough is the fact that the object which contains internal GUI > > window objects got the same address. What is going on? I was searching > > the Internet but not succeded - althoug they say in this area Perl > > sucks. Maybe Perl is not good tool for 'really' big or long working > > applications because of practical leak of memory? > > Perl uses a reference counting methodology for it's memory allocation and > memory is only freed when the count gets to zero. If the count never gets > to zero (because of a bug or design issue, such as using circular links) > then memory will never be freed. But what about my example? If it is bad desined problem I would be happy to see the correction. Then I could correct my application. > Perl is fine for large long running > applications. In your example the small memory leak looks like a bug > within Win32::GUI. Maybe problem lies in a lack of the close function? I wonder if in pure Win32::GUI (no Perl's module but in Windows dlls) there is such a close() method? Maybe wrapping it to Perl Win32::GUI would help me? This is not small problem to me. I have so heavy windows that sometimes it is enaugh to open such a windows 10-15 time to get problem with MAD. > It's likely that the issue you are having in your > application is that you are storing references to Win32::GUI objects in > different places so the reference count never gets to zero thus the object > isn't destroyed. But what about my example? Jez, add a loop which adds to one window say 200 labels or textfields and check what will happend. On my machine it needs 100-150 iterations to blow up. It is not a "theoretical" example I have attached. I believe if I could fix the MAD problem in the simple example then I could repair my application. I suspect it is not problem with the amount of a memory. Perl - in the moment of the MAT catastrophy - takes only 45-55 MBs. It's nothing! > I've found the "big memory problems" are associated with > leaking windows handles and GDI objects (open task manager and display > these columns, if they keep increasing then you need to work out why). I can't fine the windows handles and GDI objects in my task manager - where are they? Thank you Jez! Regards Waldemar |
From: Aldo C. <da...@pe...> - 2011-03-21 09:12:54
|
On 19.03.2011 22:40, Waldemar Biernacki wrote: > My question: Does anybode can show me how I could use the memory of deleted > objects again? see http://sourceforge.net/mailarchive/message.php?msg_id=24270723, it should help with your issue. cheers, Aldo |
From: Jeremy W. <jez...@ho...> - 2011-03-21 09:04:49
|
Hi, > I use windows XP, Windows 7 and win32::GUI 1.06. Problem exists on the both > OS`s. What version of Perl are you using? > It is not problem with win32::GUI but I experienced it just using the module > in my application. > > My application dynamically generates series of windows (potentially > unlimited). Each of those is full Win32::GUI object with all the staf: ... I also have a dynamic windows interface, but not as large as yours. > > Here is the perl script which shows the problem. On my machine the error of > "Out of memmory" appeared after a little over 4000 iteration - it depends on > the machine. Not always this writing happens - very often just stops with > strange background colors (black for the example). On my machine, your script hardly leaks at all (Win32::GUI 1.06, Perl 5.8.9). I would need to run your script for at least 100,000 iterations before memory becomes an issue? When you get strange colors it usually means your script is not freeing windows handles (which are created/destroyed automatically by win32::gui). Your script isn't leaking handles either. > My question: Does anybode can show me how I could use the memory of deleted > objects again? Please look at the example: The address of the object is going > up and up... How to stop it? In the code I just delete the object so it is > obvious that the memmory is free for reusing. Strange enough is the fact that > the object which contains internal GUI window objects got the same address. > What is going on? I was searching the Internet but not succeded - althoug they > say in this area Perl sucks. Maybe Perl is not good tool for 'really' big or > long working applications because of practical leak of memory? Perl uses a reference counting methodology for it's memory allocation and memory is only freed when the count gets to zero. If the count never gets to zero (because of a bug or design issue, such as using circular links) then memory will never be freed. Perl is fine for large long running applications. In your example the small memory leak looks like a bug within Win32::GUI. It's likely that the issue you are having in your application is that you are storing references to Win32::GUI objects in different places so the reference count never gets to zero thus the object isn't destroyed. I've found the "big memory problems" are associated with leaking windows handles and GDI objects (open task manager and display these columns, if they keep increasing then you need to work out why). Cheers, jez. |
From: Waldemar B. <wb...@sa...> - 2011-03-19 20:40:40
|
Hello! I use windows XP, Windows 7 and win32::GUI 1.06. Problem exists on the both OS`s. It is not problem with win32::GUI but I experienced it just using the module in my application. My application dynamically generates series of windows (potentially unlimited). Each of those is full Win32::GUI object with all the staf: buttons, labels, textfields and so on. Now, the windows can be opened as cascades of the windows so, normally full working application has 100-300 different windows but at one time there can be about 10-20 windows simultaniously. Therefore I need a memory only for the 10-20 windows potentialy. The problem I have is the fact that my application can not use the memory again, so in a relativaly short time memory run out and application stops usually with strange colors on the desktop. Here is the perl script which shows the problem. On my machine the error of "Out of memmory" appeared after a little over 4000 iteration - it depends on the machine. Not always this writing happens - very often just stops with strange background colors (black for the example). My question: Does anybode can show me how I could use the memory of deleted objects again? Please look at the example: The address of the object is going up and up... How to stop it? In the code I just delete the object so it is obvious that the memmory is free for reusing. Strange enough is the fact that the object which contains internal GUI window objects got the same address. What is going on? I was searching the Internet but not succeded - althoug they say in this area Perl sucks. Maybe Perl is not good tool for 'really' big or long working applications because of practical leak of memory? Regards Waldemar ########################## use strict; use warnings; use Win32::GUI qw(); my $i = 0; while ( $i < 50 ) { $i++; my $ch = pakiet1->start( $i ); print "$i:\t",$ch,"\t",$ch->{item},"\n"; $ch->{item}->DESTROY; undef $ch->{item}; undef $ch; print "\t\t\t",$ch if $ch; print "\t\t\t",$ch->{item} if $ch->{item}; print "\n"; } ######################## package pakiet1; sub start { my ( $self, $i ) = @_; my $this = {}; bless ( $this, $self ); $this->{item} = new Win32::GUI::Window( -name => "ch", -text => "window", -size => [ 200, 200 ], -pos => [ 400, 400 ], -visible=> 0, ); for ( my $i = 0 ; $i < 400 ; $i++ ) { $this->{item}-> AddLabel( -name => "labe_$i", -text => "label-$i", -size => [ 180, 20 ], -pos => [ 10, 50 ], ); } return $this; } 1; __END__ |
From: David N. <Dav...@mo...> - 2011-03-17 19:55:14
|
Kevin, Thanks for making an easy to understand example. Would you believe when I incorporated this into my program, it took the whole day? This is because the code I've been modifying had the -dialogui option in the creation of the DialogBox. This made the Window a DialogBox again causing the intended effect to not work. I learn allot by having this happen. I appreciate the support. Dave ________________________________ From: Kevin Marshall [mailto:kej...@ho...] Sent: Wednesday, March 16, 2011 9:05 PM To: David Newman Cc: per...@li... Subject: Re: [perl-win32-gui-users] how to get the enter key to work with two textfields in win32-gui perl David, You should really only have one button created with the -ok option in a window. Even if you have many, the Enter key press would only be sent to the first button created with the option. Usually the option is used in conjunction with the -cancel option and is used to close the DialogBox when either the Enter or ESC key is pressed. To get the functionality that you are looking for, I suggest using a KeyDown event for the textfields and test for the Enter key. Here is an example modified from your code sample. Note that the DialogBox has been changed to a Window, since the DialogBox would intercept any Enter key presses before the textfields would get a chance to respond to the event: #!perl use strict; use warnings; use Win32::GUI qw(); use Win32::GUI::Constants qw(VK_RETURN); my $W1 = Win32::GUI::Window->new( -name => "W1", -title => "First Window", -pos => [ 100, 100 ], -size => [ 300, 200 ], ); $W1->AddButton( -name => "ButtonW1", -text => "FirstName", -pos => [ 87, 100 ], ); $W1->AddButton( -name => "ButtonW2", -text => "LastName", -pos => [ 87, 120 ], ); $W1->AddTextfield( -name => "tf1", -pos => [20,40], -size => [250,20], -prompt => "1:", ); $W1->AddTextfield( -name => "tf2", -pos => [20,60], -size => [250,20], -prompt => "2:", ); $W1->Show(); print "This is a test\n"; Win32::GUI::Dialog(); exit(0); sub W1_Terminate { return -1; } # Keydown event for textfield 1 sub tf1_KeyDown { my($flags,$key) = @_; if($key == VK_RETURN){ ButtonW1_Click(); } return 1; } # Keydown event for textfield 2 sub tf2_KeyDown { my($flags,$key) = @_; if($key == VK_RETURN){ ButtonW2_Click(); } return 1; } sub ButtonW1_Click { print "Button 1 Clicked\n"; my $text = $W1->tf1->Text(); print "$text\n"; } sub ButtonW2_Click { print "Button 2 Clicked\n"; my $text = $W1->tf2->Text(); print "$text\n"; } __END__ Hope this helps, Kevin. I'm interested in using two textfields in a DialogBox. Each textfield needs to except input from the enter key. I have learned that when you create your first button with -ok => 1, this becomes the button that will click regardless of the textbox you are in. I'm including some code I'm playing around with: When you run this and enter 1 for TextBox 1 and 2 for TextBox 2, Then click on FirstName Button - The result is Button 1 Clicked and a 1 on the next line. This is Expected. Then click on LastName Button - The result is Button 2 Clicked and a 2 on the next line. This is Expected. When you go into TextBox1 and click enter the result is "Button 1 Clicked" and a 1 on the next line. This is Expected. When you go into TextBox2 and click enter the result is This is NOT Expected. How do I get the result "Button 2 Clicked" and a 2 on the next line, when I go into textbox2 and click ? It seems the -ok => 1 only works for the first button created. Any suggestions. Thanks. Dave use Win32::GUI; my $W1 = Win32::GUI::DialogBox->new( -name => "W1", -title => "First Window", -pos => [ 100, 100 ], -size => [ 300, 200 ], ); $W1->AddButton( -name => "ButtonW1", -text => "FirstName", -pos => [ 87, 100 ], -ok => 1, ); $W1->AddButton( -name => "ButtonW2", -text => "LastName", -pos => [ 87, 120 ], -ok => 1, ); # $W1->ButtonW1->Disable(); $W1->AddTextfield( -name => "tf1", -left => 20, -top => 40, -width => 250, -height => 20, -prompt => "1:", ); $W1->AddTextfield( -name => "tf2", -left => 20, -top => 60, -width => 250, -height => 20, -prompt => "2:", ); $W1->Show(); print "This is a test\n"; Win32::GUI::Dialog(); exit(0); sub W1_Terminate { return -1; } sub ButtonW1_Click { print "Button 1 Clicked\n"; my $text = $W1->tf1->Text(); print "$text\n"; } sub ButtonW2_Click { print "Button 2 Clicked\n"; my $text = $W1->tf2->Text(); print "$text\n"; } ------------------------------------------------------------------------ ------ Colocation vs. Managed Hosting A question and answer guide to determining the best fit for your organization - today and in the future. http://p.sf.net/sfu/internap-sfd2d _______________________________________________ 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: Kevin M. <kej...@ho...> - 2011-03-17 01:05:33
|
David, You should really only have one button created with the -ok option in a window. Even if you have many, the Enter key press would only be sent to the first button created with the option. Usually the option is used in conjunction with the -cancel option and is used to close the DialogBox when either the Enter or ESC key is pressed. To get the functionality that you are looking for, I suggest using a KeyDown event for the textfields and test for the Enter key. Here is an example modified from your code sample. Note that the DialogBox has been changed to a Window, since the DialogBox would intercept any Enter key presses before the textfields would get a chance to respond to the event: #!perl use strict; use warnings; use Win32::GUI qw(); use Win32::GUI::Constants qw(VK_RETURN); my $W1 = Win32::GUI::Window->new( -name => "W1", -title => "First Window", -pos => [ 100, 100 ], -size => [ 300, 200 ], ); $W1->AddButton( -name => "ButtonW1", -text => "FirstName", -pos => [ 87, 100 ], ); $W1->AddButton( -name => "ButtonW2", -text => "LastName", -pos => [ 87, 120 ], ); $W1->AddTextfield( -name => "tf1", -pos => [20,40], -size => [250,20], -prompt => "1:", ); $W1->AddTextfield( -name => "tf2", -pos => [20,60], -size => [250,20], -prompt => "2:", ); $W1->Show(); print "This is a test\n"; Win32::GUI::Dialog(); exit(0); sub W1_Terminate { return -1; } # Keydown event for textfield 1 sub tf1_KeyDown { my($flags,$key) = @_; if($key == VK_RETURN){ ButtonW1_Click(); } return 1; } # Keydown event for textfield 2 sub tf2_KeyDown { my($flags,$key) = @_; if($key == VK_RETURN){ ButtonW2_Click(); } return 1; } sub ButtonW1_Click { print "Button 1 Clicked\n"; my $text = $W1->tf1->Text(); print "$text\n"; } sub ButtonW2_Click { print "Button 2 Clicked\n"; my $text = $W1->tf2->Text(); print "$text\n"; } __END__ Hope this helps, Kevin. > > I'm interested in using two textfields in a DialogBox. Each textfield > needs to except input from the enter key. I have learned that when you > create your first button with -ok => 1, this becomes the button that > will click regardless of the textbox you are in. > > I'm including some code I'm playing around with: > When you run this and enter 1 for TextBox 1 and 2 for TextBox 2, Then > click on FirstName Button - The result is Button 1 Clicked and a 1 on > the next line. This is Expected. Then click on LastName Button - The > result is Button 2 Clicked and a 2 on the next line. This is Expected. > When you go into TextBox1 and click enter the result is "Button 1 > Clicked" and a 1 on the next line. This is Expected. When you go into > TextBox2 and click enter the result is This is NOT Expected. > > How do I get the result "Button 2 Clicked" and a 2 on the next line, > when I go into textbox2 and click ? > It seems the -ok => 1 only works for the first button created. Any > suggestions. Thanks. > Dave > use Win32::GUI; > my $W1 = Win32::GUI::DialogBox->new( > -name => "W1", > -title => "First Window", > -pos => [ 100, 100 ], > -size => [ 300, 200 ], ); > $W1->AddButton( -name => "ButtonW1", > -text => "FirstName", > -pos => [ 87, 100 ], > -ok => 1, > ); > $W1->AddButton( -name => "ButtonW2", > -text => "LastName", > -pos => [ 87, 120 ], > -ok => 1, > ); > # $W1->ButtonW1->Disable(); > $W1->AddTextfield( -name => "tf1", > -left => 20, > -top => 40, > -width => 250, > -height => 20, -prompt => "1:", > ); > $W1->AddTextfield( -name => "tf2", > -left => 20, > -top => 60, > -width => 250, > -height => 20, > -prompt => "2:", > ); > $W1->Show(); print "This is a test\n"; Win32::GUI::Dialog(); exit(0); > sub W1_Terminate { return -1; } > sub ButtonW1_Click { > print "Button 1 Clicked\n"; my $text = $W1->tf1->Text(); > print "$text\n"; } > sub ButtonW2_Click { > print "Button 2 Clicked\n"; my $text = $W1->tf2->Text(); > print "$text\n"; } > > > ------------------------------------------------------------------------------ > Colocation vs. Managed Hosting > A question and answer guide to determining the best fit > for your organization - today and in the future. > http://p.sf.net/sfu/internap-sfd2d > > > _______________________________________________ > 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: David N. <Dav...@mo...> - 2011-03-16 21:14:51
|
I'm interested in using two textfields in a DialogBox. Each textfield needs to except input from the enter key. I have learned that when you create your first button with -ok => 1, this becomes the button that will click regardless of the textbox you are in. I'm including some code I'm playing around with: When you run this and enter 1 for TextBox 1 and 2 for TextBox 2, Then click on FirstName Button - The result is Button 1 Clicked and a 1 on the next line. This is Expected. Then click on LastName Button - The result is Button 2 Clicked and a 2 on the next line. This is Expected. When you go into TextBox1 and click enter the result is "Button 1 Clicked" and a 1 on the next line. This is Expected. When you go into TextBox2 and click enter the result is This is NOT Expected. How do I get the result "Button 2 Clicked" and a 2 on the next line, when I go into textbox2 and click ? It seems the -ok => 1 only works for the first button created. Any suggestions. Thanks. Dave use Win32::GUI; my $W1 = Win32::GUI::DialogBox->new( -name => "W1", -title => "First Window", -pos => [ 100, 100 ], -size => [ 300, 200 ], ); $W1->AddButton( -name => "ButtonW1", -text => "FirstName", -pos => [ 87, 100 ], -ok => 1, ); $W1->AddButton( -name => "ButtonW2", -text => "LastName", -pos => [ 87, 120 ], -ok => 1, ); # $W1->ButtonW1->Disable(); $W1->AddTextfield( -name => "tf1", -left => 20, -top => 40, -width => 250, -height => 20, -prompt => "1:", ); $W1->AddTextfield( -name => "tf2", -left => 20, -top => 60, -width => 250, -height => 20, -prompt => "2:", ); $W1->Show(); print "This is a test\n"; Win32::GUI::Dialog(); exit(0); sub W1_Terminate { return -1; } sub ButtonW1_Click { print "Button 1 Clicked\n"; my $text = $W1->tf1->Text(); print "$text\n"; } sub ButtonW2_Click { print "Button 2 Clicked\n"; my $text = $W1->tf2->Text(); print "$text\n"; } |
From: Jeremy W. <jez...@ho...> - 2011-03-07 14:52:40
|
> Is there a way I can have an object which I can put a set of components > on and have them move around a window as a unit? Yes. See below. > I've read through Rob May's tutorial at > <http://rob.themayfamily.me.uk/perl/win32-gui/scrollbars>, which shows > how to make a label move around in response to scroll bars, but I'd like > to know if I can simply replace the label with something which has my > components arranged on it in the same way they would be on a window, but > could be moved around the actual window to give the same effect? The > components are derived from a database query, so I can't easily use a > smaller "something". Create a child window then add the controls you need. Move the child window when you need it to scroll. Regards, Jeremy. |
From: Kieren D. <Kie...@ha...> - 2011-03-07 12:02:16
|
Hi Is there a way I can have an object which I can put a set of components on and have them move around a window as a unit? I've read through Rob May's tutorial at <http://rob.themayfamily.me.uk/perl/win32-gui/scrollbars>, which shows how to make a label move around in response to scroll bars, but I'd like to know if I can simply replace the label with something which has my components arranged on it in the same way they would be on a window, but could be moved around the actual window to give the same effect? The components are derived from a database query, so I can't easily use a smaller "something". I could write something to do this which would work after a fashion, but I suspect that this may be something I can do with a couple of lines if only I knew the commands. Kieron |
From: Octavian R. <ora...@gm...> - 2011-02-25 17:39:47
|
From: "gff gffg" <tar...@ho...> > > Hi, > I'm working on a project and i added the multilanguage support. > Perl : (v5.12.2) MSWin32-x86 build 1203 294165,OS : Windows 7 x86,Installed languages in OS : English,Turkish > How to display the unicode charset in Win32::GUI Label->Text?Example; added "russian language" but not display in label text.I'm searching for solutions 4 days.I'm founded this solutions (and other) > http://webcache.googleusercontent.com/search?q=cache:5HoSSFnETV4J:www.mail-archive.com/perl-win32-gui-users%40lists.sourceforge.net/msg04941.html+perl+win32+GUI+unicode+label&cd=5&hl=tr&ct=clnk&gl=tr&source=www.google.com.tr > http://webcache.googleusercontent.com/search?q=cache:l_gAFrhiqxMJ:www.mail-archive.com/perl-win32-gui-users%40lists.sourceforge.net/msg04944.html+perl+win32+GUI+unicode+label&cd=6&hl=tr&ct=clnk&gl=tr&source=www.google.com.tr > Win32::GUI doesn't support Unicode. The solution is to use WxPerl which is much more powerful (and portable on other operating systems than Windows). WxPerl doesn't have a syntax as nice as Win32::GUI, but it is better maintained and what's interesting for you... it fully supports Unicode. Octavian |
From: Kunduz <tar...@ho...> - 2011-02-24 06:58:16
|
Sangeeta Huddar wrote: > > Hi All , > I am trying to automate the GUI testing . where these is a item > created > as ListBox ,which has number of things listed. > i wan to read this window and get the list of items print the list > whatever > it shows in GUI . > kindly help me . > > regards, > Shilpa > > ------------------------------------------------------------------------------ > Protect Your Site and Customers from Malware Attacks > Learn about various malware tactics and how to avoid them. Understand > malware threats, the impact they can have on your business, and how you > can protect your company and customers by using code signing. > http://p.sf.net/sfu/oracle-sfdevnl > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ > Do you know Win32::GuiTest? This is usefull Win32 perl module and the your solutions in here.I can't make an example sorry but review this Win32::GuiText module page; http://search.cpan.org/~erngui/Win32-GuiTest-1.3/GuiTest.pm And Examples; http://search.cpan.org/dist/Win32-GuiTest/lib/Win32/GuiTest/Examples.pm Just use GetListText and GetListContents Win32 Api functions. Win32::GuiTest Module supports this function. (sorry my bad eng.) -- View this message in context: http://old.nabble.com/how-to-retrieve-the-ListBox-items-from-the-GUI-tp30708989p31001287.html Sent from the perl-win32-gui-users mailing list archive at Nabble.com. |
From: Kevin M. <kej...@ho...> - 2011-02-22 04:26:20
|
Waldemar, As far as I know, no you cannot change the look or layout of the dialog boxes created by the MessageBox() function, apart from the icon displayed. The best option would be to create your own message boxes. Kevin. > Hello! > > is anyone know is it possible? I want to display more formated infromation in > the message boxes. Maybe some of yours have other solution? > > Regards > > Waldemar. > > ------------------------------------------------------------------------------ > The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE: > Pinpoint memory and threading errors before they happen. > Find and fix more than 250 security defects in the development cycle. > Locate bottlenecks in serial and parallel code that limit performance. > http://p.sf.net/sfu/intel-dev2devfeb > _______________________________________________ > 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: Waldemar B. <wb...@sa...> - 2011-02-21 12:04:17
|
Hello! is anyone know is it possible? I want to display more formated infromation in the message boxes. Maybe some of yours have other solution? Regards Waldemar. |
From: gff g. <tar...@ho...> - 2011-02-17 14:10:50
|
Hi, I'm working on a project and i added the multilanguage support. Perl : (v5.12.2) MSWin32-x86 build 1203 294165,OS : Windows 7 x86,Installed languages in OS : English,Turkish How to display the unicode charset in Win32::GUI Label->Text?Example; added "russian language" but not display in label text.I'm searching for solutions 4 days.I'm founded this solutions (and other) http://webcache.googleusercontent.com/search?q=cache:5HoSSFnETV4J:www.mail-archive.com/perl-win32-gui-users%40lists.sourceforge.net/msg04941.html+perl+win32+GUI+unicode+label&cd=5&hl=tr&ct=clnk&gl=tr&source=www.google.com.tr http://webcache.googleusercontent.com/search?q=cache:l_gAFrhiqxMJ:www.mail-archive.com/perl-win32-gui-users%40lists.sourceforge.net/msg04944.html+perl+win32+GUI+unicode+label&cd=6&hl=tr&ct=clnk&gl=tr&source=www.google.com.tr [My idea] I have install the russian language in my OS? This is a solution? Here is my codes.2 encode methods testing. Turkish charset testing : ç use warnings; use strict; use Win32::GUI(); use Data::Dumper; use Encode qw/decode/; my $str = "ç"; # This is "turkish" charset "ç" $str = decode("utf-8", $str); # decoding "ç" char with utf-8 print Dumper($str); # And "ç" char dumped, output : \x{e7} my $win = new Win32::GUI::Window( -name => "win", -text => "Unicode Test", -width => 300, -height => 200 ); $win->AddLabel( -name => "labeun", -text => "\x{e7}", # <--- Write here hex code char "\x{e7}" # and look at the results. Displaying label text "ç". No problem. -width => 50, -height => 20 ); $win->Center(); $win->Show(); Win32::GUI::Dialog(); 1;I tried ucs2 encoding (and other) but didn't. Example : Russian charset ф use warnings; use strict; use Win32::GUI(); use Encode qw/encode decode/; use Data::Dumper; my $str = "ф"; # This is "russian" charset. * a == ф * my $utf8 = decode("utf-8", $str); # decoding "ф" char with utf-8 my $ucs2 = encode("UCS-2LE",$utf8); # and encoding char with UCS-2LE.Others have tried.! # Other encoding schemes : UCS-2BE, UCS-2LE, UTF-16, # UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, UTF-32LE my $win = new Win32::GUI::Window( -name => "win", -text => "Unicode Test", -width => 300, -height => 200 ); $win->AddLabel( -name => "labeun", -text => "$ucs2", # <--- Writing here encoding char.Displaying label t +ext "unkown". FAIL -width => 50, -height => 20 ); $win->Center(); $win->Show(); Win32::GUI::Dialog(); 1; No problem other perl gui modules. Tested "russian charset" with wxPerl, Perl/Tk, Gtk2 modules and working good...But The whole project written with Win32::GUI module.Can not change the "win32-gui" module with others! Did i use a different module? :)The current project consists of 15.000 lines. Rewrite project with other perl GUI module? :)ORCan i use a combination of 2 modules?Ex: Win32::GUI and wxPerl(Label) module combination....? Regards...Ahmet. |
From: shilpa h. <200...@gm...> - 2011-01-19 11:21:01
|
Hi All , I am trying to automate the GUI testing . where these is a item created as ListBox ,which has number of things listed. i wan to read this window and get the list of items print the list whatever it shows in GUI . kindly help me . regards, Shilpa |
From: Chris R. <pce...@gm...> - 2011-01-15 01:19:29
|
http://mellmann-lichttechnik.de/aslle.html -- Chris Rogers www.pcewebs.com |
From: King P. <ki...@gm...> - 2011-01-14 11:44:57
|
Hello Maillist, maybe you could help me. When I rescale an Image the old image is still seen and not removed. How to do that? When resizing the main window all is rewritten and looks fine. If I rescale the image via a button I have the strange effect. Hopefully you understood my issue and can help me?! Many Thanks Here my example: #perl -w use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 600, -height => 400, -name => "Window", ) or die "new Window"; $W->AddButton(-name=> "MINSIZE",-text=>"PIC",-left=>1,-top=>250,-width=>30,-height=>30,-visible=>1 ,); my $dib = newFromFile Win32::GUI::DIBitmap ('temp/temp.tif'); my $x; my $y; $W->Show(); Win32::GUI::Dialog(); sub MINSIZE_Click { $x+=10; $y+=10; Paint(); } sub Window_Resize { Paint(); } sub Window_Activate { Paint(); } sub Window_Terminate { $W->PostQuitMessage(0); } sub Paint { Win32::GUI::DC::ReleaseDC($W, $dc); $dc = new Win32::GUI::DC ($W); $dispdib = $dib -> Rescale(200-$x, 200-$y); $dispdib->CopyToDC($dc); } |