in reply to Re: Sharing Win32::GUI::RichEdit...
in thread Sharing Win32::GUI::RichEdit...

Alright! Thanks, however, seems like I missed something "important". The thread is actually the GUI part...
my $GuiThread = threads->create("startSystray"); sub startSystray { $mw_win32 = new Win32::GUI::Window( -width => 0, -height => 0, -name => 'MainWindow'); $systray_menu = new Win32::GUI::Menu( "SystrayMenu Functions" => "SystrayMenu", "> Info" => "SystrayInfo", "> Exit" => "SystrayExit" ); new Win32::GUI::NotifyIcon($mw_win32, -name => "SysTray", -id => 1, -icon => $icon); my $call = Win32::GUI::Dialog(); } sub SystrayInfo_Click { # my $A = new Win32::GUI::AcceleratorTable( # #"Ctrl-X" => "Close", # "Shift-N" => "New", # #"Ctrl-Alt-Del" => "Reboot", # "Shift-A" => sub { print "Hello\n"; }, # ); $infoWindow = new Win32::GUI::Window ( $mw_win32, -width => 400, -height => 200, -left => 300, -top => 400, -name => "infoWindow", # -accel => \$A ); my $text = join "\n", @actionHistory; $richEdit = new Win32::GUI::RichEdit ( ... ); }
That is, the GUI is a thread on its own. Not sure how to solve this, and in a good way. I can't really send the $richEdit to the _Click() function... Not that I know of anyway. (That's one of the reasons I have the richedit as global...) Thing is, the $richEdit is not defined for thread 1 (the noneGUI thread) for starters. Its only defined when user klicks in tray. So, I cant pass like that either it seems... Hmm...

Edit: Maybe Im gonna create the GUI, and hide it. Only show when klicking in tray...

Replies are listed 'Best First'.
Re^3: Sharing Win32::GUI::RichEdit...
by jplindstrom (Monsignor) on Jul 06, 2005 at 18:54 UTC
    If you download The GUI Loft, there is a demo program that uses threads and message queues between them for keeping the GUI active during lengthy operations (the FetchURL-threads demo). That way the GUI part can be kept in one single thread and all is good.

    Update: The trick is also to not create windows on the fly unless you really need to. Just create them on program startup, and Hide() and Show() them as appropriate.

    /J

      "Update: The trick is also to not create windows on the fly unless you really need to. Just create them on program startup, and Hide() and Show() them as appropriate."

      That's exactly what I did now. So I rewrote some code for this.