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

📄 mainform.pas

📁 控制扫描仪源码 控制扫描仪源码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, ExtCtrls, Menus, Buttons, StdCtrls, DelphiTwain, ExtDlgs, jpeg,
  clipbrd;

type
  TFormMain = class(TForm)
    Toolbar: TPanel;
    StatusBar1: TStatusBar;
    Menu: TMainMenu;
    Menu1: TMenuItem;
    ListSources: TComboBox;
    Twain: TDelphiTwain;
    ItemExit: TMenuItem;
    Divider4: TMenuItem;
    ItemSave: TMenuItem;
    Divider3: TMenuItem;
    ItemShowInterface: TMenuItem;
    ItemAcquire: TMenuItem;
    ItemSelect: TMenuItem;
    ItemCopy: TMenuItem;
    ItemStatus1: TMenuItem;
    ItemStatus2: TMenuItem;
    Divider5: TMenuItem;
    ItemStatus3: TMenuItem;
    ItemStatus4: TMenuItem;
    ItemStatus5: TMenuItem;
    Divider6: TMenuItem;
    ItemStatus7: TMenuItem;
    ItemStatus8: TMenuItem;
    ItemStatus9: TMenuItem;
    ItemFlipVertical: TMenuItem;
    ItemFlipHorizontal: TMenuItem;
    Menu4: TMenuItem;
    Menu3: TMenuItem;
    Menu2: TMenuItem;
    Divider2: TMenuItem;
    ItemStatus6: TMenuItem;
    Divider7: TMenuItem;
    Transfer1: TMenuItem;
    Transfer2: TMenuItem;
    Transfer3: TMenuItem;
    Label1: TLabel;
    Image1: TImage;
    ContainImage: TScrollBox;
    Image: TImage;
    Bevel1: TBevel;
    Label2: TLabel;
    GoBack: TSpeedButton;
    GoForward: TSpeedButton;
    Current: TLabel;
    SavePic: TSavePictureDialog;
    GoTimer: TTimer;
    {Loads the library in memory}
    procedure ItemStatus1Click(Sender: TObject);
    {Loads the source manager}
    procedure ItemStatus2Click(Sender: TObject);
    {Loads the source}
    procedure ItemStatus3Click(Sender: TObject);
    {Send a command to the source}
    procedure ItemStatus4Click(Sender: TObject);
    {Enable source}
    procedure ItemStatus5Click(Sender: TObject);
    {Disable source}
    procedure ItemStatus6Click(Sender: TObject);
    {Unload source}
    procedure ItemStatus7Click(Sender: TObject);
    {Unload source manager}
    procedure ItemStatus8Click(Sender: TObject);
    {Source being disabled}
    procedure TwainSourceDisable(Sender: TObject; const Index: Integer);
    {Current source being changed}
    procedure ListSourcesChange(Sender: TObject);
    procedure ItemStatus9Click(Sender: TObject);
    {Changing file mode}
    procedure Transfer1Click(Sender: TObject);
    {Checking use interface}
    procedure ItemShowInterfaceClick(Sender: TObject);
    {Allow user to select the source}
    procedure ItemSelectClick(Sender: TObject);
    {Acquire source}
    procedure ItemAcquireClick(Sender: TObject);
    {Image acquired using memory and handle transferences}
    procedure TwainTwainAcquire(Sender: TObject; const Index: Integer;
      Image: TBitmap; var Cancel: Boolean);
    {Image acquired file transferences}
    procedure TwainSourceFileTransfer(Sender: TObject;
      const Index: Integer; Filename: TW_STR255; Format: TTwainFormat;
      var Cancel: Boolean);
    {Previous image}
    procedure GoBackClick(Sender: TObject);
    {Next image}
    procedure GoForwardClick(Sender: TObject);
    {Flip the current image vertically}
    procedure ItemFlipVerticalClick(Sender: TObject);
    {Flip the current image horizontally}
    procedure ItemFlipHorizontalClick(Sender: TObject);
    {Dragging the image}
    procedure ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    {Click on the image}
    procedure ImageMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    {Being resized}
    procedure ContainImageResize(Sender: TObject);
    {Saving the current image}
    procedure ItemSaveClick(Sender: TObject);
    {User released one of the navigation buttons}
    procedure GoMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    {Navigate between items}
    procedure GoNavigation(Sender: TObject);
    {User pressed one of the navigation buttons}
    procedure GoMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    {Defines the place to save the file}
    procedure TwainSourceSetupFileXfer(Sender: TObject;
      const Index: Integer);
    {Save image to clipboard}
    procedure ItemCopyClick(Sender: TObject);
    {Closing the application}
    procedure ItemExitClick(Sender: TObject);
  public
    {Current loaded source}
    LoadedSource: Integer;
  private
    {Position when the user clicks over the image}
    ClickPos: TPoint;
    {Image list}
    ImageList: TList;
    {Transference mode}
    TransferMode: TTwainTransferMode;
    {Current selected source}
    CurrentSource: Integer;
    {Current image}
    CurrentImage: Integer;
    {Returns the checked item position in the status}
    function CheckedItem: Byte;
    {Used when changing the state to check if it's possible and}
    {to check the new item}
    function ChangeState(CanChange: Boolean; Item: TMenuItem;
      Error: String): Boolean;
    {Clear the list of images}
    procedure ClearImageList;
    {Selects the first item}
    procedure SelectFirst;
    {Adjust the buttons to navigate thru the image}
    procedure AdjustNavigate;
    {Returns the current image, if any}
    function GetCurrent(var Image: TBitmap): Boolean;
  public
    {Form being created}
    constructor Create(AOwner: TComponent); override;
    {Form being destroyed}
    destructor Destroy; override;
  end;

var
  FormMain: TFormMain;

implementation

uses FormSendCommand;

const
  HANDDRAGCURSOR = 3778;

{$R *.DFM}

{Returns the checked item position in the status}
function TFormMain.CheckedItem: Byte;
var
  i: Integer;
begin
  Result := 0;  {Default result}
  FOR i := 0 TO Menu3.Count - 1 DO
    {The item should not be a separator item}
    if (Menu3.Items[i].Caption <> '-') AND
      (Menu3.Items[i].Checked) then
      Result := Menu3.Items[i].Tag;
end;

{Used when changing the state to check if it's possible and}
{to check the new item}
function TFormMain.ChangeState(CanChange: Boolean; Item: TMenuItem;
  Error: String): Boolean;
begin
  Result := CanChange;
  if Result then Item.Checked := TRUE else ShowMessage(Error)
end;

{Loads the library in memory}
procedure TFormMain.ItemStatus1Click(Sender: TObject);
begin
  //Library must be unloaded to be loaded
  if ChangeState(CheckedItem = 9, Sender as TMenuItem,
    'The library must be unloaded to be loaded') then
  begin
    {Try loading the library}
    if not Twain.LoadLibrary then
    begin
      {Library could not be loaded}
      ItemStatus9.Checked := TRUE;
      ShowMessage('Twain library could not be loaded. Check if ' +
        'TWAIN is installed !');
    end {if not Twain.LoadLibrary}
  end {if ChangeState...}
end;

{Loads the source manager}
procedure TFormMain.ItemStatus2Click(Sender: TObject);
var
  i: Integer;
begin
  //Library must be loaded and the source
  if ChangeState(CheckedItem = 1, Sender as TMenuItem,
    'The library must be loaded and no source be loaded') then
  begin
    Twain.SourceManagerLoaded := TRUE;
    {Fill source list}
    ListSources.Items.Clear;
    FOR i := 0 TO Twain.SourceCount - 1 DO
      ListSources.Items.Add(Twain.Source[i].ProductName);
    {Select the first item}
    ListSources.ItemIndex := 0;
    CurrentSource := -1;
  end {if ChangeState...}
end;

{Loads the source}
procedure TFormMain.ItemStatus3Click(Sender: TObject);
begin
  //Source manager must be loaded
  if ChangeState(CheckedItem in [2, 6], Sender as TMenuItem,
    'Source manager must be loaded and no source enabled') then
  begin
    LoadedSource := CurrentSource;
    {Try loading source}
    if not Twain.Source[LoadedSource].LoadSource then
    begin
      {In case the source was not loaded}
      ShowMessage('The source "' + Twain.Source[LoadedSource].ProductName +
        '" could not be loaded');
      ItemStatus2.Checked := TRUE;
    end

  end {if ChangeState..}
end;

{Send a command to the source}
procedure TFormMain.ItemStatus4Click(Sender: TObject);
begin
  //Source must be loaded
  if ChangeState(CheckedItem in [3, 4, 6, 5], Sender as TMenuItem,
    'The source must be loaded') then
    SendCommandForm.ShowModal;
end;

{Enable source}
procedure TFormMain.ItemStatus5Click(Sender: TObject);
begin
  //Source must be loaded
  if ChangeState(CheckedItem in [3, 4, 5, 6], Sender as TMenuItem,
    'The source must be loaded') then
  begin
    Twain.Source[LoadedSource].TransferMode := Self.TransferMode;
    ClearImageList; {Clear list of images}
    Twain.Source[LoadedSource].EnableSource(ItemShowInterface.Checked, TRUE);
  end {if ChangeState...};
end;

{Disable source}
procedure TFormMain.ItemStatus6Click(Sender: TObject);
begin
  //Source must be loaded
  ChangeState(CheckedItem in [3, 4], Sender as TMenuItem,
    'Source must be in loaded state');
end;

{Unload source}
procedure TFormMain.ItemStatus7Click(Sender: TObject);
begin
  //Source must be loaded
  if ChangeState(CheckedItem in [3, 4, 5, 6], Sender as TMenuItem,
    'The source must be loaded') then
    Twain.Source[LoadedSource].Loaded := FALSE;
end;

{Unload source manager}
procedure TFormMain.ItemStatus8Click(Sender: TObject);
begin
  //Source must be loaded
  if ChangeState(CheckedItem in [2, 7], Sender as TMenuItem,
    'The source must be unloaded and source manager loaded') then
  begin
    {Unload source}
    Twain.SourceManagerLoaded := FALSE;
    {Clears source list}
    ListSources.Items.Clear;
  end
end;

{Unload source}
procedure TFormMain.ItemStatus9Click(Sender: TObject);
begin
  //Source must be loaded
  if ChangeState(CheckedItem in [1, 8], Sender as TMenuItem,
    'The source must be loaded and source manager unloaded') then
    Twain.LibraryLoaded := FALSE;
end;

{Form being created}
constructor TFormMain.Create(AOwner: TComponent);
begin
  {Call inherited}
  inherited Create(AOwner);
  {Create object}
  ImageList := TList.Create;
  {Avoid flickering by using double-buffering}
  ContainImage.DoubleBuffered := TRUE;
  ToolBar.DoubleBuffered := TRUE;
  {Select first source}
  TransferMode := ttmMemory;
  CurrentSource := -1;
  LoadedSource := CurrentSource;

⌨️ 快捷键说明

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