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

📄 rm_editorpicture.pas

📁 这是一个功能强大
💻 PAS
字号:

{*****************************************}
{                                         }
{         Report Machine v2.0             }
{              Picture editor             }
{                                         }
{*****************************************}

unit RM_EditorPicture;

interface

{$I RM.inc}

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, RM_Const, RM_Class;

type
  TRMPictureEditorForm = class(TRMObjEditorForm)
    btnOK: TButton;
    btnCancel: TButton;
    GroupBox1: TGroupBox;
    btnLoadImage: TButton;
    btnClearImage: TButton;
    btnSaveImage: TButton;
    ScrollBox1: TScrollBox;
    ImagePaintBox: TPaintBox;
    procedure btnClearImageClick(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ImagePaintBoxPaint(Sender: TObject);
    procedure btnLoadImageClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btnSaveImageClick(Sender: TObject);
  private
    { Private declarations }
    FPicture: TPicture;
    FPictureTypes: string;

    procedure Localize;
    procedure SetPicture(Value: TPicture);
  public
    { Public declarations }
    function ShowEditor(View: TRMView): TModalResult; override;
    function ShowbkPicture(page: TRMReportPage): TModalResult;

    property Picture: TPicture read FPicture write SetPicture;
    property PictureTypes: string read FPictureTypes write FPictureTypes;
  end;

implementation

{$R *.DFM}

uses RM_Utils, ClipBrd{$IFDEF OPENPICTUREDLG}, ExtDlgs{$ENDIF};

type
  THackPage = class(TRMReportPage)
  end;

function TRMPictureEditorForm.ShowEditor(View: TRMView): TModalResult;
begin
  FPicture.Assign((View as TRMPictureView).Picture);
  Result := ShowModal;
  if Result = mrOk then
  begin
    RMDesigner.BeforeChange;
    TRMPictureView(View).Picture.Assign(FPicture);
    RMDesigner.AfterChange;
  end;
end;

function TRMPictureEditorForm.ShowbkPicture(page: TRMReportPage): TModalResult;
begin
  FPicture.Assign(THackPage(page).FbkPicture);
  Result := ShowModal;
  if Result = mrOk then
  begin
    RMDesigner.BeforeChange;
    Page.BackPicture := FPicture;
    RMDesigner.AfterChange;
  end;
end;

procedure TRMPictureEditorForm.Localize;
begin
  Font.Name := RMLoadStr(SRMDefaultFontName);
  Font.Size := StrToInt(RMLoadStr(SRMDefaultFontSize));
  Font.Charset := StrToInt(RMLoadStr(SCharset));

  RMSetStrProp(Self, 'Caption', rmRes + 460);
  RMSetStrProp(btnLoadImage, 'Caption', rmRes + 462);
  RMSetStrProp(btnClearImage, 'Caption', rmRes + 463);
  RMSetStrProp(btnSaveImage, 'Caption', rmRes + 465);

  btnOK.Caption := RMLoadStr(SOk);
  btnCancel.Caption := RMLoadStr(SCancel);
end;

procedure TRMPictureEditorForm.SetPicture(Value: TPicture);
begin
  FPicture.Assign(Value);
  ImagePaintBox.Invalidate;
end;

procedure TRMPictureEditorForm.btnClearImageClick(Sender: TObject);
begin
  FPicture.Graphic := nil;
  ImagePaintBox.Invalidate;
end;

procedure TRMPictureEditorForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ((Key = vk_Insert) and (ssShift in Shift)) or
    ((Chr(Key) = 'V') and (ssCtrl in Shift)) then
  begin
    FPicture.Assign(Clipboard);
    ImagePaintBox.Invalidate;
  end;
end;

procedure TRMPictureEditorForm.ImagePaintBoxPaint(Sender: TObject);
var
  DrawRect: TRect;
begin
  with TPaintBox(Sender) do
  begin
    Canvas.Brush.Color := {Self.} Color;
    DrawRect := ClientRect; //Rect(Left, Top, Left + Width, Top + Height);
    if FPicture.Width > 0 then
    begin
      with DrawRect do
      begin
        if (FPicture.Width > Right - Left) or (FPicture.Height > Bottom - Top) then
        begin
          if FPicture.Width > FPicture.Height then
            Bottom := Top + MulDiv(FPicture.Height, Right - Left, FPicture.Width)
          else
            Right := Left + MulDiv(FPicture.Width, Bottom - Top, FPicture.Height);
          Canvas.StretchDraw(DrawRect, FPicture.Graphic);
        end
        else
        begin
          with DrawRect do
          begin
            Canvas.Draw(Left + (Right - Left - FPicture.Width) div 2, Top + (Bottom - Top -
              FPicture.Height) div 2, FPicture.Graphic);
          end;
        end;
      end;
    end
    else
    begin
      with DrawRect, Canvas do
      begin
        TextOut(Left + (Right - Left - TextWidth(RMLoadStr(SNotAssigned))) div 2, Top + (Bottom -
          Top - TextHeight(RMLoadStr(SNotAssigned))) div 2, RMLoadStr(SNotAssigned));
      end;
    end;
  end;
end;

procedure TRMPictureEditorForm.btnLoadImageClick(Sender: TObject);
var
  {$IFDEF OPENPICTUREDLG}
  OpenDlg: TOpenPictureDialog;
  {$ELSE}
  OpenDlg: TOpenDialog;
  {$ENDIF}
begin
  {$IFDEF OPENPICTUREDLG}
  OpenDlg := TOpenPictureDialog.Create(nil);
  {$ELSE}
  OpenDlg := TOpenDialog.Create(nil);
  {$ENDIF}
  try
    OpenDlg.Options := [ofHideReadOnly];
    OpenDlg.Filter := RMLoadStr(SPictFile) + FPictureTypes;
    if OpenDlg.Execute then
    begin
      FPicture.LoadFromFile(OpenDlg.FileName);
      ImagePaintBox.Invalidate;
    end;
  finally
    OpenDlg.Free;
  end;
end;

procedure TRMPictureEditorForm.FormCreate(Sender: TObject);
var
  s, s1: string;
begin
  Localize;
  FPicture := TPicture.Create;

  s := '*.bmp *.ico *.wmf *.emf';
  s1 := '*.bmp;*.ico;*.wmf;*.emf';
  {$IFDEF JPEG}
  s := s + ' *.jpg';
  s1 := s1 + ';*.jpg';
  {$ENDIF}
  {$IFDEF RXGIF}
  s := s + ' *.gif';
  s1 := s1 + ';*.gif';
  {$ENDIF}
  FPictureTypes := ' (' + s + ')|' + s1 + '|' + RMLoadStr(SAllFiles) + '|*.*';
end;

procedure TRMPictureEditorForm.FormDestroy(Sender: TObject);
begin
  FPicture.Free;
end;

procedure TRMPictureEditorForm.btnSaveImageClick(Sender: TObject);
var
  {$IFDEF OPENPICTUREDLG}
  SaveDlg: TSavePictureDialog;
  {$ELSE}
  SaveDlg: TSaveDialog;
  {$ENDIF}
  s, s1: string;
begin
  if FPicture.Graphic = nil then Exit;

  {$IFDEF OPENPICTUREDLG}
  SaveDlg := TSavePictureDialog.Create(nil);
  {$ELSE}
  SaveDlg := TSaveDialog.Create(nil);
  {$ENDIF}
  try
    SaveDlg.Options := [ofHideReadOnly];
    s := '*.bmp *.ico *.wmf *.emf';
    s1 := '*.bmp;*.ico;*.wmf;*.emf';
    {$IFDEF JPEG}
    s := s + ' *.jpg';
    s1 := s1 + ';*.jpg';
    {$ENDIF}
    {$IFDEF RXGIF}
    s := s + ' *.gif';
    s1 := s1 + ';*.gif';
    {$ENDIF}
    SaveDlg.Filter := RMLoadStr(SPictFile) + ' (' + s + ')|' + s1 + '|' + RMLoadStr(SAllFiles) + '|*.*';
    SaveDlg.DefaultExt := GraphicExtension(TGraphicClass(FPicture.Graphic.ClassType));
    SaveDlg.Filter := GraphicFilter(TGraphicClass(FPicture.Graphic.ClassType));
    if SaveDlg.Execute then
    begin
      FPicture.SaveToFile(SaveDlg.FileName);
    end;
  finally
    SaveDlg.Free;
  end;
end;

end.

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -