Font
[thread]4699[/thread]

Splashscreen: Graphische Oberfläche



<< >> 10 entries, 1 page
ahnungsloser
 2004-01-11 20:14
#46690 #46690
User since
2003-09-03
80 articles
BenutzerIn
[default_avatar]
Hi,

ich würde gerne meine Applikation, mit einem Splshscreen versehen, weis aber nicht wie ich das machen könnte? Die Applikation ist selbst schon soweit ganz ok und in Perl::Tk geschrieben. Kann mir wer ein Tipp geben.
Desweiteren, wenn ich eine Perl::Tk Anwendung kompilieren möchte, kommt es öfteres zu dem Problem, dass nach der kompilierung, die zwar auf meinem Rechner richtig aussieht, bei anderen Rechnern, mit anderen Auflösungen es zu darstellungsfehler kommt, bzw. einige Widges nicht mehr angezeigt werden.
Strat
 2004-01-11 20:31
#46691 #46691
User since
2003-08-04
5246 articles
ModeratorIn
[Homepage] [default_avatar]
schau dir mal die Module an, die unter CPAN:Tk::Splash aufgelistet werden... ich habe vor einiger Zeit mal was mit CPAN:Tk::Splashscreen gemacht, und das funktionierte gut...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
ahnungsloser
 2004-01-12 08:45
#46692 #46692
User since
2003-09-03
80 articles
BenutzerIn
[default_avatar]
Hi,

thx erstmal, werd mich nochmals genauer umsehen, suche aber ein Modul, dass für die active state distro gilt???
ahnungsloser
 2004-01-12 11:19
#46693 #46693
User since
2003-09-03
80 articles
BenutzerIn
[default_avatar]
Hi,

ich nochma, hat soweit gefunzt, würd mich nur zu gern interessieren, wie ich das Fenster gesteurt (über Button, oder nach zeit) abschalten kann, ohne dass es verschwindet sobald man auf das Fenster geht, sobald der Mauszeiger drüberwandert, verschwindet es!
BEGIN {

$image = "e:\\perl\\projekte\\adr_gui\\logo.bmp";
$width = '158';
$height = '129';
$title = "Splish,Splash";
$overrideredirect = "1";
require Tk::Splash;
$splash = Tk::Splash->Show($image, $width, $height, $title, $overrideredirect);

sleep 10;
}
$splash->Destroy;
....res6t des Proggies ....
cu
Crian
 2004-01-12 11:23
#46694 #46694
User since
2003-08-04
5871 articles
ModeratorIn
[Homepage]
user image
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...).
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
ptk
 2004-01-12 11:27
#46695 #46695
User since
2003-11-28
3645 articles
ModeratorIn
[default_avatar]
[quote=ahnungsloser,12.Jan..2004, 10:19]Hi,

ich nochma, hat soweit gefunzt, würd mich nur zu gern interessieren, wie ich das Fenster gesteurt (über Button, oder nach zeit) abschalten kann, ohne dass es verschwindet sobald man auf das Fenster geht, sobald der Mauszeiger drüberwandert, verschwindet es!
[/quote]
Das sollte nicht sein. Welche Plattform, welches Perl, welche Tk-Version?
Quote
BEGIN {

$image = "e:\\perl\\projekte\\adr_gui\\logo.bmp";
$width = '158';
$height = '129';
$title = "Splish,Splash";
$overrideredirect = "1";
require Tk::Splash;
$splash = Tk::Splash->Show($image, $width, $height, $title, $overrideredirect);

sleep 10;

sleep() ist bei Tk immer eine schlechte Idee. Damit wird die gesamte MainLoop blockiert, es sind also nicht einmal Window-Refreshes moeglich. Besser ist hier die Verwendung von ->after().
Quote
}
$splash->Destroy;
....res6t des Proggies ....
cu
ahnungsloser
 2004-01-13 10:45
#46696 #46696
User since
2003-09-03
80 articles
BenutzerIn
[default_avatar]
Hi,

hab ein Windows2000 Professional und die ActiveState Distro (Perl v5.8.0 built for MSWin32-x86-multi-thread).
Warum kein Sleep?? Bin ein Ahnugsloser sorry
Strat
 2004-01-13 13:11
#46697 #46697
User since
2003-08-04
5246 articles
ModeratorIn
[Homepage] [default_avatar]
bei GUIs friert bei einem Sleep fuer die angegebene Zeit die komplette Anwendung ein, und man kann damit nichts mehr machen. Deshalb besser einen Timer mit $mw->After($miliseconds, \&callback) laufen lassen, der nach $miliseconds die Subroutine &callback ausfuehrt. CPAN:Tk::after
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
ptk
 2004-01-14 12:35
#46698 #46698
User since
2003-11-28
3645 articles
ModeratorIn
[default_avatar]
Wenn man trotzdem ein Quasi-Blockieren haben moechte, kann man mit waitVariable warten.

Ungefaehr so (ungetestet)
Code: (dl )
1
2
3
$var = 0;
$mw->after(10000, sub { $var = 1 }); # 10 s warten
$mw->waitVariable(\$var);
Crian
 2004-01-23 11:28
#46699 #46699
User since
2003-08-04
5871 articles
ModeratorIn
[Homepage]
user image
[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:

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
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:

Code: (dl )
1
2
3
4
5
6
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
<< >> 10 entries, 1 page



View all threads created 2004-01-11 20:14.