W Twoim przypadku stosowanie tych funkcji nie ma
absolutnie żadnego uzasadnienia. Tak się dla Ciebie szczęśliwie składa, ze właśnie pracuję nad aktualizacją
serwisu Cyfrowy
Baron i nad poradą jak pobierać za pomocą funkcji
URLDownloadToFile oraz jak je wyświetlać bezpośrednio z sieci za pomocą funkcji
URLOpenBlockingStream, dlatego podam gotowe rozwiÄ…zanie dla Twojego problemu:
- Kod: Zaznacz cały
#include <urlmon.h>
#pragma comment(lib, "urlmon.lib") // jeżeli włączamy bibliotekę przez menu Project | Add to project, to ta linijka jest zbędna
String FileName = "grafika.jpg";
AnsiString Url = "http://cyfbar.republika.pl//images//img1.jpg";
AnsiString FileResult = "c:\\" + FileName;
URLDownloadToFile(0, Url.c_str(), FileResult.c_str(), 0, 0);
if(FileExists(FileResult)) Image1->Picture->LoadFromFile(FileResult);
Nie bardzo rozumiem czemu zdecydowałeś się tworzyć plik na dysku przed jego pobraniem, funkcja
URLDownloadToFile tego nie wymaga, po pobraniu pliku sama go sobie utworzy.
W poradach o których wspomniałem będzie między innymi jak prezentować proces ściągania za pomocą paska postępu.
Image1->Picture->Free()
Funckja Free nie uwolni obiektu Image od grafiki lecz całkowicie usunie z pamięci obiekt klasy TPicture, co uniemożliwi ponowne wczytanie grafiki do Image, usunięcie obiektu Picture jest oczywiście równoznaczne z usunięciem grafiki, gdyż cały obiekt Picture przestaje istnieć.
Obiekt Picture należy raczej czyścić tak:
- Kod: Zaznacz cały
Image1->Picture = NULL;
Pracuję właśnie nad pewnym programem, który musi czyścić obiekt Image i wiem z doświadczenia, że przypisanie wartości NULL do Picture czyści go z grafiki, ale w pewnych sytuacjach komplikuje sprawę.