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.