⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 有关多媒体的各个细节
💻 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 + -