Ładny brzuch
Witam. Otoz mam taki kod:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, JvNavigationPane, JvExControls, JvComponent, JvPageList, JvButton, JvComponentBase, ExtCtrls, jpeg, StdCtrls, FileCtrl, ImgList; type TForm1 = class(TForm) miniatury: TScrollBox; Panel1: TPanel; Bzamknij: TButton; katalogi: TDirectoryListBox; napedy: TDriveComboBox; pliki: TFileListBox; Label1: TLabel; procedure BzamknijClick(Sender: TObject); procedure katalogiDblClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure onclick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; iloscplikow:byte; listaminiatur: array [1..1000] of Timage; sciezki:array[1..1000] of String; sciezka:String; i:byte; implementation uses Unit2; {$R *.dfm} procedure TForm1.BzamknijClick(Sender: TObject); begin Close; end; procedure TForm1.onclick(Sender: TObject); begin Form2.Image1.LoadFromFile(); end; procedure TForm1.katalogiDblClick(Sender: TObject); begin if i>0 then for i:=1 to iloscplikow do listaminiatur[i].Destroy; iloscplikow:=pliki.Count; if iloscplikow>0 then begin for i:=1 to iloscplikow do begin listaminiatur[i]:=TImage.Create(self); listaminiatur[i].Parent:=miniatury; listaminiatur[i].Width:=105; listaminiatur[i].Height:=105; listaminiatur[i].Proportional:=true; listaminiatur[i].Stretch:=true; listaminiatur[i].Picture.LoadFromFile(pliki.Items[i-1]); sciezki[i]:=pliki.Items[i-1]; listaminiatur[i].Visible:=true; listaminiatur[i].onclick:=onclick; listaminiatur[i].Tag:=i; if ((i mod 4 <> 0)and (i<4)) or (i = 4)then begin if i>1 then listaminiatur[i].Left:=listaminiatur[i-1].Left+listaminiatur[i-1].Width+20 else listaminiatur[i].Left:=20; listaminiatur[i].Top:=20; end else if i>4 then begin if (i=5) or((i-5) mod 4=0) then begin listaminiatur[i].Left:=20; listaminiatur[i].Top:=listaminiatur[i-1].Top+listaminiatur[i-1].Height+20; end else begin listaminiatur[i].Left:=listaminiatur[i-1].Left+listaminiatur[i-1].Width+20; listaminiatur[i].Top:=listaminiatur[i-1].Top; end; end end; end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; end.
Wszystko dziala, tzn. pobiera mi wszystke pliki jpg z podanego katalogu i wyswietla je "zmniejszone". Problem pojawia sie wtedy gdy chce kliknac na dana miniaturke i wyswietlic ja powiekszona na drugiej formie. Przypisalem zdarzenie onclik do dynamicznie tworzonych komponentow typu TImage ale nie wiem jak mam pobrac z nich sciezke dostepu do kliknietego obrazka tak aby byla ona dostepna w zdarzeniu onclick. Ktos mze pomoc??
I druga sprawa. Czy ktos wie jak programowo zmniejszyc rozmiary (wysokosc i szerokosc) obrazka?? Chodzi o to ze gdy do TImage wczytuje obrazek to jakakolwiek wielkosc mialby TImage to obrazek i tak caly znajduje sie w pamieci mimo iz na formie widac jedynie jego czesc lub jest zmniejszony wlasciwoscia stretch..
1. nie da si pobra cieki bo nie jest nigdzie zapisywana - musisz sam o to dba
2. poczytaj o StretchDraw
jest zapisywana o tutaj:
sciezki[i]:=pliki.Items[i-1];
tylko nie wiem jak sprawdzic ktora miniaturka zostala kliknieta (jej index) zeby potem odwolac sie do konkretnej komorki tablicy sciezki
zapisuj do image.Tag indeks, czyli i ze sciezki[i]
a potem w onclick
(sender as TImage).Tag i masz index
dziala. wielkie dzieki :)
Mozesz sobie w poly Tag TImage zapisac index obrazka ;)
// shit happens, za pozno :-D
Uytkownik krajew4 edytowa ten post 13 lipiec 2007, 09:33
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, JvNavigationPane, JvExControls, JvComponent, JvPageList, JvButton, JvComponentBase, ExtCtrls, jpeg, StdCtrls, FileCtrl, ImgList; type TForm1 = class(TForm) miniatury: TScrollBox; Panel1: TPanel; Bzamknij: TButton; katalogi: TDirectoryListBox; napedy: TDriveComboBox; pliki: TFileListBox; Label1: TLabel; procedure BzamknijClick(Sender: TObject); procedure katalogiDblClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure onclick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; iloscplikow:byte; listaminiatur: array [1..1000] of Timage; sciezki:array[1..1000] of String; sciezka:String; i:byte; implementation uses Unit2; {$R *.dfm} procedure TForm1.BzamknijClick(Sender: TObject); begin Close; end; procedure TForm1.onclick(Sender: TObject); begin Form2.Image1.LoadFromFile(); end; procedure TForm1.katalogiDblClick(Sender: TObject); begin if i>0 then for i:=1 to iloscplikow do listaminiatur[i].Destroy; iloscplikow:=pliki.Count; if iloscplikow>0 then begin for i:=1 to iloscplikow do begin listaminiatur[i]:=TImage.Create(self); listaminiatur[i].Parent:=miniatury; listaminiatur[i].Width:=105; listaminiatur[i].Height:=105; listaminiatur[i].Proportional:=true; listaminiatur[i].Stretch:=true; listaminiatur[i].Picture.LoadFromFile(pliki.Items[i-1]); sciezki[i]:=pliki.Items[i-1]; listaminiatur[i].Visible:=true; listaminiatur[i].onclick:=onclick; listaminiatur[i].Tag:=i; if ((i mod 4 <> 0)and (i<4)) or (i = 4)then begin if i>1 then listaminiatur[i].Left:=listaminiatur[i-1].Left+listaminiatur[i-1].Width+20 else listaminiatur[i].Left:=20; listaminiatur[i].Top:=20; end else if i>4 then begin if (i=5) or((i-5) mod 4=0) then begin listaminiatur[i].Left:=20; listaminiatur[i].Top:=listaminiatur[i-1].Top+listaminiatur[i-1].Height+20; end else begin listaminiatur[i].Left:=listaminiatur[i-1].Left+listaminiatur[i-1].Width+20; listaminiatur[i].Top:=listaminiatur[i-1].Top; end; end end; end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; end.
Wszystko dziala, tzn. pobiera mi wszystke pliki jpg z podanego katalogu i wyswietla je "zmniejszone". Problem pojawia sie wtedy gdy chce kliknac na dana miniaturke i wyswietlic ja powiekszona na drugiej formie. Przypisalem zdarzenie onclik do dynamicznie tworzonych komponentow typu TImage ale nie wiem jak mam pobrac z nich sciezke dostepu do kliknietego obrazka tak aby byla ona dostepna w zdarzeniu onclick. Ktos mze pomoc??
I druga sprawa. Czy ktos wie jak programowo zmniejszyc rozmiary (wysokosc i szerokosc) obrazka?? Chodzi o to ze gdy do TImage wczytuje obrazek to jakakolwiek wielkosc mialby TImage to obrazek i tak caly znajduje sie w pamieci mimo iz na formie widac jedynie jego czesc lub jest zmniejszony wlasciwoscia stretch..
1. nie da si pobra cieki bo nie jest nigdzie zapisywana - musisz sam o to dba
2. poczytaj o StretchDraw
jest zapisywana o tutaj:
sciezki[i]:=pliki.Items[i-1];
tylko nie wiem jak sprawdzic ktora miniaturka zostala kliknieta (jej index) zeby potem odwolac sie do konkretnej komorki tablicy sciezki
zapisuj do image.Tag indeks, czyli i ze sciezki[i]
a potem w onclick
(sender as TImage).Tag i masz index
dziala. wielkie dzieki :)
Mozesz sobie w poly Tag TImage zapisac index obrazka ;)
// shit happens, za pozno :-D
Uytkownik krajew4 edytowa ten post 13 lipiec 2007, 09:33