151 lines
4.1 KiB
Plaintext
151 lines
4.1 KiB
Plaintext
unit umain;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, imageenview,
|
|
ievect, ieview, iemview, imageenio, StdCtrls, ExtCtrls, hyieutils, iexBitmaps, hyiedefs, iesettings,
|
|
iexLayers, iexRulers;
|
|
|
|
type
|
|
TMainForm = class(TForm)
|
|
ImageEnMView1: TImageEnMView;
|
|
ImageEnView1: TImageEnView;
|
|
pnlTop: TPanel;
|
|
btnOpen: TButton;
|
|
lblInfo: TLabel;
|
|
procedure btnOpenClick(Sender: TObject);
|
|
procedure FormActivate(Sender: TObject);
|
|
procedure ImageEnMView1AfterEvent(Sender: TObject; Event: TIEAfterEvent);
|
|
procedure ImageEnMView1ImageSelect(Sender: TObject; idx: Integer);
|
|
procedure ImageEnMView1MouseMove(Sender: TObject; Shift: TShiftState;
|
|
X, Y: Integer);
|
|
procedure ImageEnMView1DragOver(Sender, Source: TObject; X, Y: Integer;
|
|
State: TDragState; var Accept: Boolean);
|
|
procedure ImageEnMView1EndDrag(Sender, Target: TObject; X, Y: Integer);
|
|
procedure ImageEnMView1DragDrop(Sender, Source: TObject; X,
|
|
Y: Integer);
|
|
private
|
|
{ Private declarations }
|
|
fDragInsertPos : integer;
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
MainForm: TMainForm;
|
|
|
|
implementation
|
|
|
|
{$R *.DFM}
|
|
{$R WindowsTheme.res}
|
|
|
|
|
|
procedure TMainForm.btnOpenClick(Sender: TObject);
|
|
var
|
|
sFilename: string;
|
|
begin
|
|
sFilename := ImageEnMView1.MIO.ExecuteOpenDialog('','',false,0,'');
|
|
if sFilename <> '' then
|
|
begin
|
|
Caption := sFilename;
|
|
ImageEnMView1.MIO.LoadFromFile( sFilename );
|
|
ImageEnMView1.SelectedImage := 0;
|
|
ImageEnMView1ImageSelect(self, 0);
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.FormActivate(Sender: TObject);
|
|
begin
|
|
ImageEnMView1.SoftShadow.Enabled := true;
|
|
end;
|
|
|
|
// Image selected - Show in our ImageEnVect
|
|
procedure TMainForm.ImageEnMView1ImageSelect(Sender: TObject;
|
|
idx: Integer);
|
|
begin
|
|
// Copy image
|
|
ImageEnMView1.CopyToIEBitmap( idx, ImageEnView1.IEBitmap );
|
|
ImageEnView1.Update();
|
|
end;
|
|
|
|
// Begin drag/drop
|
|
procedure TMainForm.ImageEnMView1MouseMove(Sender: TObject;
|
|
Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
if (ssLeft in Shift) then
|
|
begin
|
|
ImageEnMView1.MouseInteract := [];
|
|
ImageEnMView1.IEBeginDrag(true, -1);
|
|
end;
|
|
end;
|
|
|
|
// Accept drag/drop. Draws a line to signal where to insert images
|
|
procedure TMainForm.ImageEnMView1DragOver(Sender, Source: TObject; X,
|
|
Y: Integer; State: TDragState; var Accept: Boolean);
|
|
begin
|
|
fDragInsertPos := -1;
|
|
if Source = ImageEnMView1 then
|
|
begin
|
|
Accept := True;
|
|
fDragInsertPos := ImageEnMView1.InsertingPoint(X, Y);
|
|
end;
|
|
ImageEnMView1.Paint;
|
|
end;
|
|
|
|
// After paint event draw our insertion position
|
|
procedure TMainForm.ImageEnMView1AfterEvent(Sender: TObject; Event: TIEAfterEvent);
|
|
const
|
|
Pastel_Red = $00662EFA;
|
|
var
|
|
imgX, imgY :integer;
|
|
begin
|
|
if (Event = ieaePaint) and ImageEnMView1.Dragging and (fDragInsertPos > -1) then
|
|
begin
|
|
if fDragInsertPos >= ImageEnMView1.ImageCount then
|
|
begin
|
|
// Position at end of last thumbnail
|
|
imgX := ImageEnMView1.ImageX[ImageEnMView1.ImageCount - 1] - ImageEnMView1.ViewX;
|
|
imgY := ImageEnMView1.ImageY[ImageEnMView1.ImageCount - 1] - ImageEnMView1.ViewY + ImageEnMView1.ThumbHeight - 2;
|
|
end
|
|
else
|
|
begin
|
|
// Position before current thumbnail
|
|
imgX := ImageEnMView1.ImageX[fDragInsertPos] - ImageEnMView1.ViewX;
|
|
imgY := ImageEnMView1.ImageY[fDragInsertPos] - ImageEnMView1.ViewY + 1;
|
|
end;
|
|
|
|
with ImageEnMView1.GetCanvas do
|
|
begin
|
|
Pen.Color := Pastel_Red;
|
|
Pen.Width := 1;
|
|
Pen.Style := psDot;
|
|
MoveTo(ImgX + 10, ImgY);
|
|
LineTo(ImgX + ImageEnMView1.ThumbWidth - 10, ImgY);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
// Complete drag/drop
|
|
procedure TMainForm.ImageEnMView1EndDrag(Sender, Target: TObject; X,
|
|
Y: Integer);
|
|
begin
|
|
ImageEnMView1.IEEndDrag;
|
|
ImageEnMView1.MouseInteract := [mmiSelect];
|
|
ImageEnMView1.Paint;
|
|
end;
|
|
|
|
// Perform drag/drop
|
|
procedure TMainForm.ImageEnMView1DragDrop(Sender, Source: TObject; X,
|
|
Y: Integer);
|
|
var
|
|
im:integer;
|
|
begin
|
|
ImageEnMView1.MultiSelectSortList; // selection order is not important
|
|
im := ImageEnMView1.InsertingPoint(X, Y);
|
|
ImageEnMView1.MoveSelectedImagesTo( im );
|
|
end;
|
|
|
|
end.
|