cximagelisteditorview.pas

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

PAS
536
字号
begin
  FImageListEditor.EndUpdate;
  ATargetItem := lvImages.GetItemAt(X, Y);
  if ATargetItem <> nil then
    FImageListEditor.MoveImage(FDragImageIndex, ATargetItem.ImageIndex)
  else
    FocusedImageIndex := FDragImageIndex;
  FDragImageIndex := -1;
end;

procedure TcxImageListEditorForm.lvImagesStartDrag(Sender: TObject;
  var DragObject: TDragObject);
begin
  FImageListEditor.BeginUpdate;
  FDragImageIndex := FImageListEditor.FocusedImageIndex;
end;

procedure TcxImageListEditorForm.lvImagesKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if Key = VK_DELETE then
    FImageListEditor.DeleteSelectedImages;
end;

procedure TcxImageListEditorForm.pbPreviewMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ssLeft in Shift then
  begin
    Include(FInternalState, eisSelectingTransparentColor);  
    UpdateTransparentColor(X, Y);
  end;
end;

procedure TcxImageListEditorForm.pbPreviewMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  if eisSelectingTransparentColor in FInternalState then
    UpdateTransparentColor(X, Y);
end;

procedure TcxImageListEditorForm.pbPreviewMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Exclude(FInternalState, eisSelectingTransparentColor);
end;

procedure TcxImageListEditorForm.pbPreviewPaint(Sender: TObject);
var
  ARect: TRect;
begin
  ARect := pbPreview.ClientRect;
  FrameRectByColor(pbPreview.Canvas.Handle, ARect, clNavy);
  InflateRect(ARect, -1, -1);
  cxDrawHatch(pbPreview.Canvas.Handle, ARect, $BFBFBF, clWhite, 8);
  DrawFocusedItem(pbPreview.Canvas, ARect);
end;

procedure TcxImageListEditorForm.AddColor(const AColor: string);
begin
  cbTransparentColor.Items.Add(AColor);
end;

function TcxImageListEditorForm.ChangeImagesSize: Boolean;
var
  ASize: TSize;
begin
  Result := IsValidImagesSize(cbImagesSize.Text, ASize) and FImageListEditor.ChangeImagesSize(ASize);
end;

procedure TcxImageListEditorForm.DrawFocusedItem(ACanvas: TCanvas; ARect: TRect);
begin
  if FImageListEditor.IsAnyImageSelected then
  begin
    FPreviewImageList.Width := FImageListEditor.ImageWidth;
    FPreviewImageList.Height := FImageListEditor.ImageHeight;    
    TcxImageListAccess(FPreviewImageList).AddImageInfo(FImageListEditor.ImagesInfo[FocusedImageIndex]);
    FPreviewImageList.Draw(ACanvas, ARect, 0);
    FPreviewImageList.Clear;
  end;
end;

function TcxImageListEditorForm.GetColorFromCursorPos(X, Y: Integer): TColor;
begin
  if cxRectPtIn(Rect(0, 0, pbPreview.Width, pbPreview.Height), X, Y) then
  begin
    X := X * FImageListEditor.ImageWidth div pbPreview.Width;
    Y := Y * FImageListEditor.ImageHeight div pbPreview.Height;
    Result := FImageListEditor.ImagesInfo[FocusedImageIndex].Image.Canvas.Pixels[X, Y];
  end
  else
    Result := FImageListEditor.ImagesInfo[FocusedImageIndex].MaskColor;
end;

function TcxImageListEditorForm.GetFocusedImageIndex: Integer;
begin
  Result := FImageListEditor.FocusedImageIndex;
end;

function TcxImageListEditorForm.IsValidImagesSize(ADisplayImagesSizeValue: string; out ASize: TSize): Boolean;
var
  APosition: Integer;
begin
  APosition := Pos('x', ADisplayImagesSizeValue);
  Result := (APosition <> 0) and
    TryStrToInt(Copy(ADisplayImagesSizeValue, 1, APosition - 1), ASize.cx) and
    TryStrToInt(Copy(ADisplayImagesSizeValue, APosition + 1, Length(ADisplayImagesSizeValue) - APosition), ASize.cy);
end;

procedure TcxImageListEditorForm.SetFocusedImageIndex(AValue: Integer);
begin
  FImageListEditor.FocusedImageIndex := AValue;
end;

procedure TcxImageListEditorForm.AddImages(AAddMode: TcxImageListEditorAddMode);
begin
  opdOpen.Filter := cxImageFileFormats.GetFilter;
  if opdOpen.Execute then
    FImageListEditor.AddImages(opdOpen.Files, AAddMode);
end;

procedure TcxImageListEditorForm.ImportImageList(Sender: TObject);
begin
  FImageListEditor.ImportImages(FImportList.Objects[TMenuItem(Sender).Tag] as TCustomImageList);
end;

