BSOne.SFC/EM.Lib/ImageEn_SRC/Demos/DragDrop/Layers_DragDrop/uMain.pas

161 lines
5.0 KiB
Plaintext

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.