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 + -
显示快捷键?