Autor Beitrag
Springbok
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 17.06.11 23:11 
Hey nachdem heute mein Problem mit der Datei umbenennen und verschieben gelöst wurde wollte ich dann heute weiterprogrammieren. Jedoch stösst mein Hirn wieder an seine Grenzen, diesmal aber weiss ich wirklich nicht weiter. Ich kann mein Problem Google mal nicht erklären...

Also ich habe 2 Frames:

1. Frame:
- 1 Button wo draufsteht "Kopieren". Dieser Button kopiert, nach Knopfdruch, alle Dateien vom Ordner A in Ordner B. Er macht eigentlich ein Backup des Ordners.

2. Frame:
- 1 Label in dem drinsteht: "Im Moment wird ihre Anfrage bearbeitet..." -->Keine weiteren "Aufgaben"/Funktionen

Wenn ich nun im 1. Frame den Button "Kopieren" klicke möchte ich gerne dass der 2. Frame mit dem Label angezeigt wird. Dabei soll der 1. Frame verschwinden und der 2. Frame so lange da bleiben bis alle Dateien fertig kopiert sind.

Mir fehlt komplett der Ansatz. Ich habe keine Ahnung wie ich das machen soll respektive wie ich an diese Aufgabe angehen soll...

Weiss vielleicht einer einen Rat respektive wie ich dies sinnvoll "bauen" könnte. Ich weiss dass ich showmessage auch nehmen könnte, jedoch habe ich von dem showmessage noch weniger Ahnung als von den Frames deshalb traue ich mich nicht dies zu nehmen...

mfg und jetzt schon mit freudiger Erwartung an eure Gedankenzüge
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Fr 17.06.11 23:50 
Warum nimmst du Frames? :gruebel: Zeige einfach ein zweites, modales Formular :idea: Das Datei kopieren wirst du ja hoffentlich in einem Thread lösen und von diesem schickst du Nachrichten an das Formular, wie viele Datein schon gemacht wurden und wie viele noch zu machen sind :!:
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Sa 18.06.11 00:10 
Huhu.

Du weisst, wie Dateien kopiert werden, aber weisst nicht, dass es ein [Control].Visible := true / no gibt ?

:roll:

Viel Erfolg :)

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 18.06.11 09:19 
user profile iconRegan hat folgendes geschrieben Zum zitierten Posting springen:
Zeige einfach ein zweites, modales Formular :idea:
Modal braucht man nicht unbedingt. Dann blockiert man das Formular ja. Wenn man einfach Popup-Formulare benutzt, bleiben die zwar im Vordergrund, aber nur im Vordergrund deines eigenen Formulars:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  Application.AddPopupForm(frmProgressDialog);
  frmProgressDialog.Show;
  frmProgressDialog.pbCopyProgress.Position := 0;
  CopyMyFile...
  frmProgressDialog.pbCopyProgress.Position := 50;
  CopyMyFile...
  frmProgressDialog.pbCopyProgress.Position := 100;
  frmProgressDialog.Close;
  Application.RemovePopupForm(frmProgressDialog);
beastofchaos
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: Sa 18.06.11 09:33 
So dachte ich mir das auch - du musst zwischen den einzelnen Kopierungen etwas an das Formular übergeben - halt am besten mit einer Progressbar oder so.
Aber braucht es solange zum Kopieren. ich kann mir vorstellen, dass man das popup-formular nicht mal sehen würde :)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 18.06.11 10:22 
Und dann gibt es auch noch ShFileOperation um den Ordner zu kopieren. Das zeigt schon selbst eine Fortschrittsanzeige an.
Springbok Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 18.06.11 13:01 
Ohh dass es so schwer ist, hätte ich nun nicht gedacht...

Also das Programm kann jedweiligen Ordner sichern. Deshalb wollte ich einfach während dem kopieren ein kleiner "persistenter Dialog" anzeigen damit der User einfach wartet während das Programm im Hintergrund seine Arbeit verrichtet und nicht dass er dann noch 20 andere Dinge im Programm verstellt.

