📄 unitformview.pas
字号:
begin
ShowLargeImageFromStructureStorageFile( SSPImageFileList.GetSSPFileName,
SSPImageFileList.GetNextFileName,Image1);
end;
end;
procedure TFormView.ShowPreImage;
var
ImageFileName:string;
begin
if not FormBrowse.IsReadStructureStorageFileMode then
begin
ImageFileName:=ImageFileList.GetPreFileName;
if IsJpgFile(ImageFileName) then
begin
try
JpgToBmp(ImageFileName,ViewJpg,ViewBmp);
image1.Picture.Bitmap:=ViewBmp;
except
MessageDlg('读取文件:'+ImageFileName+'时发生错误!'+#13
+'该文件不是标准格式的文件,或者该文件已经被损坏!',mtError,[mbYes],0);
if ImageFileList.GetIndex=0 then
ImageFileList.SetIndex(ImageFileList.GetFileCount-1)
else
ImageFileList.SetIndex(ImageFileList.GetIndex-1);
exit;
end;
end
else
try
image1.Picture.LoadFromFile(ImageFileName);
except
MessageDlg('读取文件:'+ImageFileName+'时发生错误!'+#13
+'该文件不是标准格式的文件,或者该文件已经被损坏!',mtError,[mbYes],0);
ImageFileList.SetIndex(ImageFileList.GetIndex+1);
if ImageFileList.GetIndex=0 then
ImageFileList.SetIndex(ImageFileList.GetFileCount-1)
else
ImageFileList.SetIndex(ImageFileList.GetIndex-1);
exit;
end;
end
else
begin
ShowLargeImageFromStructureStorageFile( SSPImageFileList.GetSSPFileName,
SSPImageFileList.GetPreFileName,Image1);
end;
end;
procedure TFormView.ToolButtonPreImageClick(Sender: TObject);
begin
ShowPreImage;
ShowImageFit(true,1);
end;
procedure TFormView.ToolButtonNextImageClick(Sender: TObject);
begin
ShowNextImage;
ShowImageFit(true,1);
end;
procedure TFormView.ToolButtonZoomInClick(Sender: TObject);
begin
MenuZoomINClick(nil);
end;
procedure TFormView.ToolButtonZoomOutClick(Sender: TObject);
begin
MenuZoomOutClick(nil);
end;
procedure TFormView.ToolButtonZoomOriginClick(Sender: TObject);
begin
ZoomI:=9;
ShowImageFit(true,1);
end;
procedure TFormView.ShowHint;
var
FileDateTime:TDateTime;
strFileDateTime:string;
s:string;
// w,h:integer;
begin
if not FormBrowse.IsReadStructureStorageFileMode then
begin
StatusBar1.Panels[0].Text:=inttostr(ImageFileList.GetIndex+1)+'/'+inttostr(ImageFileList.GetFileCount);
FileDateTime:=FileDateToDateTime(fileage(ImageFileList.GetCurFullFileName));
DateTimeToString(strFileDateTime,'yyyy-mm-dd hh:nn:ss',FileDateTime);
StatusBar1.Panels[1].Text:=strFileDateTime;
StatusBar1.Panels[2].Width:=canvas.TextWidth(ImageFileList.GetCurFileName)+20;
StatusBar1.Panels[2].Text:=ImageFileList.GetCurFileName;
s:=inttostr(image1.Picture.Bitmap.Width)+'x'+inttostr(image1.Picture.Bitmap.Height);
StatusBar1.Panels[3].Width:=canvas.TextWidth(s)+20;
StatusBar1.Panels[3].Text:=s;
StatusBar1.Panels[4].Width:=50;
StatusBar1.Panels[4].Text:=inttostr(trunc(zoom[zoomI]*100))+'%';
end
else
begin
StatusBar1.Panels[0].Text:=inttostr(SSPImageFileList.GetIndex+1)+'/'+inttostr(SSPImageFileList.GetFileCount);
StatusBar1.Panels[1].Width:=canvas.TextWidth(SSPImageFileList.GetCurFileName)+20;
StatusBar1.Panels[1].Text:=SSPImageFileList.GetCurFileName;
//注意:用image1.Picture.Width而非image1.Picture.Bitmap.Width
s:=inttostr(image1.Picture.Width)+'x'+inttostr(image1.Picture.Height);
StatusBar1.Panels[2].Width:=canvas.TextWidth(s)+20;
StatusBar1.Panels[2].Text:=s;
StatusBar1.Panels[3].Text:=inttostr(trunc(zoom[zoomI]*100))+'%';
StatusBar1.Panels[4].Width:=0;
end;
//
end;
procedure TFormView.MenuFullScreenClick(Sender: TObject);
begin
self.BorderStyle:=bsNone;
self.Menu:=nil;
ToolBar1.Visible:=false;
StatusBar1.Visible:=false;
ScrollBox1.Align:=alNone;
ScrollBox1.Top:=-2;
ScrollBox1.Left:=-2;
// ScrollBox1.HorzScrollBar.Visible:=false;
// ScrollBox1.VertScrollBar.Visible:=false;
ScrollBox1.Height:=screen.Height+4;
ScrollBox1.Width:=screen.Width+4;
ShowImageFit(true,1);
IsFullScreenMode:=true;
end;
procedure TFormView.ToolButton7Click(Sender: TObject);
begin
MenuFullScreenClick(nil);
end;
procedure TFormView.ShowImageFit(ImageHeight, ImageWidth: integer);
begin
panel1.Visible:=false;
Panel1.Top:=0;
Panel1.Left:=0;
Panel1.Height:=ImageHeight;
Panel1.Width:=ImageWidth;
Image1.AutoSize:=false;
Image1.Stretch:=true;
Image1.Height:=ImageHeight;
image1.Width:=ImageWidth;
Image1.Top:=0;
Image1.Left:=0;
if (Panel1.Height<=ScrollBox1.Height) and (Panel1.Width<=ScrollBox1.Width) then
begin
Panel1.Top:=(ScrollBox1.Height-Panel1.Height) div 2;
Panel1.Left:=(ScrollBox1.Width-Panel1.Width) div 2;
end
else
begin
if Panel1.Height>ScrollBox1.Height then
Panel1.Top:=0
else
Panel1.Top:=(ScrollBox1.Height-Panel1.Height) div 2;
if Panel1.Width>ScrollBox1.Width then
Panel1.Left:=0
else
Panel1.Left:=(ScrollBox1.Width-Panel1.Width) div 2;
end;
panel1.Visible:=true;
ShowHint;
//
end;
procedure TFormView.Slide;
var
ImageFileName:string;
I:Integer;
X0,Y0:integer;
MidX,MidY:integer;
RatioX,RatioY:real;
Bitmap:TBitmap;
Bitmap2:TBitmap;
RndNum:integer;
begin
if FormBrowse.IsReadStructureStorageFileMode then
exit;
Bitmap:=TBitmap.Create;
bitmap.PixelFormat:=pf24bit;
ImageFileName:=ImageFileList.GetCurFullFileName;
if IsJpgFile(ImageFileName) then
begin
JpgToBmp(ImageFileName,ViewJpg,Bitmap);
end
else
Bitmap.LoadFromFile(ImageFileName);
Randomize;
RndNum:=random(4);
RatioX:=Bitmap.Width/Step;
RatioY:=Bitmap.Height/Step;
case RndNum of
0: //从中心到四周
begin
X0:=Bitmap.Width div 2;
Y0:=Bitmap.Height div 2;
for I:=0 to Step do
begin
MidX:=Round(RatioX*I*0.5);
MidY:=Round(RatioY*I*0.5);
BitBlt(image1.Canvas.Handle,X0-MidX,Y0-MidY,Round(RatioX*I),Round(RatioY*I),Bitmap.Canvas.Handle,X0-MidX,Y0-MidY,BLACKNESS );
image1.Repaint;
end;
end;
1: //从左上到右下
begin
for I:=0 to Step do
begin
BitBlt(image1.Canvas.Handle,0,0,Round(RatioX*I*1),Round(RatioY*I*1),Bitmap.Canvas.Handle,0,0,BLACKNESS);
image1.Repaint;
end;
end;
2: //从左到右
begin
X0:=0;
Y0:=0;
for I:=0 to Step do
begin
MidX:=Round(RatioX*I);
MidY:=Round(RatioY*I);
BitBlt(image1.Canvas.Handle,0,0,Round(RatioX*I*1),Height,Bitmap.Canvas.Handle,0,0,BLACKNESS);
image1.Repaint;
end;
end;
3: //从中间到两侧
begin
X0:=Bitmap.Width div 2;
Y0:=0;
for I:=0 to Step do
begin
MidX:=Round(RatioX*I*0.5);
MidY:=Round(RatioY*I);
BitBlt(image1.Canvas.Handle,X0-MidX,0,Round(RatioX*I*0.5),Bitmap.Height,Bitmap.Canvas.Handle,X0-MidX,0,BLACKNESS);
BitBlt(image1.Canvas.Handle,Bitmap.Width div 2,0,Round(RatioX*I*0.5),Bitmap.Height,Bitmap.Canvas.Handle,Bitmap.Width div 2,0,BLACKNESS);
image1.Repaint;
end;
end;
end; //end case
Bitmap.Free;
ImageFileName:=ImageFileList.GetNextFileName;
//image1.Picture.LoadFromFile(ImageFileName);
Bitmap2:=TBitmap.Create;
bitmap2.PixelFormat:=pf24bit;
if IsJpgFile(ImageFileName) then
begin
JpgToBmp(ImageFileName,ViewJpg,bitmap2);
//image1.Picture.Bitmap:=ViewBmp;
end
else
bitmap2.LoadFromFile(ImageFileName);
ShowImageFit(Bitmap2.Height,Bitmap2.Width);
image1.Visible:=false;
image1.Picture:=nil;
image1.Canvas.Brush.Color :=clblack;
image1.Canvas.FillRect(image1.Canvas.ClipRect);
image1.Visible:=true;
RatioX:=Bitmap2.Width/Step;
RatioY:=Bitmap2.Height/Step;
Randomize;
RndNum:=random(4);
case RndNum of
0: //从中心到四周
begin
X0:=Bitmap2.Width div 2;
Y0:=Bitmap2.Height div 2;
for I:=0 to Step do
begin
MidX:=Round(RatioX*I*0.5);
MidY:=Round(RatioY*I*0.5);
BitBlt(image1.Canvas.Handle,X0-MidX,Y0-MidY,Round(RatioX*I),Round(RatioY*I),Bitmap2.Canvas.Handle,X0-MidX,Y0-MidY,SRCCOPY);
image1.Repaint;
end;
end;
1: //从左上到右下
begin
for I:=0 to Step do
begin
BitBlt(image1.Canvas.Handle,0,0,Round(RatioX*I*1),Round(RatioY*I*1),Bitmap2.Canvas.Handle,0,0,SRCCOPY);
image1.Repaint;
end;
end;
2: //从左到右
begin
X0:=0;
Y0:=0;
for I:=0 to Step do
begin
MidX:=Round(RatioX*I);
MidY:=Round(RatioY*I);
BitBlt(image1.Canvas.Handle,0,0,Round(RatioX*I*1),Height,Bitmap2.Canvas.Handle,0,0,SRCCOPY);
image1.Repaint;
end;
end;
3: //从中间到两侧
begin
X0:=Bitmap2.Width div 2;
Y0:=0;
for I:=0 to Step do
begin
MidX:=Round(RatioX*I*0.5);
MidY:=Round(RatioY*I);
BitBlt(image1.Canvas.Handle,X0-MidX,0,Round(RatioX*I*0.5),Bitmap2.Height,Bitmap2.Canvas.Handle,X0-MidX,0,SRCCOPY);
BitBlt(image1.Canvas.Handle,Bitmap2.Width div 2,0,Round(RatioX*I*0.5),Bitmap2.Height,Bitmap2.Canvas.Handle,Bitmap2.Width div 2,0,SRCCOPY);
image1.Repaint;
end;
end;
end; //end case
bitmap2.free;
end;
procedure TFormView.ShowFirstImage;
var
ImageFileName:string;
begin
if (not FormBrowse.IsReadStructureStorageFileMode) then
begin
ImageFileList.SetIndex(0);
ImageFileName:=ImageFileList.GetCurFullFileName;
if IsJpgFile(ImageFileName) then
begin
try
JpgToBmp(ImageFileName,ViewJpg,ViewBmp);
image1.Picture.Bitmap:=ViewBmp;
except
MessageDlg('读取文件:'+ImageFileName+'时发生错误!'+#13
+'该文件不是标准格式的文件,或者该文件已经被损坏!',mtError,[mbYes],0);
if ImageFileList.GetIndex=ImageFileList.GetFileCount-1 then
ImageFileList.SetIndex(0)
else
ImageFileList.SetIndex(ImageFileList.GetIndex+1);
exit;
end;
end
else
try
image1.Picture.LoadFromFile(ImageFileName);
except
MessageDlg('读取文件:'+ImageFileName+'时发生错误!'+#13
+'该文件不是标准格式的文件,或者该文件已经被损坏!',mtError,[mbYes],0);
if ImageFileList.GetIndex=ImageFileList.GetFileCount-1 then
ImageFileList.SetIndex(0)
else
ImageFileList.SetIndex(ImageFileList.GetIndex+1);
exit;
end;
end
else
begin
SSPImageFileList.SetIndex(0);
ShowLargeImageFromStructureStorageFile( SSPImageFileList.GetSSPFileName,
SSPImageFileList.GetCurFileName,Image1);
end;
end;
procedure TFormView.ShowLastImage;
var
ImageFileName:string;
begin
if (not FormBrowse.IsReadStructureStorageFileMode) then
begin
ImageFileList.SetIndex(ImageFileList.GetFileCount-1);
ImageFileName:=ImageFileList.GetCurFullFileName;
if IsJpgFile(ImageFileName) then
begin
try
JpgToBmp(ImageFileName,ViewJpg,ViewBmp);
image1.Picture.Bitmap:=ViewBmp;
except
MessageDlg('读取文件:'+ImageFileName+'时发生错误!'+#13
+'该文件不是标准格式的文件,或者该文件已经被损坏!',mtError,[mbYes],0);
if ImageFileList.GetIndex=ImageFileList.GetFileCount-1 then
ImageFileList.SetIndex(0)
else
ImageFileList.SetIndex(ImageFileList.GetIndex+1);
exit;
end;
end
else
try
image1.Picture.LoadFromFile(ImageFileName);
except
MessageDlg('读取文件:'+ImageFileName+'时发生错误!'+#13
+'该文件不是标准格式的文件,或者该文件已经被损坏!',mtError,[mbYes],0);
if ImageFileList.GetIndex=ImageFileList.GetFileCount-1 then
ImageFileList.SetIndex(0)
else
ImageFileList.SetIndex(ImageFileList.GetIndex+1);
exit;
end;
end
else
begin
SSPImageFileList.SetIndex(SSPImageFileList.GetFileCount-1);
ShowLargeImageFromStructureStorageFile( SSPImageFileList.GetSSPFileName,
SSPImageFileList.GetCurFileName,Image1);
end;
end;
procedure TFormView.MenuFirstPageClick(Sender: TObject);
begin
ShowFirstImage;
ShowImageFit(true,1);
end;
procedure TFormView.MenuLastPageClick(Sender: TObject);
begin
ShowlastImage;
ShowImageFit(true,1);
end;
procedure TFormView.ScrollBox1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if button=mbRight then
begin
if timer1.Enabled then
PopMenuSlideState.Caption:='停止'
else
PopMenuSlideState.Caption:='播放';
if IsFullScreenMode then
PopMenuScreenState.Caption:='返回观察模式'
else
PopMenuScreenState.Caption:='全屏' ;
if FormBrowse.IsReadStructureStorageFileMode then
PopMenuSlide.Enabled:=false;
//Inherit;
end;
//
end;
procedure TFormView.PopMenuSlideStateClick(Sender: TObject);
begin
timer1.Enabled:=not timer1.Enabled;
end;
procedure TFormView.PopMenuScreenStateClick(Sender: TObject);
var
key:word;
begin
if (not IsFullScreenMode) then
MenuFullScreenClick(nil)
else
begin
key:= VK_ESCAPE;
FormKeyDown(self,Key, []);
end;
end;
procedure TFormView.MenuToolClick(Sender: TObject);
begin
if timer1.Enabled then
MenuSlideState.Caption:='停止'
else
MenuSlideState.Caption:='播放';
if FormBrowse.IsReadStructureStorageFileMode then
MenuSlide.Enabled:=false
else
MenuSlide.Enabled:=true;
end;
procedure TFormView.HTML1Click(Sender: TObject);
begin
FormBrowse.MenuCreateHTMLAlbumClick(nil);
end;
procedure TFormView.N13Click(Sender: TObject);
begin
FormBrowse.MenuImageEditorClick(nil);
//
end;
procedure TFormView.N1Click(Sender: TObject);
begin
if FormBrowse.IsReadStructureStorageFileMode then
begin
HTML1.Enabled:=false;
N13.Enabled:=false;
end
else
begin
HTML1.Enabled:=true;
N13.Enabled:=true;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -