
package require dde


#! / usr / bin / perl
use strict;
use feature ': 5.10';
use Tkx;
# Connect the module to work with DDE
Tkx :: package_require ('dde');
# Install handler
Tkx :: dde_servername (-handler => \ & dde_handle, 'PerlDDE');
# Create a window
my% UI = ();
my $ mw = Tkx :: widget-> new ('.');
$ mw-> g_wm_title ('Perl / Tkx DDE');
$ mw-> g_wm_minsize (qw (300,200));
my $ label = $ mw-> new_ttk__label (-text => 'Receiver:');
my $ entry = $ mw-> new_ttk__entry (-textvariable => \ $ UI {entry},
-state => 'readonly');
Tkx :: grid ($ label, -row => 0, -column => 0, -sticky => 'ew', -padx => 4, -pady => 4);
Tkx :: grid ($ entry, -row => 1, -column => 0, -sticky => 'ew', -padx => 4, -pady => 4);
Tkx :: grid (columnconfigure => $ mw, 0, -weight => 1);
Tkx :: MainLoop ();
one;
sub dde_handle {
PROCESS_DDE_ARGS:
foreach my $ ddeval (@_) {
next PROCESS_DDE_ARGS if ref ($ ddeval);
$ UI {entry} = $ ddeval;
my ($ key, $ value) = Tkx :: SplitList ($ ddeval);
given ($ key) {
when ('message') {
Tkx :: tk ___ messageBox (
-title => 'DDE Receiver',
-message => "Received message: \ n $ value",
) if length $ value;
}
when ('oops') {
$ UI {entry} = 'Oops, sender was terminated';
}
# ...
}
}
}
#! / usr / bin / perl
use strict;
use Tkx;
Tkx :: package_require ('dde');
my% UI;
my $ mw = Tkx :: widget-> new ('.');
$ mw-> g_wm_title ('Perl / Tkx DDE');
$ mw-> g_wm_minsize (qw (300,200));
my $ label = $ mw-> new_ttk__label (-text => 'Sender:');
my $ copy = $ mw-> new_ttk__label (-text => 'santeri.habrahabr.ru');
my $ msg_e = $ mw-> new_ttk__entry (-textvariable => \ $ UI {msg});
my $ msg_b = $ mw-> new_ttk__button (
-text => 'Message :)',
-command => sub {
send_message (message => $ UI {msg});
},
);
Tkx :: bind ($ msg_e => '<Return>', sub {
$ msg_b-> invoke ();
});
# oops, if you closed the program
$ mw-> g_wm_protocol (WM_DELETE_WINDOW => sub {
send_message ('oops');
$ mw-> g_destroy ();
});
Tkx :: grid ($ label, -row => 0, -column => 0, -sticky => 'ew', -padx => 4, -pady => 4);
Tkx :: grid ($ msg_e, -row => 1, -column => 0, -sticky => 'ew', -padx => 4, -pady => 4);
Tkx :: grid ($ msg_b, -row => 1, -column => 1, -sticky => 'ew', -padx => 4, -pady => 4);
Tkx :: grid ($ copy, -row => 2, -column => 0, -sticky => 'se', -padx => 4, -pady => 4,
-columnspan => 2);
Tkx :: grid (rowconfigure => $ mw, 2, -weight => 1);
Tkx :: grid (columnconfigure => $ mw, 0, -weight => 1);
Tkx :: MainLoop ();
one;
# TclEval is the name of the DDE service for Tcl
sub send_message {
my ($ key, $ val) = @_;
return if! defined $ key;
eval {
my $ value = $ val || q {};
Tkx :: dde_execute (TclEval => 'PerlDDE', "$ key {$ value}");
};
}
Source: https://habr.com/ru/post/74743/
All Articles