![]() |
Download-Programm
Hallo,
ich hab schon gesucht und nur bruchstücke von dem gefunden, was ich suche. Daher meine Problem: Ich möchte ein Programm bauen, dass dateien aus dem Internet runterlädt und auf der Festplatte speichert. Das ganze soll in etwa so funktionieren: Das Programm lädt eine Textdatei aus dem internet. Die Links, welche in der Textdatei stehen werden sollen dann in eine Listbox geladen werden. Nun soll man einzelne Links aus der Listbox auswählen können und über einen button die datei downloaden und speichern können. Zu guter letzt nur noch folgendes. Beim start soll das Programm ein Bild aus dem internet laden und im Formular anzeigen. Das Problem ist nur, dass ich bei einem image keine internet url angeben kann (bzw. nicht so angeben kann wie eine lokale bildadresse) Ich hoffe ihr könnt mir weiterhelfen. MfG Alex |
Re: Download-Programm
Benutze die Indy-Komponenten zum herunterladen des Bildes in ein Verzeichnis Deiner Wahl, und lade dieses dann in Dein Image.
|
Re: Download-Programm
tut mir leid, aber mit indy komponenten kenne ich mich nicht so au und weiß daher nicht wie ich die für das bild benutzen kann.
|
Re: Download-Programm
Naja, irgendwelche Komponenten wirst Du doch auch benutzen, um hinterher irgendwelche Dateien aus dem Internet herunterladen zu können, oder hast Du Dich diesbezüglich noch nicht entschieden?
Ich habe die Indies nicht installiert; daher kann ich Dir leider nicht sagen, welche Komponente das ist. |
Re: Download-Programm
Guten Morgen,
wie wird den das textfile geladen? Zum dem Punkt: ein Image hat keine URL Warum denn das nicht, wenn sie auf einem Webserver liegt hat sie auch eine URL. ![]() Grüße Klaus |
Re: Download-Programm
Zitat:
|
Re: Download-Programm
Richtig erkannt. ich meine bei TImage kann ich nur lokale orte angeben.
Nochmal zu den Komponenten: Habe mich da noch nicht entschieden, da ich nicht weiß, was ich da am bessten nehmen soll. Was würdet ihr mir denn da empfehlen? |
Re: Download-Programm
mit den Indys (9) sollte es so funktionieren.
Unter uses hinzufügen:
Delphi-Quellcode:
dann sollte es doch so gehen.
dBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP
Delphi-Quellcode:
Grüße
procedure TForm1.Button1Click(Sender: TObject);
var MemStream: TMemoryStream; idhttp1 : TidHTTP begin idhttp1 := TidHTTP.Create(nil); MemStream := TMemoryStream.Create; idhttp1.Get('Deine Bilder url',MemStream); MemStream.Position:=0; Image1.Picture.Bitmap.LoadFromStream(MemStream); MemStream.Free; idhttp1.Free end; Klaus |
Re: Download-Programm
Darf ich fragen, was der Grund ist, beim Start ein Bild aus dem www anzuzeigen?
|
Re: Download-Programm
ganz einfach, damit da dann Werbung erscheinen kann.
aber nochaml zu dem Code oben: wenn ich bei uses
Delphi-Quellcode:
einfüge sagt delphi dass er dBaseComponent.dcu nicht findet.
dBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP
Bei den anderen sachen ist es genauso. Wo kann ich das zeug denn runterladen? |
Re: Download-Programm
Mit ein bissel Überlegung und Betrachtung der anderen Einträge in der Uses-Klausel, hättest Du gemerkt, dass es 'IdBaseComponent' lauten muss :zwinker:
Trotzalledem musst Du die Komponenten natürlich erst installieren. Du findest einen Link dorthin, sowie ein Tutorial zu den Komponenten ![]() |
Re: Download-Programm
Ist ja schön und gut, es funktioniert aber trotzdem nicht.
Außerdem sagte ich ja bereits oben Zitat:
Lade mir die Komponenten dann mal runter |
Re: Download-Programm
Zitat:
|
Re: Download-Programm
Zitat:
|
Re: Download-Programm
![]() |
Re: Download-Programm
Zitat:
Delphi-Quellcode:
Funktioniert einwandfrei! Man lernt nie aus - danke :-D
Procedure TForm1.Button2Click(Sender: TObject);
Const sSOURCE: String = 'http://www.delphipraxis.net/templates/DPClassicBlue/images/logo_left.gif'; sTARGET: String = 'C:\Download\Test.gif'; Begin URLDownloadToFile(Nil, PChar(sSOURCE),PChar(sTARGET), 0, Nil); End; |
Re: Download-Programm
Zitat:
muß ich mir auch notieren und wenn ich es brauche auch wiederfinden. Grüße Klaus |
Re: Download-Programm
Zitat:
|
Re: Download-Programm
Zitat:
Also ich habe mich über 'URLDownloadToFile' sehr gefreut :!: |
Re: Download-Programm
Ich hab mir ma die Mühe gemacht eine Funktion mit Downloadgeschwindigkeit zu basteln für größere Dateien.
Habe hier allerdings nur VC installiert, werde alles aber morgen so gut es geht nach Delphi übersetzen. Hat auch den Vorteil, dass das Programm nicht komplett einfriert. Wer grad Lust hat kann mir das Übersetzen ja schonma abnehmen :-D
Code:
Aufruf:
bool DownloadFile(const char *lpszURL, const char *lpszFile)
{ bool result = false; int kbpsCounter = 0; int kbps; DWORD ticks, bytesRead; BYTE buffer[1024]; FILE *hDLFile; HINTERNET hSession, hRequest; /* Session öffnen */ hSession = InternetOpen("AppTitel", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); if (hSession != NULL) { /* URL öffnen */ hRequest = InternetOpenUrl(hSession, lpszURL, NULL, 0, INTERNET_FLAG_RELOAD, 0); if (hRequest != NULL) { /* Download starten Vllt checken ob Datei schon existiert? */ hDLFile = fopen(lpszFile, "wb"); if (hDLFile != NULL) { ticks = GetTickCount(); while (true) { /* Daten auslesen */ if (InternetReadFile(hRequest, buffer, 1024, &bytesRead) == false) { break; } /* kbps jede Sekunde berechnen */ kbpsCounter += bytesRead; if (ticks <= (GetTickCount() - 1000)) { kbps = kbpsCounter / 1024; printf("%d kb/s\n", kbps); //kbps ausgeben kbpsCounter = 0; ticks = GetTickCount(); } /* In Datei schreiben */ if (bytesRead != 0) { fwrite(buffer, bytesRead, 1, hDLFile); } else // Download beendet { result = true; break; } } fclose(hDLFile); } InternetCloseHandle(hRequest); } InternetCloseHandle(hSession); } return result; }
Code:
DownloadFile("http://www.Delphipraxis.net", "index.html");
|
Re: Download-Programm
Soooo. Ungetestet ...
Delphi-Quellcode:
Aufruf is ja klar :wink:
function TForm1.DownloadFile(const URL: String; const FileName: String)
var KbpsCounter: Integer = 0; Kbps: Integer; Ticks, BytesRead: DWORD; Buffer: Array [0..1023] of Byte; DownloadFile: File; hSession, hRequest: HINTERNET; begin Result := False; (* Session öffnen *) hSession := InternetOpen('AppTitel', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); if hSession <> nil then begin (* URL öffnen *) hRequest := InternetOpenUrl(hSession, URL, nil, 0, INTERNET_FLAG_RELOAD, 0); if hRequest <> nil then begin (* Download starten vllt checken ob Datei schon existiert? *) AssignFile(DownloadFile, FileName); try Rewrite(DownloadFile, 1); Ticks := GetTickCount; while True do begin (* Daten auslesen *) if InternetReadFile(hRequest, @Buffer, 1024, BytesRead) = False then Break; (* kbps jede Sekunde berechnen *) Inc(KbpsCounter, BytesRead); if Ticks <= (GetTickCount - 1000) then begin Kbps := KbpsCounter / 1024; // Label1.Caption := IntToStr(Kbps) + ' Kilobyte pro Sekunde'; KbpsCounter := 0; Ticks := GetTickCount; end; (* In Datei schreiben *) if BytesRead <> 0 then BlockWrite(DownloadFile, Buffer, BytesRead); else //Download beendet begin Result := True; Break; end; Application.ProcessMessages; end; finally CloseFile(DownloadFile); CloseInternetHandle(hRequest); end; end; CloseInternetHandle(hSession); end; end; Bitte mal testen und Fehler berichtigen. MFG Rasta Edit: Eine Fortschrittsanzeige wäre sicherlich ein Leichtes, allerdings habe ich beim Versuch die Dateigröße zu ermitteln immer 0 Byte zurück bekommen, also habe ich es erstmal raus genommen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 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