[quote=Crian,12.01.2004, 10:23]Sonst mach Dir doch einfach einen eigenen Splashscreen mit einem Toplevel-Fenster und grab und focus...
Oder Du erstellst erst ein MainWindow, das nur aus dem Splashscreen besteht, zerstörst es nach dem Laden der Daten und baust dann erst Dein eigentliches MainWindow auf (falls das nicht zu lange dauert...).[/quote]
Ich habe inzwischen slebst auch einen Splashscreen gebraucht und habe es so gelöst:
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
sub splash ($) {
# -----------------------------------------------------------------------------
# sub : s p l a s h
# -----------------------------------------------------------------------------
# Autor : CD
# Aufgabe : Zeigt einen Splash-Screen zu Beginn des Programms an.
# Parameter : Referenz auf auszuführende Funktion oder Closure
# Rückgabewert : keiner
# -----------------------------------------------------------------------------
# 0.0.1 - 22.01.2004 - CD - Erstellt
# -----------------------------------------------------------------------------
print "splash()\n" if $Conf{debug};
my $f = shift;
die "splash: Erwarte Parameter auf Funktion!" unless defined $f and
ref $f eq 'CODE';
#--------------------------------------------------------------------------
# Splash-Fenster erstellen:
#--------------------------------------------------------------------------
my $splash = new MainWindow(-background => 'blue',
-cursor => 'watch',
);
$splash->Label(-text => 'Programm',
-font => '{Arial} 150 {normal}',
-foreground => 'yellow',
-background => 'blue',
-cursor => 'watch',
)
->pack(-side => 'top',
-expand => 1,
-fill => 'both',
);
$splash->Label(-text => '... loading ...',
-anchor => 'n',
-foreground => 'yellow',
-background => 'blue',
-cursor => 'watch',
)
->pack(-side => 'bottom',
-expand => 0,
-fill => 'none',
);
# Größe des Fensters:
my $windowHeight = "600";
my $windowWidth = "800";
# Bildschirmgröße holen:
my $screenHeight = $splash->screenheight();
my $screenWidth = $splash->screenwidth();
# Splashscreen zentrieren:
$splash->geometry($windowWidth . 'x' . $windowHeight .
'+' . int($screenWidth/2 - $windowWidth/2) .
'+' . int($screenHeight/2 - $windowHeight/2)
);
# Größe festlegen:
$splash->minsize( $windowWidth, $windowHeight);
$splash->maxsize( $windowWidth, $windowHeight);
$splash->overrideredirect(1);
$splash->bind('<<toete>>' => sub { $splash->destroy() } );
$splash->after(100,
sub {
&$f();
$splash->eventGenerate('<<toete>>', -when => 'now');
}
);
MainLoop();
} # sub splash
Der Aufruf zu Beginn meines Programms sieht dann so aus:
splash( sub { lies_daten();
lies_tests();
} );
tk_main();
MainLoop();
exit;
tk_main startet die Oberfläche des eigentlichen Programms...
Man kann natürlich im Splashfenster auf irgendwelche Bilder anzeigen, oder was immer man möchte. Das Grundgerüst ist ja da :)\n\n
<!--EDIT|Crian|1074850403-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite