JPEG ERROR #53 [DELPHI]

0

Witam,

mam w listbox'ie 20 rekordów.

Tak sprawdzam jaki jest wybrany i pokazuję fotkę w image:

 if samochody.ItemIndex = 0 then
obrazek.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'obrazki/0.jpg') 

i wszystko działa, ale jeśli wybiorę sobie pierwszy rekord pokaże się pierwsze zdjęcie potem drugi rekord, trzeci, czwarty i tak aż do 10 to przy dziesiątym pokazuje mi się właśnie JPEG ERROR #53.

Wiem że to coś z pamięcią ale nie wiem jak to ogarnąć.

pomożecie ??

0

Wiem że to coś z pamięcią ale nie wiem jak to ogarnąć.

A skąd to wiesz.

Zastosuj się do porad tutaj: http://stackoverflow.com/questions/3520186/delphi-jpeg-error-53

0

Chyba nie powiesz, że robisz tak:

 if samochody.ItemIndex = 0 then
obrazek.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'obrazki/0.jpg') 
 if samochody.ItemIndex = 1 then
obrazek.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'obrazki/1.jpg') 
 if samochody.ItemIndex = 2 then
obrazek.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'obrazki/2.jpg') 

:|

0

:( tak.... wiem ale nie ogarnąłem jeszcze tablic

@Patryk27 ,on się zatrzymał w rozwoju zanim nauczył się używać pętli. Widać bo tutaj ciągle pyta w dziale newbie o takie 'zaawansowane' rzeczy... #.#

0

OK zrobiłem tak jak napisał Patryk27

 obrazek.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'obrazki/'+IntToStr(samochody.ItemIndex)+'.jpg');

Ale błąd dalej występuje a to co napisał kolega wyżej nic nie dało ( nic tam nie znalazłem oprócz tego że ktoś rozwiązał problem używając innego komponentu)

0

Teraz znowu nie wykonujesz sprawdzenia poprawności indeksu item'a w kontrolce... Najpierw sprawdź, czy ItemIndex <> -1, a później dopiero wykonaj ładowanie obrazu do komponentu:

var
  sFileName: String;

{...}

if Samochody.ItemIndex <> -1 then
  begin
    sFileName := ExtractFilePath(Application.ExeName) + 'obrazki/' +
                 IntToStr(Samochody.ItemIndex) + '.jpg';
    Obrazek.Picture.LoadFromFile(sFileName);
  end;

Powinno działać; Dodatkowo podczas kliknięcia powinieneś zaznaczyć item pod kursorem; Jeśli istnieje - zaznaczyć go, a jeśli nie - przypisać ItemIndex := -1 (to załatwi za nas wbudowana funkcja kontrolki - ItemAtPos):

procedure TForm1.SamochodyMouseDown(Sender: TObject; Button: TMouseButton;
                                    Shift: TShiftState; X, Y: Integer);
begin
  Samochody.ItemIndex := Samochody.ItemAtPos(Point(X, Y), True);
end;

No i tyle, teraz pozostaje powyższe kody u siebie przetestować;

0

Zrobiłem tak jak napisał kolega wyżej
Niestety problem dalej występuje ;(

Może dam kod...

button odpowiedzialny za ładowanie obrazków:

procedure TForm1.obrazkiClick(Sender: TObject);
var
  sFileName: String;
begin
if Samochody.ItemIndex <> -1 then
  begin
    sFileName := ExtractFilePath(Application.ExeName) + 'obrazki/' +
                 IntToStr(Samochody.ItemIndex) + '.jpg';
    Obrazek.Picture.LoadFromFile(sFileName);
  end;
       end;

I Onmousedown listbox'a:

 procedure TForm1.samochodyMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Samochody.ItemIndex := Samochody.ItemAtPos(Point(X, Y), True);
end;

EDIT:

ROZWIĄZANY: problemem było 1 zdjęcie.. coś było z nim nie tak

1 użytkowników online, w tym zalogowanych: 0, gości: 1