cximagelisteditorview.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 536 行 · 第 1/2 页

PAS
536
字号

{********************************************************************}
{                                                                    }
{           Developer Express Visual Component Library               }
{           Express Cross Platform Library classes                   }
{                                                                    }
{           Copyright (c) 2000-2008 Developer Express Inc.           }
{           ALL RIGHTS RESERVED                                      }
{                                                                    }
{   The entire contents of this file is protected by U.S. and        }
{   International Copyright Laws. Unauthorized reproduction,         }
{   reverse-engineering, and distribution of all or any portion of   }
{   the code contained in this file is strictly prohibited and may   }
{   result in severe civil and criminal penalties and will be        }
{   prosecuted to the maximum extent possible under the law.         }
{                                                                    }
{   RESTRICTIONS                                                     }
{                                                                    }
{   THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES            }
{   (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE     }
{   SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS    }
{   LICENSED TO DISTRIBUTE THE EXPRESSCROSSPLATFORMLIBRARY AND ALL   }
{   ACCOMPANYING VCL CONTROLS AS PART OF AN EXECUTABLE PROGRAM       }
{   ONLY.                                                            }
{                                                                    }
{   THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED       }
{   FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE         }
{   COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE        }
{   AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT   }
{   AND PERMISSION FROM DEVELOPER EXPRESS INC.                       }
{                                                                    }
{   CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON        }
{   ADDITIONAL RESTRICTIONS.                                         }
{                                                                    }
{********************************************************************}

unit cxImageListEditorView;

{$I cxVer.inc}

interface

uses
{$IFDEF DELPHI6}
  Variants,
{$ENDIF}
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  StdCtrls, ExtCtrls, ComCtrls, CommCtrl, Menus, ImgList, ToolWin, cxGraphics,
  cxClasses, cxImageListEditor, ActnList, Dialogs, ExtDlgs;

type
  TcxImageListEditorFormInternalState = (eisSelectingTransparentColor);
  TcxImageListEditorFormInternalStates = set of TcxImageListEditorFormInternalState;

  TcxImageListEditorForm = class(TForm)
    btnOK: TButton;
    btnCancel: TButton;
    btnApply: TButton;
    gbSelectedImage: TGroupBox;
    pbPreview: TPaintBox;
    lbTransparentColor: TLabel;
    cbTransparentColor: TComboBox;
    gbImages: TGroupBox;
    lvImages: TListView;
    pnlToolBarSubstrate: TPanel;
    tbCommands: TToolBar;
    tbbAdd: TToolButton;
    tbbDelete: TToolButton;
    tbbClear: TToolButton;
    tbbExport: TToolButton;
    tbbReplace: TToolButton;
    tbbImport: TToolButton;
    pmImageLists: TPopupMenu;
    pmCommands: TPopupMenu;
    miAdd: TMenuItem;
    miReplace: TMenuItem;
    miDelete: TMenuItem;
    miClear: TMenuItem;
    miExport: TMenuItem;
    miImport: TMenuItem;
    lblManifestWarning: TLabel;
    imgWarning: TImage;
    imglSmall: TcxImageList;
    spdSave: TSavePictureDialog;
    actlCommands: TActionList;
    actAdd: TAction;
    actInsert: TAction;
    actReplace: TAction;
    actDelete: TAction;
    actClear: TAction;
    actExport: TAction;
    actImport: TAction;
    actApply: TAction;
    actOK: TAction;
    opdOpen: TOpenPictureDialog;
    cbImagesSize: TComboBox;

    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);

    procedure cbImagesSizeChange(Sender: TObject);
    procedure cbTransparentColorChange(Sender: TObject);
    procedure cbTransparentColorExit(Sender: TObject);

    procedure lvImagesChange(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    procedure lvImagesDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure lvImagesEndDrag(Sender, Target: TObject; X, Y: Integer);
    procedure lvImagesStartDrag(Sender: TObject;
      var DragObject: TDragObject);
    procedure lvImagesKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);

    procedure pbPreviewMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure pbPreviewMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure pbPreviewMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure pbPreviewPaint(Sender: TObject);

    procedure actAddExecute(Sender: TObject);
    procedure actInsertExecute(Sender: TObject);
    procedure actReplaceExecute(Sender: TObject);
    procedure actDeleteExecute(Sender: TObject);
    procedure actClearExecute(Sender: TObject);
    procedure actExportExecute(Sender: TObject);
    procedure actImportExecute(Sender: TObject);
    procedure actApplyExecute(Sender: TObject);
    procedure actOKExecute(Sender: TObject);
  private
    FImageListEditor: TcxImageListEditor;
    FImportList: TStrings;
    FDragImageIndex: Integer;
    FPreviewImageList: TcxImageList;
    FInternalState: TcxImageListEditorFormInternalStates;

    procedure AddColor(const AColor: string);
    function ChangeImagesSize: Boolean;
    procedure DrawFocusedItem(ACanvas: TCanvas; ARect: TRect);
    function GetColorFromCursorPos(X, Y: Integer): TColor;
    function GetFocusedImageIndex: Integer;
    function IsValidImagesSize(ADisplayImagesSizeValue: string; out ASize: TSize): Boolean;
    procedure SetFocusedImageIndex(AValue: Integer);

    procedure AddImages(AAddMode: TcxImageListEditorAddMode);
    procedure ImportImageList(Sender: TObject);
    procedure PopulateImportItems;

    procedure DataChanged(Sender: TObject);

    procedure UpdateActions; reintroduce;
    procedure UpdateControls;
    procedure UpdateImagesSizeIndicator;
    procedure UpdateTransparentColor(AColor: TColor); overload;
    procedure UpdateTransparentColor(X, Y: Integer); overload;
    procedure UpdateTransparentColorIndicator(AColor: TColor);

    property FocusedImageIndex: Integer read GetFocusedImageIndex write SetFocusedImageIndex;
  public
    constructor Create(AImageListEditor: TcxImageListEditor); reintroduce;
    destructor Destroy; override;

    function GetVisualDataControl: TListView;
    procedure SetImportList(AValue: TStrings);
  end;

