Nachdem ich in diesem Thread (->
http://board.perl-community.de/cgi-bin....3;t=217) doch einiges erfahren und gelernt habe, wie man ein DIRECTORY auswählt, komme ich nun zum eigentlichen Kern meiner Diskussion.
Ich möchte folgendes erledigen (wieder unter WIN32):
1. Selektiere ein
Directory (das mache ich wie im o.g. thread diskutiert).
2. Lese die
Namen aller
*.pl Programme aus dem selektierten Directory aus.
3. Schreibe diese unter (2) ausgelesenen Dateinamen in eine
LISTBOX.
4.
Selektiere einen oder mehrere Einträge aus der LISTBOX.
5. Führe nun diejenigen Programme aus, die ich aus der LISTBOX
selektiert habe.
Nun, hört sich für mich logisch an und ich denke es gibt hierfür schon gute Ansätze. Ich habe versucht, im unten angehängten Beispiel solch eine Funktion abzubilden. Es ist alles noch sehr holprig, das ist aber weniger von Belang. Wie ihr seht, kann ich schon mal ein Directory auswählen (yep, ich weiß dass meine Lösung der DIRECTORY Auswahl alles andere als Elegant ist, aber es geht schon noch). Im Moment fülle ich aber die LISTBOX noch manuell mit "
a.pl", "
b.pl" und "
c.pl". Und genau das möchte ich ändern.
Frage 1: -> Wer kann mir sagen, wie ich nun die Dateinamen uas einem vorher selektierten Directory auslese und sie in die LISTBOX einfüge?
Frage 2: -> Wer kann mir sagen, wie ich dann die SELEKTIERTEN Einträge der LISTBOX dazu verwende, die Perl-Programme auszuführen? Ich muss wohl die LISTBOX-Einträge irgendwie mit einem INDEX versehen, um sie dann auszulesen (oder so ähnlich). Ich habe leider trotz stundenlangem Suchen kein vernünftiges Beispiel gefunden und hoffe nun, von Euch die entsprechenden Tips zu bekommen.
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/usr/bin/perl
use strict;
use Tk;
use Tk::LabFrame;
use File::Basename;
my $mw = MainWindow->new;
$mw->title("Ein TEST mit LISTBOX");
# *****************************************************************************
# ** Generiere Menü AUSWAHL DES DIRECTORIES ***********************************
# *****************************************************************************
my $laden = $mw->LabFrame(-label=>'[ 1--> Auswahl des Directories ]', -labelside=>'acrosstop')
->pack (-side =>'top', -expand=>1, -fill=>'x');
my $laden_button = $laden->Button(-text=>'Auswählen', -command=> \&Load_Path)
->pack (-side=>'left', -expand=>0, -fill=>'none');
my $laden_entry = $laden->Entry(-width=>50)
->pack (-side=>'left', -expand=>1, -fill=>'x');
# *****************************************************************************
# ** Generiere Menü PROGRAMME-AUSWÄHLEN ***************************************
# *****************************************************************************
my $listbox_frame = $mw->LabFrame(-label=>'[ 2--> Programme-Auswählen ]', -labelside=>'acrosstop')
->pack (-side =>'top', -expand=>1, -fill=>'x');
my $Auswahl_Liste = $listbox_frame->Listbox("width" => 20,
"height" => 5,
-selectmode => 'single')
->pack(-side=> 'left');
$Auswahl_Liste->insert('end', "a.pl",
"b.pl",
"c.pl",);
$Auswahl_Liste->bind('<Double-1>', \&Zeige_Auswahl);
# *****************************************************************************
# ** Generiere Menü PROGRAMME AUSFÜHREN ***************************************
# *****************************************************************************
my $button = $mw->LabFrame(-label=>'[ 3--> Programme ausführen ]', -labelside => 'acrosstop')
->pack(-side=>'top', -expand=>1, -fill=>'x');
my $doit_btn = $button->Button(-text=>'Ausgewählte Programme ausführen', -command=> \&Run_Perl_Prog)
->pack(-side=>'left', -expand=>0);
MainLoop();
# *****************************************************************************
# ** Sub ZEIGE_AUSWAHL ********************************************************
# *****************************************************************************
sub Zeige_Auswahl {
my $Auswahl = $Auswahl_Liste->get('active');
return if (!$Auswahl);
print "Deine Auswahl: '$Auswahl'.\n";
my $Run_Prog = "D:\\eigene\\MY_DEVELOPMENT\\My_PERL_TK\\LIST_BOX_2\\$Auswahl";
system($^X, $Run_Prog);
}
# *****************************************************************************
# ** Sub LADE PATH ************************************************************
# *****************************************************************************
sub Load_Path {
my $file_typ = [
['PERL Program', '.pl' ],
['All Files', '*' ],
];
my $dn = $mw->getOpenFile(-filetypes=>$file_typ);
my $file = $dn;
my $dn = dirname($file);
my $sl = "/";
print "Pfad ist: $dn$sl";
if (defined $dn and $dn ne '') {
$laden_entry->delete(0, 'end');
$laden_entry->insert('end', $dn);
}
}
# *****************************************************************************
# ** Sub Run_Perl_Prog ********************************************************
# *****************************************************************************
sub Run_Perl_Prog {
my $DoIt_1 = $laden_entry->get();
if(!$DoIt_1 || $DoIt_1 eq ''){
$mw->messageBox(-message=>" Bitte zuerst ein Programm auswählen.",
-type=>"OK"),
return 1;
}
print "Dateinamen: $DoIt_1 \n";
my $tmp_1 = system(qx($^X $DoIt_1));
}