![]() |
Datei kopieren sobald Form geladen und sichtbar ist.
Hallo allerseits,
ich habe mich seit langer Zeit mal wieder mit Delphi befasst. Nun habe ich ein Problem. Ich programmiere egrade eine Art installer, welcher aus 3 Forms besteht. In Form 2 wird der Installationsort ausgewählt, sobald man auf Weiter klickt soll Form 3 angezeigt werden. Dort sollen dann die Informationen zu den kopierten Dateien, sowie eine Fortschrittsanzeige stehen. Jetzt mein Problem: Klicke ich auf weiter, wird die Datei kopiert, obwohl ich die Form noch nicht sehe. Diese kommt erst zum vorschein wenn die Datei kopiert ist. Kopieren tue ich im FormShow Event. Wie bekomme ich es nun hin, dass erst die Form angezeigt wird und dann der kopiervorgang beginnt? Über den ein oder anderen Tip wäre ich sehr dankbar. GRuß Arne |
Re: Datei kopieren sobald Form geladen und sichtbar ist.
Hallo Arne,
probier es mal im "OnActivate" Ereignis des Formulars, sollte klappen. |
Re: Datei kopieren sobald Form geladen und sichtbar ist.
Da gibts mehrer Möglichkeiten:
a, TTimer auf Formular legen, Im OnShow-Event starten und wenn er zuschlägt Datei kopieren b, Du definiertst dier eine User-Message und im OnShow-Event wird ein PostMessage mit dieser User-Message abgeschickt. |
Re: Datei kopieren sobald Form geladen und sichtbar ist.
Super, das mit dem Timer funktioniert. Vielen Dank für den Tip.
Gruß |
Re: Datei kopieren sobald Form geladen und sichtbar ist.
Okay, jetzt tritt auch gleich das nächste Problem auf.
Im TimerEvent soll jetzt die Prozentangabe aktualisiert werden. Dies geschieht aber auch erst nach dem kopieren, obwol ich sie im Quellcode vor dem Auftruf auf 0 setze. |
Re: Datei kopieren sobald Form geladen und sichtbar ist.
Wie genau sieht denn TimerEvent jetzt aus? Hast du alles in einer einzigen Timerprozedur geschrieben?
Zum Kopiren mit einer Fortschrittsanzeige könntest du einfach mal in der DP suchen, ich glaube da war soetwas schonmal. Gruß, Lennard |
Re: Datei kopieren sobald Form geladen und sichtbar ist.
Vielen dank erstmal für die Zahlreichen Hilfen...
Hier mal der Code:
Delphi-Quellcode:
DP??? Was ist das??
unit Unit3;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ShellApi; type TForm3 = class(TForm) Panel1: TPanel; Label1: TLabel; lbl_Datei: TLabel; lbl_Prozent: TLabel; btn_Beenden: TButton; Label2: TLabel; lbl_Pfad: TLabel; Timer1: TTimer; procedure btn_BeendenClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Timer1Timer(Sender: TObject); procedure FormShow(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form3: TForm3; implementation uses Unit1, Unit2; {$R *.dfm} function AreFilesEqual(const file1, file2: String): Boolean; var m1, m2: TMemoryStream; begin Result := False; m1 := TMemoryStream.Create; try m1.LoadFromFile(file1); m2 := TMemoryStream.Create; try m2.LoadFromFile(file2); if m1.Size = m2.Size then Result := CompareMem(m1.Memory, m2.Memory, m1.Size); finally m2.Free; end; finally m1.Free; end end; procedure TForm3.btn_BeendenClick(Sender: TObject); begin close; end; procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction); begin form1.close; form2.close; end; procedure TForm3.Timer1Timer(Sender: TObject); begin Timer1.Enabled:=false; //CopyFile(PChar(ExtractFilePath(ParamStr(0))+'data\um_kalender.exe'), PChar(pfad+'\um_kalender.exe'), False); CopyFile('C:\Dokumente und Einstellungen\Arne\Desktop\temp\data.zip', PChar(Pfad+'\data.zip'), False); lbl_Prozent.Caption:='100%'; end; procedure TForm3.FormShow(Sender: TObject); begin Pfad:='C:\Dokumente und Einstellungen\Arne\Desktop\temp\um_kalender'; lbl_Pfad.Caption:=Pfad; lbl_Datei.Caption:='Kopiere data.zip'; lbl_Prozent.Caption:='0%'; ForceDirectories(Pfad); Timer1.Enabled:=true; end; end. |
Re: Datei kopieren sobald Form geladen und sichtbar ist.
Zitat:
Gruß, Lennard |
Re: Datei kopieren sobald Form geladen und sichtbar ist.
Da hab ich mich wohl ein wenig missverständlich ausgedrückt. Ich will im endeffekt 12 gleichgroße dateien kopieren. nach jedem kopiervorgang soll dann der entsprechende prozentwert angezeigt werden. doch dies tut er nicht. Erst nachdem das letzte File kopiert wurde wird 100% angezeigt. Vorher passiert garnichts. Hab die ganzen kopieranweisungen nurnoch nicht in dem hier veröffentlichten Quelltext.
kopier so: Copyfile.... lbl..Caption: 10% Copyfile.... lbl..Caption: 20% Copyfile.... lbl..Caption: 30% ... |
Re: Datei kopieren sobald Form geladen und sichtbar ist.
Ach so, okay, dann wird die Sache etwas klarer.
Wie führst du denn diese Kopiervorgänge durch, sind sie einfach alle hintereinandergehängt? Wo genau das Problem liegt, kann ich dir gerade nicht beantworten, es wäre möglich, dass die kopiervorgänge so schnell ablaufen, dass die einzelnen Prozentwerte einfach nicht sichtbar sind, aber du solltest zwischen den Kopiervorängen immer eine kleine Pause einlegen, damit Der Prozentwert in das Label geschrieben werden kann und auch Sichbar wird. Also könntest du auch hier einen Timer verwenden. Gruß, Lennard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz