Image - wczytanie obrazka, ListBox - scrollbar

0

Mam 2 problemy:

  1. Mam komponent Image i za pomocą OpenPictureDialog ładuje do niego obrazek:
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:
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ć?

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;

0
Image1.Stertch := True 

Niestety nie działa.

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;

0

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

0

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

Image1.Stretch := True;

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

Image1.AutoSize := True;

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

0

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

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...

0

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

0

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

1

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

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

0

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

0

Zamień:

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

Na:

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.

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