Das mit der SHFileOperation habe ich nicht in Anbetracht bezogen, weil ich folgendes benutze:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function KopiereOrdner(const Source, Destination: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc  := FO_COPY;
    fFlags := FOF_FILESONLY;
    pFrom  := PChar(Source + #0);
    pTo    := PChar(Destination)
  end;
  Result := (0 = ShFileOperation(fos));
end;

Ich hab diesen Schnipsel im Internet gefunden, da ich mich noch nie mit dieser ShFileOperation gearbeitet habe. Ich hatte dann immer das CopyFile genommen und dann in einen anderen Ordner rüberkopiert.
Ich weiss dass es programmiertechnisch nicht perfekt ist, aber dies ist eben nur ein Programm was mir Delphi und die Programmierfähigkeiten näher bringen soll.

In dem 2. Formular wollte ich einfach nur den Text anzeigen, so wie es jetzt eigentlich ist. Nicht mehr. Aber wenn ihr sagt dass mit dieser ShFileOperation eine Progressbar kommt, interessiert mich dies dann schon mehr. Ich werde das dann mal googlen und schauen ob ich es hinbekomme..

mfg und danke vielmals für die Antworten!
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Sa 18.06.11 13:10 
user profile iconSpringbok hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
    pTo    := PChar(Destination);					

Das ist falsch. pFrom und pTo müssen mit einer Doppelnull terminiert sein. Also
ausblenden Delphi-Quelltext
1:
    pTo    := PChar(Destination + #0);					
Springbok Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 18.06.11 13:15 
Ok danke für die Fehlerhilfe!

Wurde nun verbessert!
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Sa 18.06.11 13:40 
Hallo Springbock,

ich habe auch ein solches kleines Programm auf meiner Webseite (incl. Source): www.nogad.de -> FileBackup

Vielleicht kannst Du da eine Idee heraus interpretieren.

Viele Grüße
~Mathias

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 18.06.11 14:33 
Dann benutzt du ja ohnehin bereits SHFileOperation. Wenn du einmal in die Doku schauen würdest, hättest du dort das Flag FOF_SIMPLEPROGRESS gefunden, das eine Fortschrittsanzeige zu dem Vorgang bietet.
Springbok Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 18.06.11 16:15 
Hey cool die Fortschrittsanzeige geht nun!

Nur ne Frage zu dieser Anzeige. Kann ich die auch in der Mitte des Bildschirms anzeigen lassen?

Dann noch eine weitere Frage:

Kann ich das Hauptframe dann auch enabled:=False machen, damit der User nicht daran spielen geht. Was mache ich dann, wenn der User abbricht?

mfg
beastofchaos
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: So 19.06.11 11:31 
*Delphi öffne, ein Formular mit nem Button mach und im objektinspektor schau* Oooooh, da steht ja Enabled, mal auf False setzen....
*Starte, auf das Formular/den Button klick* *Piep-Ton kommt raus*

Ich hoffe, ich konnte dir helfen ;)

Bei dem anderen weiß ich das jetzt nciht direkt, aber das kannst du vll. ja auch so leicht wie mit dem Formular per Width verschieben ;)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 19.06.11 12:17 
Das war glaube ich nicht ganz die Frage. :zwinker:

Ja, klar kannst du Enabled auf False setzen. Sobald der Vorgang abgeschlossen ist, also nach dem Aufruf der Funktion, kannst du es ja wieder auf True setzen.
Zudem bekommst du einen Rückgabewert, der dir anzeigen sollte was passiert ist.
Springbok Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 19.06.11 17:58 
Nur dazu ne Frage: Wie stell ich das an?

Ich habe ja das Default Frame. Wenn die ShFileOperation dabei ist zu arbeiten (in meinem Fall zu kopieren), dann wird ja durch "meine Einstellung":
ausblenden Delphi-Quelltext
1:
fFlags := FOF_SIMPLEPROGRESS					

Ein Fortschrittsanzeige angezeigt. Ich will aber jetzt, dass wenn diese angezeigt wird, dass dann das Frame von
ausblenden Delphi-Quelltext
1:
Frame1.Enabled:=True					

auf
ausblenden Delphi-Quelltext
1:
Frame1.Enabled:=False					

umändern.

Geht das? Kann ich der ShFileOperation ein Frame übergeben? Ich dachte das ginge nicht oder etwas doch?

mfg
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 19.06.11 18:01 
Wie wäre es, wenn du das Deaktivieren einfach selbst machst bevor du die Funktion aufrufst? Was hat die Funktion denn auch mit deinem Programm zu tun? Die weiß nur, dass sie etwas mit Dateien machen soll, mehr nicht.

Und wenn die Funktion fertig ist, aktivierst du danach dein Formular einfach wieder.

Für diesen Beitrag haben gedankt: Springbok