Wszystko działa prawidłowo w zdarzeniu
OnProgress obiektu
Image, w
TJPEGImage nie działa wogóle. Co do
RedrawNow to
wyszło, gdy obraz jest odrysowywany ta zmienna posiada wartość
true, gdy zakończy się jego odrysowywanie to przyjmuje wartość
false. Jeżeli grafika nie może być odrysowana, to
RedrawNow posiada wartość
false, więc może być użyty do sterowania
ProgressBar. Z
RedrawNow czy bez niego sterowanie
ProgressBar w zdarzeniu
OnProgress obiektu
TJPEGImage nie działa.
Zamiast
RedrawNow można oczywiście użyć argumentu
Stage:
- Kod: Zaznacz cały
//---------------------------------------------------------------------------
void __fastcall TForm1::ImageProgress(TObject *Sender, TProgressStage Stage,
BYTE PercentDone, bool RedrawNow, const TRect &R, const AnsiString Msg)
{
switch(Stage)
{
case psStarting: ProgressBar1->Position = 0; break;
case psRunning: ProgressBar1->Position = PercentDone; break;
case psEnding: ProgressBar1->Position = 100; break;
}
}
//---------------------------------------------------------------------------
Chyba nie uważnie przeczytałeś to co podałeś. TJPEGImage wywołuje TProgressEvent.
Nie wywołuje.
Remy Lebeau ma rację tylko, że Ty nie bierzesz pod uwagę kontekstu wypowiedzi, a tyczy się ona odnośnie pliku
JPG Å‚adowanego do obiektu
Image poprzez
Picture, dlatego cytowane przez ciebie wypowiedź jest poprzedzona:
You are telling TPicture to load a JPG image.
a całość wypowiedzi tyczy się tego kodu:
- Kod: Zaznacz cały
procedure TForm1.Button1Click(Sender: TObject);
// this is TImage StretchDraw (Part 1)
var
Image1: TImage;
begin
Image1 := TImage.Create(self);
Image1.Parent := ScrollBox1;
Image1.AutoSize := true;
Image1.OnProgress := ProgressUpdate;
Image1.Picture.LoadFromFile('TestImg.jpg'); // event works
// Image1.Picture.LoadFromFile('Covpgh.bmp'); // will load, but no event
// end of Part 1
Zauważ, że
OnProgress został podłączony pod obiekt typu
TImage a nie
TJPEGImage, a w przypadku
TImage działa bez zarzutu, ale tylko dla pliku w formacje
JPEG, gdyż pliki
JPEG mogą być wczytywane progresywnie a bitmapy nie dlatego nie działa w odniesieniu do pliku w formacie BMP. Po części wiec masz rację, że klasa
TJPEGImage wywołuje zdarzenie
OnProgress, ale nie jest to zdarzenie tej klasy, lecz zdarzenie odziedziczone po klasie
TGraphics i działa tylko w połączeniu z obiektem
TImage.
It is not supposed to. Most TGraphic-derived classes, including TBitmap, donot implement the OnProgress event to begin with, as they usually don't need it.
Tego fragmentu chyba też nie przeczytałeś.
TJPEGImage dziedziczy po
TGraphics i jak sądzę ta wypowiedź też się tyczy tego typu.
W plikach pomocy do BCB nie ma nic na temat klasy
TJPEGImage.
Jeszcze coś co mi umknęło wcześniej:
i wczytuje pliczek za pomocÄ…:
- Kod: Zaznacz cały
jpg->Assign(plik);
Do wczytywania plików do obiektu klasy
TJPEGImage służy funkcje
LoadFromFile, a nie
Assign. Funkcja
Assign tylko kopiuje jeden obiekt do drugiego.
Kolejna sprawa, to zdarzenie
OnProgress obiektu typu
TImage działa tylko w odniesieniu do wczytywania obrazka, nie jest wogóle wywoływane przy zapisywaniu zawartości
TImage.