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 Neues Fenster erstellen (https://www.delphipraxis.net/26421-neues-fenster-erstellen.html)

daniel8520 23. Jul 2004 15:58


Neues Fenster erstellen
 
Hallo Leute,

ich bin grad voll am verzweifeln. Ich bin grad dabei so nen kleinen Browser zu proggen. Dafür hab ich auch so ne Art Downloadmanager gebastelt-besser gesagt: Ich bin noch dabei. Und jetzt fangen meine Probleme an.
Ich wollte es so handhaben, dass wenn die Endung der Datei in der Adressleiste z.B. 'exe' ist ein kleines Form (nennen wir es DownloadForm) aufgeht, und die datei herunterlädt. Funktionier auch. Nun wollte ich aber so haben, dass ich bzw. der User nicht nur eine datei runterladen kann, sondern mehrere DownloadForms gleichzeitig auf haben kann. Ich dachte, man kann das so lösen:

Delphi-Quellcode:
.
.
.
var
  Fenster: TDownloadForm;
begin
  Fenster := TDownloadForm.Create(MainForm);
  Fenster.StartDownload(URL);
end;
In der Prozedur Fenster.StartDownload steht folgended:
Delphi-Quellcode:
var
  DownloadingFileName: String;
  DownloadingFilePath: String;
begin
  DownloadingFileName := GetFileNameOfURL(URL);
  DownloadingFilePath := GetPathOfDataURL(URL);
  FileNameLabel.Caption := DownloadingFileName;
  OrtLabel.Caption := DownloadingFilePath;
  Save.FileName := DownloadingFileName;
  URLOfFile := URL;
  DownloadDataForm.Show;
end;
Wenn ich das DownloadForm jetzt klassisch über DownloadForm.StartDownload(URL); aufrufe klappt alles prima!
Rufe ich es aber wie oben beschreiben über meine Fenster Variable auf, klappt außer dem DownloadForm.Show; nichts.
D.h. die Label's z.B. bekommen keine neue Caption usw.

Kann mir evtl. jemand sagen, woran das liegen könnte?

mirage228 23. Jul 2004 16:03

Re: Neues Fenster erstellen
 
Delphi-Quellcode:
var
  DownloadingFileName: String;
  DownloadingFilePath: String;
begin
  DownloadingFileName := GetFileNameOfURL(URL);
  DownloadingFilePath := GetPathOfDataURL(URL);
  FileNameLabel.Caption := DownloadingFileName;
  OrtLabel.Caption := DownloadingFilePath;
  Save.FileName := DownloadingFileName;
  URLOfFile := URL;
  // DownloadDataForm.Show;
  Self.Show; // <-- !!
end;
mfG
mirage228

roderich 23. Jul 2004 16:04

Re: Neues Fenster erstellen
 
ja.

Delphi-Quellcode:
DownloadDataForm.Show;
laß einfach DownloadDataForm. weg oder schreibe Self.

am besten entferne auch gleich die automatisch von Delphi angelegte Variable DownloadDataForm, dann kannst du darauf später nicht mehr reinfallen.

Roderich

roderich 23. Jul 2004 16:06

Re: Neues Fenster erstellen
 
@mirage228
wir sollten heiraten, denken das gleiche :lol:

Roderich

daniel8520 23. Jul 2004 16:12

Re: Neues Fenster erstellen
 
Cool!
EINIGES klappt jetzt schon!
Also die Labels bekommen jetzt die Caption, die sie bekommen sollen.
Wenn ich das problem richtig verstanden hatte, lag es daran, dass ich DownForm hab anzeigen lassen, aber in einer Kopie von DownForm sachen geändert hab.
Nun hab ich ein weiteres Problem:
Meine Download-Routine (URLDownloadToFileURLDownloadToFile) ist ja eine eigene Klasse, in der Routine werden allerdings Dinge in dem DownForm geändert. Nun würde ich denken, dass die deshlab nicht funktioniert, weil ich ja nicht DownForm sehe, sondern nur eine Kopie. aber ich kann in der Routine ja nun schlecht mit Self arbeiten, da es ja eine eigene Klasse ist.
Noch was: Der Download an sich funktioniert nur die Fortschritsanzeige etc. funkt nicht.

Hat jemand eine Idee?

mirage228 23. Jul 2004 16:38

Re: Neues Fenster erstellen
 
Zitat:

Zitat von daniel8520
Cool!
EINIGES klappt jetzt schon!
Also die Labels bekommen jetzt die Caption, die sie bekommen sollen.
Wenn ich das problem richtig verstanden hatte, lag es daran, dass ich DownForm hab anzeigen lassen, aber in einer Kopie von DownForm sachen geändert hab.
Nun hab ich ein weiteres Problem:
Meine Download-Routine (URLDownloadToFileURLDownloadToFile) ist ja eine eigene Klasse, in der Routine werden allerdings Dinge in dem DownForm geändert. Nun würde ich denken, dass die deshlab nicht funktioniert, weil ich ja nicht DownForm sehe, sondern nur eine Kopie. aber ich kann in der Routine ja nun schlecht mit Self arbeiten, da es ja eine eigene Klasse ist.
Noch was: Der Download an sich funktioniert nur die Fortschritsanzeige etc. funkt nicht.

Hat jemand eine Idee?

*schnipp* Ich! ;)

Übergeb der Klasse dann immer die aktuelle Instanz von TDownloadForm.
Du speicherst diese dann immer in einem privaten Feld der Klasse und greifst dann auf diese zu.

mfG
mirage228

daniel8520 23. Jul 2004 16:42

Re: Neues Fenster erstellen
 
Woah!
Sorry aber son profi bin ich dann doch nicht!
Kannst du mal kurz erläutern, wie das dann in etwa aussieht!
Und, was ist denn eine Instanz?

mirage228 23. Jul 2004 16:48

Re: Neues Fenster erstellen
 
Hi,

wenn du diese Klasse ( http://www.delphipraxis.net/internal...downloadtofile ) verwendest, dann könntest du diese folgendermaßen ändern.
  • Füge unter "private" eine variable FForm vom Typ TDownloadForm ein.
  • Erstelle einen "public" Abschnitt in die Klasse.
  • Optional: Füge unter public einen Konstruktor ein, dem du als Parameter eine Variable vom Typ TDownloadForm übergibst, die im Konstruktor-Code in FForm gespeicher wird.
  • Schreibe in den public-Abschnitt folgende Zeile: property Form: TDownloadForm read FForm write FForm

Jetzt musst du im Code alle aufrufe von DownloadForm durch FForm (bzw. Form) ersetzen.

Nun musst du immer das aktuell ausgewählte Form der Klasse übergeben und schon funktionierts ;)

mfG
mirage228

daniel8520 23. Jul 2004 16:59

Re: Neues Fenster erstellen
 
Ähm, ja.

Zwei Sachen noch:
1. Wann muss ich denn FForm nehmen, und wann Form?
2.
Zitat:

Nun musst du immer das aktuell ausgewählte Form der Klasse übergeben und schon funktionierts
hab ich nicht verstanden! Sorry!

Kannst du es mir bitte erklären?

mirage228 23. Jul 2004 17:06

Re: Neues Fenster erstellen
 
Zitat:

Zitat von daniel8520
Ähm, ja.

Zwei Sachen noch:
1. Wann muss ich denn FForm nehmen, und wann Form?
2.
Zitat:

Nun musst du immer das aktuell ausgewählte Form der Klasse übergeben und schon funktionierts
hab ich nicht verstanden! Sorry!

Kannst du es mir bitte erklären?

zu 1) Das ist in diesem Fall eigentlich egal, welches du nimmst. ;)

zu 2) In dem Fall, dass du in der DownloadForm selbst die Klasse erstellst und auch wieder freigibst, musst du einfach cDownStatus := cDownloadStatusCallBack.Create(Self); schreiben.

mfG
mirage228


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 Uhr.
Seite 1 von 2  1 2      

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