implementation

{$R *.dfm}

uses
  Types, Math, cxGeometry, cxControls, dxOffice11, cxLibraryConsts;

type
  TcxImageListAccess = class(TcxImageList);

{ TcxImageListEditorForm }

constructor TcxImageListEditorForm.Create(AImageListEditor: TcxImageListEditor);
begin
  inherited Create(nil);
  FImageListEditor := AImageListEditor;
  FImageListEditor.OnChange := DataChanged;

  FPreviewImageList := TcxImageList.Create(Self);

{$IFDEF DELPHI9}
  PopupMode := pmAuto;
{$ENDIF}

  if IsXPManifestEnabled then
  begin
    imgWarning.Visible := True;
    lblManifestWarning.Caption := 'These images may be distorted if used in standard Windows UI controls with XPManifest enabled.';
    lblManifestWarning.Visible := True;
    Width := Width + MulDiv(6{Rows} * 3{Pixel}, Screen.PixelsPerInch, 96);
  end;
end;

destructor TcxImageListEditorForm.Destroy;
begin
  FreeAndNil(FPreviewImageList);
  inherited;
end;

function TcxImageListEditorForm.GetVisualDataControl: TListView;
begin
  Result := lvImages;
end;

procedure TcxImageListEditorForm.SetImportList(AValue: TStrings);
begin
  FImportList := AValue;
  PopulateImportItems;
end;

procedure TcxImageListEditorForm.FormCreate(Sender: TObject);
begin
  lvImages.OnChange := lvImagesChange;

  pbPreview.Cursor := crcxColorPicker;
  GetColorValues(AddColor);
  FDragImageIndex := -1;

  Constraints.MinWidth := Width;
  Constraints.MinHeight := Height;
end;

procedure TcxImageListEditorForm.FormDestroy(Sender: TObject);
begin
  lvImages.OnChange := nil;
end;

procedure TcxImageListEditorForm.cbImagesSizeChange(Sender: TObject);
begin
  if not ChangeImagesSize then
    UpdateImagesSizeIndicator;
end;

procedure TcxImageListEditorForm.cbTransparentColorChange(Sender: TObject);
begin
  if cbTransparentColor.Items.IndexOf(cbTransparentColor.Text) <> -1 then
    UpdateTransparentColor(StringToColor(cbTransparentColor.Text));
end;

procedure TcxImageListEditorForm.cbTransparentColorExit(Sender: TObject);
begin
  UpdateTransparentColor(StringToColor(cbTransparentColor.Text));
end;

procedure TcxImageListEditorForm.lvImagesChange(Sender: TObject;
  Item: TListItem; Change: TItemChange);
begin
  UpdateControls;
end;

procedure TcxImageListEditorForm.lvImagesDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := lvImages.GetItemAt(X, Y) <> nil;
end;

procedure TcxImageListEditorForm.lvImagesEndDrag(Sender, Target: TObject; X,
  Y: Integer);
var
  ATargetItem: TListItem;

⌨️ 快捷键说明

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