Thread magnetische Fenster: unter win (11 answers)
Opened by anti at 2004-06-07 22:57

coax
 2004-06-08 12:03
#42223 #42223
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
ich hab da mal fix was zusammengeschustert.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use Tk;

my $mw = tkinit;

$mw->bind('<Configure>' => sub { $mw->dock_window(50) });

MainLoop();

package MainWindow;

sub dock_window {
   my $self = shift;
   my $px = shift || 10;    # Pixel vom Bildschirmrand
   
   my $sh = $self->screenheight();
   my $sw  = $self->screenwidth();
   
   my($width, $height, $pos_x, $pos_y) = split(/[x+-]/, $self->geometry());
   
   my $pos_x2 = $pos_x + $width;
   my $pos_y2 = $pos_y + $height;
   
   return if ($pos_x  == 0   || $pos_x  > $px)
          && ($pos_x2 == $sw || $pos_x2 < ($sw - $px))
          && ($pos_y  == 0   || $pos_y  > $px)
          && ($pos_y2 == $sh || $pos_y2 < ($sh - $px));

   $pos_x = $pos_x <= $px ? 0 : $pos_x;
   $pos_y = $pos_y <= $px ? 0 : $pos_y;
   
   $pos_x = $pos_x2 > ($sw - $px) ? $sw - $width  : $pos_x;
   $pos_y = $pos_y2 > ($sh - $px) ? $sh - $height : $pos_y;

   $self->geometry(sprintf("+%s+%s", $pos_x, $pos_y));
}

dock_window kannst du angeben ab wie viel Pixel vom Bildschirmrand es das Fenster andocken soll, ohne Angabe dockt es immer bei 10 Pixel.

Es wird aber so sein, dass das Fenster in der y-Position unter der Taskleiste landet weil man die nicht so einfach einkalkulieren kann. (Ich weisz zumindest nicht wie).
,,Das perlt aber heute wieder...'' -- Dittsche

View full thread magnetische Fenster: unter win