Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Datei kopieren sobald Form geladen und sichtbar ist. (https://www.delphipraxis.net/82620-datei-kopieren-sobald-form-geladen-und-sichtbar-ist.html)

xarneax 16. Dez 2006 14:49


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

Constructor 16. Dez 2006 15:18

Re: Datei kopieren sobald Form geladen und sichtbar ist.
 
Hallo Arne,

probier es mal im "OnActivate" Ereignis des Formulars, sollte klappen.

Bernhard Geyer 16. Dez 2006 15:19

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.

xarneax 16. Dez 2006 15:26

Re: Datei kopieren sobald Form geladen und sichtbar ist.
 
Super, das mit dem Timer funktioniert. Vielen Dank für den Tip.

Gruß

xarneax 16. Dez 2006 15:28

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.

Gentleman 16. Dez 2006 15:35

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

xarneax 16. Dez 2006 15:43

Re: Datei kopieren sobald Form geladen und sichtbar ist.
 
Vielen dank erstmal für die Zahlreichen Hilfen...

Hier mal der Code:

Delphi-Quellcode:
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.
DP??? Was ist das??

Gentleman 16. Dez 2006 15:56

Re: Datei kopieren sobald Form geladen und sichtbar ist.
 
Zitat:

Zitat von xarneax
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.

Also ich verstehe dein Problem nicht so ganz. Momentan kopierst du einfach die Datei und nach Abschluss schreibst du 100% in das Label. Wenn du nun möchtest, dass die jeweilige Prozentzahl des Fortschritts angezeigt wird, dann musst du diese auch beim Kopiervorgang berechnen ;)


Gruß,
Lennard

xarneax 16. Dez 2006 16:02

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%
...

Gentleman 16. Dez 2006 16:15

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 07:04 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz