[Cascavel-pm] Ajuda Anonymous Subroutines

Nilson Santos acid06 em gmail.com
Sábado Março 12 08:29:05 PST 2005


Donato,

Eu fui olhar a documentação do NotifyIcon, você pode especificar a sub
que deseja ser chamada nos eventos, observe esse exemplo que eu fiz:

use warnings;
use strict;

use Win32::GUI;

my $mw = new Win32::GUI::Window(
	-text	=>	"NotifyIcon Test",
	-size	=>	[400, 300],
	-pos	=>	[200, 200]
);


for my $icon ("ICON1", "ICON2") {
	my $notify = $mw->AddNotifyIcon(
		-icon	=>	Win32::GUI::Icon->new("${icon}.ico"),
		-name	=>	"Notify$icon",
		-tip	=>	"$icon",
		-onClick	=>	sub { &notify_click },
		# ou, passando como string o nome da função
		# -onClick =>	'notify_click'
	);
}

$mw->Show;

Win32::GUI::Dialog();

sub notify_click {
	my ($window, $icon) = @_;
	print "notify_click => window: $window, icon: $icon\n";
}

Isso é do Win32::GUI 1.0
Acho que nas versões antigas não tinha essa opção disponível...

-Nilson Santos F. Jr.


On Sat, 12 Mar 2005 01:54:21 -0300, Donato Azevedo <donatoaz em gmail.com> wrote:
> Olá pessoal!
> Eu preciso de uma ajudinha:
> Estou fazendo um script usando win32::GUI pra gerar Tray Icons pra
> janelas existentes (ele pega uma janela, bota um icone na tray bar pra
> ela e remove o antigo da barra de tarefas). O win32::GUI::NotifyIcon
> funciona assim:
> voce cria um icone:
> my $icon = new ... Icon;
> dai associa esse icone a uma posicao na tray bar:
> my $tray = new ... NotifyIcon
> 
> dai quando voce clica nele ele tem um evento associado que responde
> pela subrotina:
> sub Nome_Do_$tray_Click {}
> mas como eu tou gerando a subrotina run time eu faço assim:
> sub btn3_Click {
>        my $num = $main->lsb1->SelectedItem() + 1;
>        my $window_name = $main->lsb1->GetString($main->lsb1->SelectedItem());
>        if ($tray->{$window_name}) {
>                $main->txf1->Text("it already exists");
>                return 1;
>        }
>        $icon->{$window_name} = new Win32::GUI::Icon($main->txf2->Text());
>        $tray->{$window_name} = $main->AddNotifyIcon(-name => $window_name,
> -id => $num,
>                                                 -icon => $icon->{$window_name}, -tip => $window_name);
>        eval qq(
>                        sub main::${window_name}_Click {
>                                $main->->txf1->Text("donato");                  }
>        );
>        1;
> }
> 
> mas quando eu clico no icone na tray bar ele da um erro:
> Undefined Subroutine &main::nome_do_tray_Click called at line 23.
> A linha 23 tem a chamada pro win32::GUI::Dialog();
> 
> Obrigado pela atençao...
> --
> *******************************************
>              Donato Azevedo
> Engenharia de Controle e Automação
>                      UFMG
> *******************************************
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>


Mais detalhes sobre a lista de discussão Cascavel-pm