2009-02-03 5 views

Répondre

2

Si vous êtes dans un environnement Unix, vous êtes hors de la chance. Le bouton "fermer" est géré par le Window Manager du bureau qui est un processus complètement différent sur lequel vous n'avez aucun contrôle.

Même si par un piratage vous désactivez le bouton "fermer" l'utilisateur peut toujours le ramener si le gestionnaire de fenêtres le permet. Le gestionnaire de fenêtre d'illumination par exemple peut activer/désactiver tous les boutons de la fenêtre sur demande.

La technique que vous donnez dans le lien fait exactement cela. Il ne supprime pas le bouton "fermer". Il donne simplement un indice au gestionnaire de fenêtres (WM_DELETE_WINDOW). Il appartient au gestionnaire de fenêtre si ce conseil sera respecté ou non.

Voir également les pages icccm et NetWM.

Ce que vous voulez peut être être possible sur Windows, mais mon expérience avec cet OS est limitée alors peut-être un autre poster le saura.

+0

Merci, mais je suis sur Windows. – splintor

+0

Je pense que puisque Perl/TK sont multiplate-forme (plus bas dénominateur commun) même dans Windows, vous auriez besoin d'un hack sérieux pour faire ce que vous voulez. – kazanaki

2

J'ai une application que je l'ai écrit, je me demandais la même chose, et je ne disableit, mais j'ai un appel vers un sous-programme, qui fait simplement return;

$Mw->protocol('WM_DELETE_WINDOW',sub{return;}); 
0

Selon the Perl Monks, il semble que les travaux suivants sur Windows:

#!/usr/bin/perl 
use warnings; 
use strict; 
use Tk; 

my $window = new MainWindow; 
$window ->title("Close test"); 
$window ->geometry("400x250"); 

#prevents window from closing 
$window->protocol('WM_DELETE_WINDOW' => sub { 
         print "Do stuff before exiting\n"; 
         exit; 
        }); 

MainLoop; 

Dans le code ci-dessus, vous interceptant le signal envoyé lorsque l'utilisateur appuie 'X' et peut alors écrire votre propre sous-programme à exécuter lorsque le bouton est pressé .

Si vous souhaitez désactiver l'icône près, définissez sub à vide (dire effectivement à « ne rien faire lorsqu'il est pressé »): 'WM_DELETE_WINDOW' => sub {}

0

Si vous ne parvenez pas à vraiment désactiver la fermeture bouton (je veux dire pour le griser ou même le retirer de la décoration de la fenêtre), il pourrait être la chose la plus intuitive pour iconifier votre fenêtre au lieu de le fermer. C'est ce que j'ai fait.

$window->protocol('WM_DELETE_WINDOW', sub { $window->iconify(); });

Questions connexes