JPEG ERROR #53 [DELPHI]

JPEG ERROR #53 [DELPHI]
N9
  • Rejestracja:około 14 lat
  • Ostatnio:prawie 9 lat
  • Postów:125
0

Witam,

mam w listbox'ie 20 rekordów.

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

Kopiuj
 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 ??


programuję w Delphi status: początkujący
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

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

Chyba nie powiesz, że robisz tak:

Kopiuj
 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') 

:|


N9
:( tak.... wiem ale nie ogarnąłem jeszcze tablic
Patryk27
Myślenie początkujących w Delphi mnie zaskakuje. Oświeć mnie, w jaki sposób chciałbyś tutaj użyć tablic. Wystarczy to: obrazek.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'obrazki/'+IntToStr(samochody.ItemIndex)+'.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... #.#

N9
  • Rejestracja:około 14 lat
  • Ostatnio:prawie 9 lat
  • Postów:125
0

OK zrobiłem tak jak napisał Patryk27

Kopiuj
 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)


programuję w Delphi status: początkujący
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 10 godzin
  • Lokalizacja:Tuchów
  • Postów:12171
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:

Kopiuj
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):

Kopiuj
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ć;


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
N9
  • Rejestracja:około 14 lat
  • Ostatnio:prawie 9 lat
  • Postów:125
0

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

Może dam kod...

button odpowiedzialny za ładowanie obrazków:

Kopiuj
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:

Kopiuj
 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


programuję w Delphi status: początkujący
edytowany 2x, ostatnio: norbert95
flowCRANE
Miło to słyszeć, dlatego zaznacz post rozwiązujący problem;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.