Dynamiczne tworzenie i usuwanie obiektów

0

Witam,

Chciałem stworzyć jakby przesuwaną galerię w poziomie. Mój form ma szerokość 750, a każdy Image ma po 250. Problem pojawia się gdy chcę dynamicznie tworzyć następne pojawiające się zdjęcie oraz usuwać zdjęcie które jest już nie widoczne. Oczywiście ma to działać w dwie strony w prawo i w lewo.
________ ________ ________
| || || |
<--| Image1 || Image2 || Image3 | -->
|||_______|||

Obiekty Image tworzę dynamicznie:

img:=TImage.Create(self);
img.Width:=250;
img.Height:=250;
img.Left:=img.Left + 250;
img.Top:=0;
img.Stretch:=true;
img.Parent:=self;
img.Visible:=True;
img.Transparent:=true;
img.Name:='Image'+inttostr(i);
img.Picture.LoadFromFile('img_'+inttostr(i)'.jpg');
img.OnMouseDown := MouseDown;
img.OnMouseMove := MouseMove;
img.OnMouseUp := MouseUp;

Jakieś podpowiedzi jak to rozwiązać?

0

Najprostsze rozwiązanie.
Wrzuć na formę 3 Image i zmieniaj tylko ich zawartość, lub je przesuwaj, zmieniając zawartość.

0

No niby tak ale ja przesuwam te Image1, Image2, Image3 za pomocą OnMouseMove:

Timage(FindComponent('Image'+inttostr(i))).Left := Timage(FindComponent('Image'+inttostr(i))).Left + (X - P.X);

więc, podmieniając zawartość tych Image nie wygląda to zbyt płynnie.

0

W ten sposób to na pewno Ci będzie spowalniać, bo za każdym ruchem szukasz min jednej pozycji TImage.

  1. Zastosuj DoubleBuffered := True dla rodzica, na którym przesuwasz TImage
  2. Wczytuj sobie jeden obrazek z przodu i na końcu więcej, czyli nie 3x TImage, a 5 (z czego w momencie przesuwania, będą widoczne 4x).
  3. Zastosuj tablicę z obrazkami TImage i odwołuj się bezpośrednio do nich, a nie przez FindComponent.
0
Opi napisał(a)
  1. Wczytuj sobie jeden obrazek z przodu i na końcu więcej, czyli nie 3x TImage, a 5 (z czego w momencie przesuwania, będą widoczne 4x).

Właśnie o tym samym pomyślałem, ale Opi był szybszy :)

0

Wczytuj sobie jeden obrazek z przodu i na końcu więcej, czyli nie 3x TImage, a 5 (z czego w momencie przesuwania, będą widoczne 4x).

Ja polecę wczytywanie tego w wątku jeżeli zdjęcia są duże

  • Zastosowałbym tablicę z tymi TImage zamiast używać FindComponent bo generalnie RTTI nie lubię i jest wolne.
0

Ok, mam tablicę w której przechowuję TImage, ale nie wiem jaki warunek postawić jeśli ten TImage, który jest najbardziej po lewej stronie zostanie ukryty za formularzem(jego Left jest większy od -250), tak aby przeskoczył na sam koniec i na jego miejsce został wczytany następny obrazek.

0

Ok, mam tablicę w której przechowuję TImage, ale nie wiem jaki warunek postawić jeśli ten TImage, który jest najbardziej po lewej stronie zostanie ukryty za formularzem(jego Left jest większy od -250), tak aby przeskoczył na sam koniec i na jego miejsce został wczytany następny obrazek.

A co za problem Left zmienić? Ja nie widzę.
Oczywiście jeżeli twoje rozwiązanie zakłada że obrazki są w kolejności to musisz dokonać roratacji w tablicy, no ale skoro chcesz coś takiego napisać to to nie powinno być dla ciebie problemem.

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