Image - wczytanie obrazka, ListBox - scrollbar

Image - wczytanie obrazka, ListBox - scrollbar
0

Mam 2 problemy:

  1. Mam komponent Image i za pomocą OpenPictureDialog ładuje do niego obrazek:
Kopiuj
procedure TForm2.Button2Click(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then
  begin
    Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
  end;
end;

I teraz pojawia się problem: komponent ma rozmiary 32x32. Jeśli załaduje np. obrazek 128x128 albo jakiś większy to nie wyświetli się. Jak załadowany obrazek automatycznie zmniejszyć do 32x32, tak żeby było go widać?

  1. Mam ListBox. Za pomocą przycisku i OpenDialog ładuje do niego listę plików:
Kopiuj
procedure TForm2.Button5Click(Sender: TObject);
begin
  if OpenDialog1.Execute then ListBox2.Items.Add(sOpenDialog1.FileName);
end;

Dodaje mi całą ścieżkę do pliku na listę. Teraz jak ścieżka jest dosyć długa to nie widać jej całej w ListBoxie. Jak zrobić scrollbar poziomy, żeby można było przesunąć i zobaczyć?

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12171
0

#Image1.Stertch := True - dzięki temu rozmiar obrazka będzie zawsze dopasowany do rozmiaru komponentu (ale jak załadujesz czterokrotnie większy obrazek do 32x32 to niewiele na nim będziesz widział);
#ListBox - Horizontal Scrollbar - przyda Ci się znajmość podstaw klasy TCanvas;


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
0
Kopiuj
Image1.Stertch := True 

Niestety nie działa.

madmike
  • Rejestracja:prawie 20 lat
  • Ostatnio:ponad 5 lat
0

cpp009 - bo nie wierzy się na słowo :D
Furious Programming zrobił literówkę, Ty beznamiętnie przepisałeś - powinno być Image1.Stretch := True;


flowCRANE
Fakt, literówka... :P Swoją drogą korzystając z "Code Completion" powinien zauważyć, że takiej właściwości nie ma, ale pewnie nie korzystał;
0

Przecież wiem, że zrobił literówkę, poprawiłem to wcześniej i nadal nic. :)

xeo545x39
I jak wgl się nie wyświetla?
0

Wybieram obrazek 128x128 do pola 32x32 i po tym:

Kopiuj
Image1.Stretch := True;

Obrazka dalej nie widać w polu Image (jakby wystawał poza).
Daję do tego:

Kopiuj
Image1.AutoSize := True;

Kawałek obrazka wystaje, jednak widać, że nie jest pojmniejszony.

flowCRANE
"AutoSize" dostosowuje rozmiar komponentu do grafiki, nie na odwrót;
Szarp
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:48
0

Od razu daj true dla Image1 Stretch w properties'ach lub ustaw Stretch na true zanim wczytasz jakiś obrazek.


Moonless Sky
Becoming the Getsuga itself.
edytowany 2x, ostatnio: Szarp
0

Nadal nie pomogło.

Image1 ma rozmiar 32x32 i domyślnie ma wczytaną ikonę .ico również 32x32. Wczytuje mu .ico o rozmiarach 128x128 i nic...

Szarp
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:48
0

No tak ICO... dla nich Stretch nie działa. Musisz przerysować ikonę do tymczasowej bitmapy.
Następnie bitmapę wyświetlasz w Image1.


Moonless Sky
Becoming the Getsuga itself.
0

Mógłbyś powiedzieć w jaki sposób to zrobić? Newbie jestem totalny, prosiłbym o rady. Dzięki za wyrozumiałość.

Szarp
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:48
1

Tu masz coś lepszego niż zabawa z bitmapą: DrawIconEx.

Kopiuj
var
  icon: TIcon;
begin
  icon := TIcon.Create;

  icon.LoadFromFile('Test.ico');

  DrawIconEx(Image1.Canvas.Handle, 0, 0, icon.Handle, 32, 32, 0,  Image1.Parent.Brush.Handle, DI_NORMAL);

  icon.Free;
end;

Moonless Sky
Becoming the Getsuga itself.
edytowany 2x, ostatnio: Szarp
0

Ogromne dzięki kolego ;)

0

Jednak jest problem... zrobiłem tak jak napisałeś.

Jak wybieram ikonę .ico to przy dodawaniu:

Can only modify an image if it contains a bitmap.

0

Już zrobiłem, jednak dodawana ikona nie jest przezroczysta i ma białe tło, da się to jakoś zmienić?

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Tuchów
  • Postów:12171
0

Wykorzystaj pliki PNG, będziesz miał mniej problemów;


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
Szarp
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:48
0

Zamień:

Kopiuj
DrawIconEx(Image1.Canvas.Handle, 0, 0, icon.Handle, 32, 32, 0, 0, DI_NORMAL);

Na:

Kopiuj
DrawIconEx(Image1.Canvas.Handle, 0, 0, icon.Handle, 32, 32, 0, Image1.Parent.Brush.Handle, DI_NORMAL);

Poprawiłem już to w poprzednim poście.


Moonless Sky
Becoming the Getsuga itself.
edytowany 2x, ostatnio: Szarp

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.