unit uMain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, hyieutils, iexBitmaps, hyiedefs, iesettings, imageenview, ievect, ieview, iexLayers, iexRulers, iemview, ImgList; type TMainForm = class(TForm) ImageEnView1: TImageEnView; lbxText: TListBox; Label2: TLabel; Label3: TLabel; lbxShapes: TListBox; ImageList1: TImageList; ImageEnMView1: TImageEnMView; procedure FormShow(Sender: TObject); procedure ImageEnMView1EndDrag(Sender, Target: TObject; X, Y: Integer); procedure ImageEnMView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ImageEnView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure ImageEnView1DragDrop(Sender, Source: TObject; X, Y: Integer); procedure lbxShapesDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); private { Private declarations } public { Public declarations } end; var MainForm: TMainForm; implementation {$R *.DFM} {$R WindowsTheme.res} uses iexCanvasUtils; procedure TMainForm.FormShow(Sender: TObject); const Draw_Shapes: array[0..7] of TIEShape = ( iesEllipse, iesRectangle, iesStar5, iesCloud, iesShootingArrowNW, iesHeart, iesLightningLeft, iesExplosion ); var I: Integer; begin ImageEnView1.LegacyBitmap := False; ImageEnView1.IEBitmap.Allocate( ImageEnView1.ClientWidth, ImageEnView1.ClientHeight ); ImageEnView1.IEBitmap.Fill( clWhite ); ImageEnView1.Update(); // Fill lbxShapes with some shapes lbxShapes.Items.Clear; for I := Low( Draw_Shapes ) to High( Draw_Shapes ) do lbxShapes.Items.Add( IntToStr( ord( Draw_Shapes[ I ]))); // Fill TImageEnMView from a TImageList ImageEnMView1.LockUpdate(); ImageEnMView1.SetModernStyling( False, -1, -1, False ); ImageEnMView1.SetThumbnailSize( ImageList1.Width, ImageList1.Height, True ); ImageEnMView1.GridWidth := 1; // One column ImageEnMView1.Assign( ImageList1 ); ImageEnMView1.SelectedImage := 0; ImageEnMView1.UnlockUpdate(); end; procedure TMainForm.ImageEnMView1EndDrag(Sender, Target: TObject; X, Y: Integer); begin ImageEnMView1.IEEndDrag; ImageEnMView1.MouseInteract := [mmiSelect]; end; procedure TMainForm.ImageEnMView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssLeft in Shift then begin ImageEnMView1.MouseInteract := []; ImageEnMView1.IEBeginDrag( False, -1 ); end; end; procedure TMainForm.ImageEnView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin if ( Source is TListBox ) or ( Source is TImageEnMView ) then Accept := True; end; procedure TMainForm.ImageEnView1DragDrop(Sender, Source: TObject; X, Y: Integer); var bmp: TIEBitmap; idx: Integer; layerShape: TIEShape; layerText: string; begin If TControl( Source ).Name = lbxText.Name then begin layerText := TListBox( Source ).Items[ TListBox( Source ).ItemIndex ]; if layerText <> '' then begin ImageEnView1.LayersAdd( ielkText ); ImageEnView1.CurrentLayer.PosX := X; ImageEnView1.CurrentLayer.PosY := Y; if pos( 'BIG ', Uppercase( layerText )) > 0 then TIETextLayer( ImageEnView1.CurrentLayer ).Font.Size := 28 else TIETextLayer( ImageEnView1.CurrentLayer ).Font.Size := 14; if pos( 'GREEN ', Uppercase( layerText ))> 0 then TIETextLayer( ImageEnView1.CurrentLayer ).Font.Color := clGreen; TIETextLayer( ImageEnView1.CurrentLayer ).Text := layerText; TIETextLayer( ImageEnView1.CurrentLayer ).SizeToText(); end; end else If TControl( Source ).Name = lbxShapes.Name then begin layerShape := TIEShape( StrToInt( TListBox( Source ).Items[ TListBox( Source ).ItemIndex ])); ImageEnView1.LayersAdd( layerShape ); ImageEnView1.CurrentLayer.PosX := X; ImageEnView1.CurrentLayer.PosY := Y; ImageEnView1.CurrentLayer.Width := 150; ImageEnView1.CurrentLayer.Height := 150; TIETextLayer( ImageEnView1.CurrentLayer ).BorderWidth := 10; TIETextLayer( ImageEnView1.CurrentLayer ).BorderColor := RGB2TColor( 128 + random( 128 ), 128 + random( 128 ), 128 + random( 128 )); TIETextLayer( ImageEnView1.CurrentLayer ).FillColor := clNone; end; If TControl( Source )is TImageEnMView then begin idx := TImageEnMView( Source ).SelectedImage; if idx >= 0 then begin bmp := ImageEnMView1.GetTIEBitmap( idx ); ImageEnView1.LayersAdd( bmp ); ImageEnView1.CurrentLayer.PosX := X; ImageEnView1.CurrentLayer.PosY := Y; TImageEnMView( Source ).ReleaseBitmap( idx, False ); end; end; ImageEnView1.Update(); end; procedure TMainForm.lbxShapesDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var aShape: TIEShape; shapeColor: TColor; begin shapeColor := $000909D5; aShape := TIEShape( StrToInt( lbxShapes.Items[ Index ])); IEDrawShapeToComboListBoxItem( TListBox( Control ).Canvas, Rect, Control.Enabled, aShape, shapeColor ); end; end.