BSOne.SFC/EM.Lib/ImageEn_SRC/Demos/DragDrop/MultiView2/umain.pas

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.