📄 main.pas
字号:
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
FileCtrl, StdCtrls, ExtCtrls, Buttons,Jpeg;
const MaxShowBmpNum=6;//最大显示图形个数
type
ShowArrayRecord=Record//自定义图形显示处理数组记录
ShowImage:TImage;
BackPanel:TPanel;
FileName:String[15];
end;
TMainForm = class(TForm)
DriveComboBox1: TDriveComboBox;
FilterComboBox1: TFilterComboBox;
DirectoryListBox1: TDirectoryListBox;
FileListBox1: TFileListBox;
Bevel1: TBevel;
Panel1: TPanel;
SmallImage: TImage;
Panel2: TPanel;
Image1: TImage;
Panel3: TPanel;
Image2: TImage;
Panel4: TPanel;
Image3: TImage;
Panel5: TPanel;
Image4: TImage;
Panel6: TPanel;
Image5: TImage;
procedure CloseBitBtnClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FileListBox1Click(Sender: TObject);
procedure SmallImageClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
JpgImage:TJpegImage;
PictureWidth,PictureHeight,CurrentSelectedNum:Integer;
ShowBarArray:Array[1..MaxShowBmpNum] of ShowArrayRecord;
FileExt:String[4];//存放文件扩展名
procedure InitShowBarArray;//初始化数组
Procedure UnVisibleShowBar;//不可见处理
Procedure ClearShowBarColor;//清除颜色
Procedure SetShowBarColor(Const CurrentSelectedNum:Integer);//设置选定图形颜色
Procedure VisibleShowBar(const EndNum:Integer);//可见处理
procedure UpdateShowBarArray(Var StartNum:Integer;const EndNum:Integer);//更新显示
procedure LoadPicture(const FileName:String;Var DestImage:TImage);//装载图形
procedure BigView(const CurrentClickedNum:Integer);//放大观看
end;
var
MainForm: TMainForm;
implementation
uses Bigpas;
{$R *.DFM}
//装载图形
procedure TMainForm.LoadPicture(const FileName:String;Var DestImage:TImage);
begin
FileExt:=AnsiLowerCase(ExtractFileExt(FileName));//获取扩展名,并小写化
if (FileExt='.bmp') or (FileExt='.ico') then//是bmp和icon
begin
DestImage.Picture.LoadFromFile(FileName);
PictureWidth:=DestImage.Picture.Width;
PictureHeight:=DestImage.Picture.Height;
end
else
if FileExt='.jpg' then//是jpe图形
begin
JpgImage.LoadFromFile(FileName);
DestImage.Picture.Graphic:=jpgImage;
PictureWidth:=DestImage.Picture.Width;
PictureHeight:=DestImage.Picture.Height;
end;
end;
//更新显示
procedure TMainForm.UpdateShowBarArray(Var StartNum:Integer;const EndNum:Integer);
var
i:Integer;
WidthTimes,HeightTimes,SmallTimes:Real;
begin
i:=1;
if StartNum<=EndNum-1 then
begin
while StartNum<EndNum do
begin
{Read Now show Line}
ShowBarArray[i].FileName:=FileListBox1.Items[StartNum];
LoadPicture(DirectoryListBox1.Directory+'\'+ShowBarArray[i].FileName,ShowBarArray[i].ShowImage);
//按比例制作缩略图,并调整显示的位置
WidthTimes:=PictureWidth/80;
HeightTimes:=PictureHeight/60;
if WidthTimes>=HeightTimes then
SmallTimes:=WidthTimes
else
SmallTimes:=HeightTimes;
ShowBarArray[i].ShowImage.Width:=Round(PictureWidth/SmallTimes);
ShowBarArray[i].ShowImage.Height:=Round(PictureHeight/SmallTimes);
ShowBarArray[i].ShowImage.Left:=(ShowBarArray[i].BackPanel.Width-ShowBarArray[i].ShowImage.Width) div 2;
ShowBarArray[i].ShowImage.Top:=(ShowBarArray[i].BackPanel.Height-ShowBarArray[i].ShowImage.Height) div 2;
Inc(i);
Inc(StartNum);
end;
end;
end;
//不可见处理
Procedure TMainForm.UnVisibleShowBar;
var
i:Integer;
begin
for i:=1 to MaxShowBmpNum do
begin
ShowBarArray[i].BackPanel.Visible:=False;
end;
end;
//初始化数组函数
procedure TMainForm.InitShowBarArray;
var
i:Integer;
begin
ShowBarArray[1].ShowImage:=SmallImage;
ShowBarArray[1].BackPanel:=Panel1;
ShowBarArray[2].ShowImage:=Image1;
ShowBarArray[2].BackPanel:=Panel2;
ShowBarArray[3].ShowImage:=Image2;
ShowBarArray[3].BackPanel:=Panel3;
ShowBarArray[4].ShowImage:=Image3;
ShowBarArray[4].BackPanel:=Panel4;
ShowBarArray[5].ShowImage:=Image4;
ShowBarArray[5].BackPanel:=Panel5;
ShowBarArray[6].ShowImage:=Image5;
ShowBarArray[6].BackPanel:=Panel6;
for i:=1 to MaxShowBmpNum do
begin
ShowBarArray[i].BackPanel.Caption:='';
end;
end;
//清选中颜色
Procedure TMainForm.ClearShowBarColor;
var i:Integer;
begin
for i:=1 to MaxShowBmpNum do
begin
ShowBarArray[i].BackPanel.Color:=clBtnFace;
end;
end;
{设置选中图形颜色}
Procedure TMainForm.SetShowBarColor(Const CurrentSelectedNum:Integer);
begin
ShowBarArray[CurrentSelectedNum].BackPanel.Color:=clFuchsia;
end;
{可见图形}
Procedure TMainForm.VisibleShowBar(const EndNum:Integer);
var
i:Integer;
begin
for i:=1 to EndNum do
begin
ShowBarArray[i].BackPanel.Visible:=True;
end;
end;
procedure TMainForm.CloseBitBtnClick(Sender: TObject);
begin
Close;
end;
//放大观看
procedure TMainForm.BigView(const CurrentClickedNum:Integer);
var
IsJpegOrIconFlag:Boolean;
begin
with BigForm do
begin
IsJpegOrIconFlag:=False;
FileExt:=AnsiLowerCase(ExtractFileExt(ShowBarArray[CurrentClickedNum].FileName));
PictureWidth:=ShowBarArray[CurrentClickedNum].ShowImage.Picture.Width;
PictureHeight:=ShowBarArray[CurrentClickedNum].ShowImage.Picture.Height;
if (FileExt='.jpg') or (FileExt='.ico') then
IsJpegOrIconFlag:=True;
//放大处理,调整放大图,使之对中显示
BigImage.Picture:=ShowBarArray[CurrentClickedNum].ShowImage.Picture; //图形
BigImage.Width:=PictureWidth;//设置宽高
BigImage.Height:=PictureHeight;
if (PictureHeight>BigForm.ClientHeight) and (PictureWidth>BigForm.ClientWidth) then
begin//图形宽高大于窗体时
BigImage.Top:=0;
BigImage.Left:=0;
end
else
if PictureHeight>BigForm.ClientHeight then
begin//图形高大于窗体高时
BigImage.Top:=0;
BigImage.Left:=(BigForm.ClientWidth-PictureWidth) div 2;
end
else
if PictureWidth>BigForm.ClientWidth then
begin//图形宽大于窗体宽时
BigImage.Top:=(BigForm.ClientHeight-PictureHeight) div 2;
BigImage.Left:=0;
end
else
begin//图形宽高小于等到于窗体宽高时
BigImage.Top:=(BigForm.ClientHeight-PictureHeight) div 2;
BigImage.Left:=(BigForm.ClientWidth-PictureWidth) div 2;
end;
Color:=clBlack;//设置窗体颜色为黑色
Caption:=DirectoryListBox1.Directory+'\'+ShowBarArray[CurrentClickedNum].FileName;//显示文件名
if Not IsJpegOrIconFlag then//是BMP图形时,将BigForm的BigImage画黑。
begin
BigImage.Canvas.brush.color:=clBlack;
BigImage.Canvas.FillRect(Rect(0,0,BigImage.width,BigImage.height));
AllowShowFlag:=True;
end;
Show;//调用大图显示窗体
end;
end;
procedure TMainForm.FormCreate(Sender: TObject);//创建窗体
begin
JpgImage:=TJpegImage.Create;
PictureWidth:=80;
PictureHeight:=60;
InitShowBarArray;//初始化数组
UnVisibleShowBar;//不可见图形
end;
procedure TMainForm.FormDestroy(Sender: TObject);//窗体消亡
begin
JpgImage.Free;
end;
//选取文件显示
procedure TMainForm.FileListBox1Click(Sender: TObject);
var
StartShowNum,EndShowNum:Integer;
begin
if FileListBox1.Items.Count<>0 then
begin
UnVisibleShowBar;//不可见图形
ClearShowBarColor;//清颜色
StartShowNum:=FileListBox1.ItemIndex;//从当前文件开始显示
if FileListBox1.ItemIndex+MaxShowBmpNum<=FileListBox1.Items.Count-1 then
EndShowNum:=FileListBox1.ItemIndex+MaxShowBmpNum//小于最大数
else
EndShowNum:=FileListBox1.Items.Count;//取最后一个
CurrentSelectedNum:=1;//选中第一个变色
SetShowBarColor(CurrentSelectedNum);
UpdateShowBarArray(StartShowNum,EndShowNum);//开始更新显示
VisibleShowBar(EndShowNum-FileListBox1.ItemIndex);//可见图形
end;
end;
//选中图形显示,所有Image共用事件
procedure TMainForm.SmallImageClick(Sender: TObject);
var
i:Integer;
begin
i:=1;
CurrentSelectedNum:=1;
{which Image is Clicked ?}
while i<=MaxShowBmpNum do
begin
if ShowBarArray[i].ShowImage=(Sender As TImage) then
begin
CurrentSelectedNum:=i;
i:=i+MaxShowBmpNum;
end
else
i:=i+1;
end;
ClearShowBarColor;//清显示颜色
SetShowBarColor(CurrentSelectedNum);//设置选中图形颜色
BigView(CurrentSelectedNum);//大图观看
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -