Галерея в Delphi
Досить часто до мене звертаються учні, в яких я викладаю інформатику з проханням допомогти написати фотогалерею засобами середовища програмування Delphi. Це й стало поштовхом написати таку собі інструкцію по створенню “примітивної” галереї.
Отож почнемо. Перш за все наведу алгоритм роботи такої галереї:
1. При створенні нової форми відбувається пошук графічних файлів у заданій директорії;
2. Назви усіх графічних файлів для зручності поміщуються в невидиме багаторядкове текстове поле на формі;
3. Перший знайдений файл помішується в головне зображення та preview-1, а наступні 3 відповідно в області preview-2, preview-3, preview-4.
4. Під час зміни розміру форми відбувається позиціювання елементів
Схематичний вигляд форми є наступним:
Тепер перейдемо до коду:
var icludeGalerySting : String;
indexPhoto : Integer;
// Процедура пошуку файлів
Procedure GiveMePhotoFile(folderLocation : String);
var
FindHandle : THandle;
FindData : TWin32FindData;
b: boolean;
s: string;
begin
form14.Memo1.Lines.Clear;
// Встановимо атрибути файлу як звичайні
FindData.dwFileAttributes := FILE_ATTRIBUTE_NORMAL;
// шукаємо перший файл в каталозі заданому змінною folderLocation
FindHandle := FindFirstFile(PChar(folderLocation+’\*.jpg’), FindData);
// Якщо перший файл знайдено продовжуємо пошук далі
if FindHandle <> INVALID_HANDLE_VALUE then
begin
b := true;
while b do
begin
s := FindData.cFileName;
// відкидаємо будьякі точки
if (s<>‘..’) and (s<>‘.’) then
form14.Memo1.Lines.Add(s);
b := FindNextFile(FindHandle, FindData);
end;
end;
end;
// Завантаженя зображень в Image та prewiew
Procedure loadFotoFile(indexPhotoFile : integer);
begin
form14.Image1.Picture.LoadFromFile(icludeGalerySting + ‘\’ + form14.Memo1.Lines[indexPhotoFile]);
form14.Image2.Picture.LoadFromFile(icludeGalerySting + ‘\’ + form14.Memo1.Lines[indexPhotoFile]);
form14.Image3.Picture.LoadFromFile(icludeGalerySting + ‘\’ + form14.Memo1.Lines[indexPhotoFile+1]);
form14.Image4.Picture.LoadFromFile(icludeGalerySting + ‘\’ + form14.Memo1.Lines[indexPhotoFile+2]);
form14.Image5.Picture.LoadFromFile(icludeGalerySting + ‘\’ + form14.Memo1.Lines[indexPhotoFile+3]);
end;
//——— End of my declaration ———//
// Кнопка вихід
procedure TForm14.Button1Click(Sender: TObject);
begin
form14.close;
end;
// При зміні розміру форми
procedure TForm14.FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean);
var fullPreviewWidth : Integer;
begin
form14.Button1.Left := (NewWidth – form14.Button1.Width) div 2;
form14.Image1.Left := (NewWidth – form14.Image1.Width) div 2;
form14.Image1.Top := (form14.Panel1.Height – form14.Panel3.Height – form14.Image1.Height) div 2;
fullPreviewWidth := (8 * 3) + (form14.Image2.Width * 4);
form14.Image2.Left := (NewWidth – fullPreviewWidth) div 2;
form14.Image3.Left := form14.Image2.Left + 8 + form14.Image2.width;
form14.Image4.Left := form14.Image3.Left + 8 + form14.Image2.width;
form14.Image5.Left := form14.Image4.Left + 8 + form14.Image2.width;
form14.prevBtn.Left := 15;
form14.nextBtn.Left := NewWidth – 20 – form14.nextBtn.Width;
end;
// При створенні форми
procedure TForm14.FormCreate(Sender: TObject);
begin
form14.Memo1.Visible := false;
form14.Memo1.Lines.Clear;
icludeGalerySting := getCurrentDir +’\images’;
GiveMePhotoFile(icludeGalerySting);
indexPhoto := 0;
loadFotoFile(indexPhoto);
end;
procedure TForm14.Image2Click(Sender: TObject);
begin
form14.Image1.Picture := form14.Image2.Picture;
end;
procedure TForm14.Image3Click(Sender: TObject);
begin
form14.Image1.Picture := form14.Image3.Picture;
end;
procedure TForm14.Image4Click(Sender: TObject);
begin
form14.Image1.Picture := form14.Image4.Picture;
end;
procedure TForm14.Image5Click(Sender: TObject);
begin
form14.Image1.Picture := form14.Image5.Picture;
end;
// Наступне зображення
procedure TForm14.nextBtnClick(Sender: TObject);
begin
if form14.Memo1.Lines[indexPhoto+4]<>” then
begin
indexPhoto := indexPhoto + 1;
loadFotoFile(indexPhoto);
end;
end;
// Попереднє зображення
procedure TForm14.prevBtnClick(Sender: TObject);
begin
if indexPhoto<>0 then
begin
indexPhoto := indexPhoto – 1;
loadFotoFile(indexPhoto);
end;
end;