procedure TcxImageListEditorForm.PopulateImportItems;

  procedure PopulateItem(AParentItem: TMenuItem);
  var
    AMenuItem: TMenuItem;
    I: Integer;
  begin
    AParentItem.Clear;
    for I := 0 to FImportList.Count - 1 do
    begin
      AMenuItem := TMenuItem.Create(Self);
      AMenuItem.OnClick := ImportImageList;
      AMenuItem.Caption := FImportList[I];
      AMenuItem.Tag := I;
      AParentItem.Add(AMenuItem);
    end;
  end;

begin
  PopulateItem(pmImageLists.Items);
  PopulateItem(miImport);
end;

procedure TcxImageListEditorForm.DataChanged(Sender: TObject);
begin
  UpdateControls;
end;

procedure TcxImageListEditorForm.UpdateActions;
begin
  actDelete.Enabled := FImageListEditor.IsAnyImageSelected;
  actClear.Enabled := FImageListEditor.ImagesCount > 0;
  actExport.Enabled := FImageListEditor.ImagesCount > 0;
  actReplace.Enabled := FImageListEditor.IsAnyImageSelected;
  actInsert.Enabled := FImageListEditor.IsAnyImageSelected;
  actApply.Enabled := FImageListEditor.IsChanged;
  actImport.Enabled := (FImportList <> nil) and (FImportList.Count <> 0);
end;

procedure TcxImageListEditorForm.UpdateControls;
var
  AAllowSelectTransparentColor: Boolean;
begin
  if FImageListEditor.IsUpdateLocked then
    Exit;

  AAllowSelectTransparentColor := FImageListEditor.IsAnyImageSelected and
    not IsGlyphAssigned(FImageListEditor.ImagesInfo[FocusedImageIndex].Mask) and
    not FImageListEditor.ImagesInfo[FocusedImageIndex].AlphaUsed;

  //gbSelectedImage
  pbPreview.Enabled := AAllowSelectTransparentColor;
  cbTransparentColor.Enabled := AAllowSelectTransparentColor;
  lbTransparentColor.Enabled := AAllowSelectTransparentColor;

  pbPreview.Invalidate;

  if AAllowSelectTransparentColor then
    UpdateTransparentColorIndicator(FImageListEditor.ImagesInfo[FocusedImageIndex].MaskColor)
  else
    UpdateTransparentColorIndicator(clNone);

  UpdateImagesSizeIndicator;
  UpdateActions;
end;

procedure TcxImageListEditorForm.UpdateImagesSizeIndicator;
var
  AImagesSizeDisplayText: string;
  ASizeIndex: Integer;
begin
  AImagesSizeDisplayText := Format('%dx%d', [FImageListEditor.ImageWidth, FImageListEditor.ImageHeight]);
  ASizeIndex := cbImagesSize.Items.IndexOf(AImagesSizeDisplayText);
  if ASizeIndex <> -1 then
    cbImagesSize.ItemIndex := ASizeIndex
  else
    cbImagesSize.Items.Add(AImagesSizeDisplayText);
end;

procedure TcxImageListEditorForm.UpdateTransparentColor(AColor: TColor);
begin
  FImageListEditor.UpdateTransparentColor(AColor);
end;

procedure TcxImageListEditorForm.UpdateTransparentColor(X, Y: Integer);
begin
  UpdateTransparentColor(GetColorFromCursorPos(X, Y));
end;

procedure TcxImageListEditorForm.UpdateTransparentColorIndicator(AColor: TColor);
begin
  cbTransparentColor.Text := ColorToString(AColor);
end;

procedure TcxImageListEditorForm.actAddExecute(Sender: TObject);
begin
  AddImages(amAdd);
end;

procedure TcxImageListEditorForm.actInsertExecute(Sender: TObject);
begin
  AddImages(amInsert);
end;

procedure TcxImageListEditorForm.actReplaceExecute(Sender: TObject);
begin
  AddImages(amReplace);
end;

procedure TcxImageListEditorForm.actDeleteExecute(Sender: TObject);
begin
  FImageListEditor.DeleteSelectedImages;
end;

procedure TcxImageListEditorForm.actClearExecute(Sender: TObject);
begin
  FImageListEditor.ClearImages;
end;

procedure TcxImageListEditorForm.actExportExecute(Sender: TObject);
begin
  if spdSave.Execute then
    FImageListEditor.ExportImages(spdSave.FileName);
end;

procedure TcxImageListEditorForm.actImportExecute(Sender: TObject);
begin
  // (don't remove this method)
end;

procedure TcxImageListEditorForm.actApplyExecute(Sender: TObject);
begin
  FImageListEditor.ApplyChanges;
end;

procedure TcxImageListEditorForm.actOKExecute(Sender: TObject);
begin
  FImageListEditor.ApplyChanges;
end;

end.

⌨️ 快捷键说明

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