Hallo,
ich hab mal für einen Delphiprogrammierer ne sicher einfache Frage :
Ich möchte mit einem Delphi-Programm in einem Verzeichnis ähnlich einer Batch-Datei mehrere Dateien der Reihe nach bearbeiten. Hierbei möchte ich aber in dieser "Programmschleife" die jeweilige Datei mit ihrem Namen sofort anzeigen. Mir gelingt es nur, erst am Ende eine Liste aller bearbeiteten Datein anzuzeigen, erst wenn ich zum Startpunkt des Programms zurückkehre. Mit welcher Komponente kann ich eine sofortige Anzeige bewirken?
Lutz20
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Mit welchem Kommando lässt du dir denn die Dateien anzeigen? (genauer Quelltext bitte)
Hallo Tommy22,
hier ein Auszug aus dem Programm /ich mußte stark kürzen, war zum Senden zu lang
procedure TForm1.anzeige;
begin
ListBox1.Items.Add(DateiName); //TListBox Versuch mit 2 Komponenten - keiner paßt
Liste.text:=DateiName; //TMaskEdit
end;
procedure FolgeDatei(var DateiName:string);
begin
while findnext(REC) = 0 do
begin
DateiName:=REC.Name;
end;
exit;
end;
procedure TForm1.StartClick(Sender: TObject);
var x : Integer;
begin
ErsteDatei(DateiName);
ListBox1.Items.Add(DateiName); // Sicher doppelgemoppelt
Liste.text:=DateiName; // Sicher doppelgemoppelt
Anzeige;
FolgeDatei(Dateiname);
Liste.text:=DateiName;
ListBox1.Items.Add(DateiName);
Anzeige; // sicher doppelgemoppelt
end;
end;
Wenn ich mich recht erinnere dann werden GUI-Elemente u.U. erst mit Zeitverzögerung aktualisiert. Schon mal mit Control.update() probiert?
Abgesehen davon: Sehr wirre Programmstruktur. Du setzt globale Variablen ein und warum in aller Welt gibst Du in FolgeDatei(..) (warum ziehst Du sowas überhaupt ein eine Funktion raus??) den Dateinamen nicht als Rückgabewert eine Funktion zurück?
Gruß
Borlander
das Stück Programm mag wirr aussehen, aber es ist dem Platzmangel im Forum geschuldet. Ich habe alle für das Problem nicht relevanten Zeilen entfernt. Die Procedur Folgedatei wird in einer Schleife aufgerufen bis alle Dateien des entsprechenden Dateityps abgearbeitet sind.
Ich bin kein großer Programmierer, habe früher mal in Turbo-Pascal programmiert und will mal das eine oder andere Programm in ein Windowsprogramm umsehen oder auch neu entwickeln, nur kleine Sachen.
Mit Control.update() oder den GUI- Anweisungen kann ich nichts anfangen (die berühmten 7 Siegel).
Lutz20
Da empfehle ich zunächst mal einen Blick in die sehr gute Referenz im Windows-Hilfe-Format. Schau dort einfach mal unter TControl (wenn ich mich recht erinnere ist das die Basisklasse aller Bedienelemente) nach und dort nach der Methode update().
Zur genannten Funktion bzw. in deinem (für mich nicht nachcollziehbarem) Fall Prozedur. Warum machst Du das ganze nicht so:
Wobei ich mir beim ObjectPascal-Syntax und der benennung des Rückgabewertes nicht sicher bin. Kann auch leicht abweichen...
Gruß
Borlander
Hi Lutz20,
wenn Du ein WinControl, z.B. ein MemoFeld mit Text updatest wird es - soweit ich es noch weiß - nicht sofort angezeigt, sondern erst wenn die Kontrolle wieder an Windows zurückgeht.
Wenn Du aber den Fkt.aufruf
Application.ProcessMessages();
nach dem Updaten des Feldes ausführst, geschieht das gleich...
Hoffe es hat geholfen...