[Cascavel-pm] Ajuda Anonymous Subroutines

Luis Campos de Carvalho monsieur_champs em yahoo.com.br
Sábado Março 12 04:46:40 PST 2005


Donato Azevedo 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();

   Você parece ter cortado e colado a última rotina diretamente do seu 
código, ao contrário do resto. Digo isso por que os nomes parecem reais 
neste trecho, mas não no resto.

   Notei que você não verifica o resultado do eval, quando da geração da 
subrotina. Pode ser que não tenha nada a ver, mas eu acho que você 
precisa acrescentar uma linha "die $@ if $@;" depois do eval() e antes 
do "1;".

   Me conte se isso ajudou você a mudar a mensagem de erro, tá?
   Putamplexos!
-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  Luis Campos de Carvalho is BSc in Comp Science,
  PerlMonk [SiteDocClan], Sao Paulo PM Leader,
  Unix Sys Admin && Certified Oracle DBA
  http://br.geocities.com/monsieur_champs/
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=



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