📄 extdlgs.pas
字号:
{*******************************************************}
{ }
{ Borland Delphi Visual Component Library }
{ }
{ Copyright (c) 1995-2001 Borland Software Corporation }
{ }
{*******************************************************}
unit ExtDlgs;
{$R-,H+,X+}
interface
uses Messages, Windows, SysUtils, Classes, Controls, StdCtrls, Graphics,
ExtCtrls, Buttons, Dialogs;
type
{ TOpenPictureDialog }
TOpenPictureDialog = class(TOpenDialog)
private
FPicturePanel: TPanel;
FPictureLabel: TLabel;
FPreviewButton: TSpeedButton;
FPaintPanel: TPanel;
FImageCtrl: TImage;
FSavedFilename: string;
function IsFilterStored: Boolean;
procedure PreviewKeyPress(Sender: TObject; var Key: Char);
protected
procedure PreviewClick(Sender: TObject); virtual;
procedure DoClose; override;
procedure DoSelectionChange; override;
procedure DoShow; override;
property ImageCtrl: TImage read FImageCtrl;
property PictureLabel: TLabel read FPictureLabel;
published
property Filter stored IsFilterStored;
public
constructor Create(AOwner: TComponent); override;
function Execute: Boolean; override;
end;
{ TSavePictureDialog }
TSavePictureDialog = class(TOpenPictureDialog)
public
function Execute: Boolean; override;
end;
implementation
uses Consts, Math, Forms, CommDlg, Dlgs;
type
TSilentPaintPanel = class(TPanel)
protected
procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
end;
procedure TSilentPaintPanel.WMPaint(var Msg: TWMPaint);
begin
try
inherited;
except
Caption := SInvalidImage;
end;
end;
{ TOpenPictureDialog }
{$R ExtDlgs.res}
constructor TOpenPictureDialog.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Filter := GraphicFilter(TGraphic);
FPicturePanel := TPanel.Create(Self);
with FPicturePanel do
begin
Name := 'PicturePanel';
Caption := '';
SetBounds(204, 5, 169, 200);
BevelOuter := bvNone;
BorderWidth := 6;
TabOrder := 1;
FPictureLabel := TLabel.Create(Self);
with FPictureLabel do
begin
Name := 'PictureLabel';
Caption := '';
SetBounds(6, 6, 157, 23);
Align := alTop;
AutoSize := False;
Parent := FPicturePanel;
end;
FPreviewButton := TSpeedButton.Create(Self);
with FPreviewButton do
begin
Name := 'PreviewButton';
SetBounds(77, 1, 23, 22);
Enabled := False;
Glyph.LoadFromResourceName(HInstance, 'PREVIEWGLYPH');
Hint := SPreviewLabel;
ParentShowHint := False;
ShowHint := True;
OnClick := PreviewClick;
Parent := FPicturePanel;
end;
FPaintPanel := TSilentPaintPanel.Create(Self);
with FPaintPanel do
begin
Name := 'PaintPanel';
Caption := '';
SetBounds(6, 29, 157, 145);
Align := alClient;
BevelInner := bvRaised;
BevelOuter := bvLowered;
TabOrder := 0;
FImageCtrl := TImage.Create(Self);
Parent := FPicturePanel;
with FImageCtrl do
begin
Name := 'PaintBox';
Align := alClient;
OnDblClick := PreviewClick;
Parent := FPaintPanel;
Proportional := True;
Stretch := True;
Center := True;
IncrementalDisplay := True;
end;
end;
end;
end;
procedure TOpenPictureDialog.DoSelectionChange;
var
FullName: string;
ValidPicture: Boolean;
function ValidFile(const FileName: string): Boolean;
begin
Result := GetFileAttributes(PChar(FileName)) <> $FFFFFFFF;
end;
begin
FullName := FileName;
if FullName <> FSavedFilename then
begin
FSavedFilename := FullName;
ValidPicture := FileExists(FullName) and ValidFile(FullName);
if ValidPicture then
try
FImageCtrl.Picture.LoadFromFile(FullName);
FPictureLabel.Caption := Format(SPictureDesc,
[FImageCtrl.Picture.Width, FImageCtrl.Picture.Height]);
FPreviewButton.Enabled := True;
FPaintPanel.Caption := '';
except
ValidPicture := False;
end;
if not ValidPicture then
begin
FPictureLabel.Caption := SPictureLabel;
FPreviewButton.Enabled := False;
FImageCtrl.Picture := nil;
FPaintPanel.Caption := srNone;
end;
end;
inherited DoSelectionChange;
end;
procedure TOpenPictureDialog.DoClose;
begin
inherited DoClose;
{ Hide any hint windows left behind }
Application.HideHint;
end;
procedure TOpenPictureDialog.DoShow;
var
PreviewRect, StaticRect: TRect;
begin
{ Set preview area to entire dialog }
GetClientRect(Handle, PreviewRect);
StaticRect := GetStaticRect;
{ Move preview area to right of static area }
PreviewRect.Left := StaticRect.Left + (StaticRect.Right - StaticRect.Left);
Inc(PreviewRect.Top, 4);
FPicturePanel.BoundsRect := PreviewRect;
FPreviewButton.Left := FPaintPanel.BoundsRect.Right - FPreviewButton.Width - 2;
FImageCtrl.Picture := nil;
FSavedFilename := '';
FPaintPanel.Caption := srNone;
FPicturePanel.ParentWindow := Handle;
inherited DoShow;
end;
function TOpenPictureDialog.Execute;
begin
if NewStyleControls and not (ofOldStyleDialog in Options) then
Template := 'DLGTEMPLATE' else
Template := nil;
Result := inherited Execute;
end;
procedure TOpenPictureDialog.PreviewClick(Sender: TObject);
var
PreviewForm: TForm;
Panel: TPanel;
begin
PreviewForm := TForm.Create(Self);
with PreviewForm do
try
Name := 'PreviewForm';
Visible := False;
Caption := SPreviewLabel;
BorderStyle := bsSizeToolWin;
KeyPreview := True;
Position := poScreenCenter;
OnKeyPress := PreviewKeyPress;
Panel := TPanel.Create(PreviewForm);
with Panel do
begin
Name := 'Panel';
Caption := '';
Align := alClient;
BevelOuter := bvNone;
BorderStyle := bsSingle;
BorderWidth := 5;
Color := clWindow;
Parent := PreviewForm;
DoubleBuffered := True;
with TImage.Create(PreviewForm) do
begin
Name := 'Image';
Align := alClient;
Stretch := True;
Proportional := True;
Center := True;
Picture.Assign(FImageCtrl.Picture);
Parent := Panel;
end;
end;
if FImageCtrl.Picture.Width > 0 then
begin
ClientWidth := Min(Monitor.Width * 3 div 4,
FImageCtrl.Picture.Width + (ClientWidth - Panel.ClientWidth)+ 10);
ClientHeight := Min(Monitor.Height * 3 div 4,
FImageCtrl.Picture.Height + (ClientHeight - Panel.ClientHeight) + 10);
end;
ShowModal;
finally
Free;
end;
end;
procedure TOpenPictureDialog.PreviewKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #27 then TForm(Sender).Close;
end;
{ TSavePictureDialog }
function TSavePictureDialog.Execute: Boolean;
begin
if NewStyleControls and not (ofOldStyleDialog in Options) then
Template := 'DLGTEMPLATE' else
Template := nil;
Result := DoExecute(@GetSaveFileName);
end;
function TOpenPictureDialog.IsFilterStored: Boolean;
begin
Result := not (Filter = GraphicFilter(TGraphic));
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -