![]() |
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:
In der Prozedur Fenster.StartDownload steht folgended:
.
. . var Fenster: TDownloadForm; begin Fenster := TDownloadForm.Create(MainForm); Fenster.StartDownload(URL); end;
Delphi-Quellcode:
Wenn ich das DownloadForm jetzt klassisch über DownloadForm.StartDownload(URL); aufrufe klappt alles prima!
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; 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? |
Re: Neues Fenster erstellen
Delphi-Quellcode:
mfG
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; mirage228 |
Re: Neues Fenster erstellen
ja.
Delphi-Quellcode:
laß einfach DownloadDataForm. weg oder schreibe Self.
DownloadDataForm.Show;
am besten entferne auch gleich die automatisch von Delphi angelegte Variable DownloadDataForm, dann kannst du darauf später nicht mehr reinfallen. Roderich |
Re: Neues Fenster erstellen
@mirage228
wir sollten heiraten, denken das gleiche :lol: Roderich |
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 ( ![]() Noch was: Der Download an sich funktioniert nur die Fortschritsanzeige etc. funkt nicht. Hat jemand eine Idee? |
Re: Neues Fenster erstellen
Zitat:
Ü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 |
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? |
Re: Neues Fenster erstellen
Hi,
wenn du diese Klasse ( ![]()
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 |
Re: Neues Fenster erstellen
Ähm, ja.
Zwei Sachen noch: 1. Wann muss ich denn FForm nehmen, und wann Form? 2. Zitat:
Kannst du es mir bitte erklären? |
Re: Neues Fenster erstellen
Zitat:
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 |
Re: Neues Fenster erstellen
Aber wo soll ich das denn rein schreiben?
Wenn ich schreibe, bevor ich den Download an sich starte, brauch ich den Paramater (Self) nicht! Und wenn ich dann überall Form bzw. FForm eingesetzt hab, funkt's trotzdem nicht. thx für bissheriges EDIT: Jetzt klappt nichtmal mehr der Download an sich. das progg hängt dann einfach ohne jegliche Meldung. |
Re: Neues Fenster erstellen
Zitat:
Das FForm respresäntiert nämlich die Download-Form, an die die Klasse ihre Werte übergeben soll... mfG mirage228 |
Re: Neues Fenster erstellen
Ich erstelle cDownStatus bzw. beginne mit URLDownloadToFile nach einem Klick auf einen Button.
|
Re: Neues Fenster erstellen
Zitat:
FForm müsste dann = Self sein und die Klasse wird die Werte auf FForm (also auf dem aktuellen Formular) ausgeben. mfG mirage228 |
Re: Neues Fenster erstellen
Ich nehme an, ich soll Self an den Konstruktor von cDownStatusCallback übergeben.
Nur ich kann kein Self an den Konst. von cDownStatusCallback übergeben. Das sind ihm dann zu viel Parameter. Ich kapier's nicht! Bitte helfen!!! |
Re: Neues Fenster erstellen
Zitat:
du musst diese Änderung an der Klasse durchführen: Zitat:
Delphi-Quellcode:
mfG
type
cDownStatusCallback = class(...) private // ... FForm: TDownloadForm; public property Form: TDownloadForm read FForm write FForm; constructor Create(aForm: TDownloadForm); end; // ... constructor cDownStatusCallback.Create(aForm: TDownloadForm); begin FForm := aForm; end; // Und dann halt noch in den Prozeduren FForm einsetzen... mirage228 |
Re: Neues Fenster erstellen
Puh!
Jetzt hast du es geschaft! Ich hab's jetzt endlich hinbekommen! Mich hatte nur dein "optional" vor dem Konstruktor verwirrt! Aber trotzdem ein ganz dickes fettes Danke!!! :dp: and mirage228! |
Re: Neues Fenster erstellen
Zitat:
mfG mirage228 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:50 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