The example Fabrizio is referring to uses masks, but you can also put the user image in layer 0 and the frame in layer 1, then resize the layer with the mouse to fit the user image like this:

111.82 KB
I whipped this up for you:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ComCtrls, StdCtrls, ExtCtrls, ExtDlgs,
ieview, imageenview, imageenio, hyieutils, hyiedefs, imageenproc;
type
TForm1 = class(TForm)
OpenPictureDialog1: TOpenPictureDialog;
SavePictureDialog1: TSavePictureDialog;
Panel1: TPanel;
OpenImage1: TButton;
OpenFrame1: TButton;
Select1: TButton;
Save2: TButton;
Button5: TButton;
ImageEnView1: TImageEnView;
StatusBar1: TStatusBar;
MainMenu1: TMainMenu;
PopupMenu1: TPopupMenu;
File1: TMenuItem;
Exit1: TMenuItem;
N1: TMenuItem;
PrintSetup1: TMenuItem;
Print1: TMenuItem;
N2: TMenuItem;
SaveAs1: TMenuItem;
Save1: TMenuItem;
Open1: TMenuItem;
New1: TMenuItem;
Edit1: TMenuItem;
PasteSpecial1: TMenuItem;
Paste1: TMenuItem;
Copy1: TMenuItem;
Cut1: TMenuItem;
N5: TMenuItem;
Redo1: TMenuItem;
Undo1: TMenuItem;
Select2: TMenuItem;
None1: TMenuItem;
Rectangle1: TMenuItem;
MoveLayer1: TMenuItem;
ResizeLayer1: TMenuItem;
Layer1: TMenuItem;
Layers1: TMenuItem;
Add1: TMenuItem;
Delete1: TMenuItem;
Merge1: TMenuItem;
SaveAs2: TButton;
N3: TMenuItem;
Transparent1: TMenuItem;
procedure Open1Click(Sender: TObject);
procedure SaveAs1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure Undo1Click(Sender: TObject);
procedure Redo1Click(Sender: TObject);
procedure Cut1Click(Sender: TObject);
procedure Copy1Click(Sender: TObject);
procedure Paste1Click(Sender: TObject);
procedure PasteSpecial1Click(Sender: TObject);
procedure None1Click(Sender: TObject);
procedure Rectangle1Click(Sender: TObject);
procedure MoveLayer1Click(Sender: TObject);
procedure ResizeLayer1Click(Sender: TObject);
procedure Layer1Click(Sender: TObject);
procedure Add1Click(Sender: TObject);
procedure Delete1Click(Sender: TObject);
procedure Merge1Click(Sender: TObject);
procedure OpenFrame1Click(Sender: TObject);
procedure Save2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Transparent1Click(Sender: TObject);
private
{ Private declarations }
AFilename: string;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Add1Click(Sender: TObject);
begin
ImageEnView1.LayersAdd;
end;
procedure TForm1.Copy1Click(Sender: TObject);
begin
ImageEnView1.Proc.SelCopyToClip()
end;
procedure TForm1.Cut1Click(Sender: TObject);
begin
ImageEnView1.Proc.SelCutToClip()
end;
procedure TForm1.Delete1Click(Sender: TObject);
begin
ImageEnView1.LayersRemove(ImageEnView1.LayersCurrent);
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
IERegisterFormats;
OpenPictureDialog1.Filter := GraphicFilter(TGraphic);
ImageEnView1.IO.Params.BMP_HandleTransparency := True;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
IEUnregisterFormats;
end;
procedure TForm1.Layer1Click(Sender: TObject);
begin
ImageEnView1.MouseInteract := [miMoveLayers, miResizeLayers];
end;
procedure TForm1.Merge1Click(Sender: TObject);
begin
ImageEnView1.LayersMerge(0, 1);
end;
procedure TForm1.MoveLayer1Click(Sender: TObject);
begin
ImageEnView1.MouseInteract := ImageEnView1.MouseInteract + [miMoveLayers];
end;
procedure TForm1.None1Click(Sender: TObject);
begin
ImageEnView1.MouseInteract := [];
end;
procedure TForm1.Open1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
begin
AFilename := OpenPictureDialog1.FileName;
ImageEnView1.IO.LoadFromFile(AFileName);
Caption := AFilename;
StatusBar1.Panels[0].Text := ExtractFileDir(AFilename);
StatusBar1.Panels[1].Text := ExtractFileName(AFilename);
end;
end;
procedure TForm1.OpenFrame1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
begin
ImageEnView1.LayersAdd;
ImageEnView1.IO.LoadFromFile(OpenPictureDialog1.FileName);
ImageEnView1.IO.Params.BitsPerSample := 8;
ImageEnView1.IO.Params.SamplesPerPixel := 4;
ImageEnView1.Proc.SetTransparentColors(TColor2TRGB(clFuchsia), TColor2TRGB(clFuchsia), 0);
ImageEnView1.IO.PreviewsParams := [ioppDefaultLockPreview];
ImageEnView1.IO.DoPreviews([ppAUTO]);
Layer1.Checked := True;
ImageEnView1.MouseInteract := [miMoveLayers, miResizeLayers];
ImageEnView1.Layers[1].PosX := 0;
ImageEnView1.Layers[1].PosY := 0;
ImageEnView1.Layers[1].Width := ImageEnView1.Layers[0].Width;
ImageEnView1.Layers[1].Height := ImageEnView1.Layers[0].Height;
end;
end;
procedure TForm1.Paste1Click(Sender: TObject);
begin
ImageEnView1.Proc.SelPasteFromClip();
end;
procedure TForm1.PasteSpecial1Click(Sender: TObject);
begin
ImageEnView1.Proc.SelPasteFromClip();
end;
procedure TForm1.Rectangle1Click(Sender: TObject);
begin
ImageEnView1.MouseInteract := [miSelect];
end;
procedure TForm1.Redo1Click(Sender: TObject);
begin
ImageEnView1.Proc.Redo();
ImageEnView1.Proc.ClearRedo;
end;
procedure TForm1.ResizeLayer1Click(Sender: TObject);
begin
ImageEnView1.MouseInteract := ImageEnView1.MouseInteract + [miResizeLayers];
end;
procedure TForm1.Save2Click(Sender: TObject);
begin
if FileExists(AFilename) then
begin
ImageEnView1.IO.PreviewsParams := [ioppDefaultLockPreview];
if ImageEnView1.IO.DoPreviews([ppAUTO]) then
ImageEnView1.IO.SaveToFile(AFilename);
end;
end;
procedure TForm1.SaveAs1Click(Sender: TObject);
begin
if SavePictureDialog1.Execute then
begin
ImageEnView1.IO.SaveToFile(SavePictureDialog1.FileName);
if FileExists(SavePictureDialog1.FileName) then
begin
ImageEnView1.IO.PreviewsParams := [ioppDefaultLockPreview];
if ImageEnView1.IO.DoPreviews([ppAUTO]) then
begin
AFilename := SavePictureDialog1.FileName;
Caption := AFilename;
StatusBar1.Panels[0].Text := ExtractFileDir(AFilename);
StatusBar1.Panels[1].Text := ExtractFileName(AFilename);
end;
end;
end;
end;
procedure TForm1.Transparent1Click(Sender: TObject);
begin
ImageEnView1.IO.Params.BitsPerSample := 8;
ImageEnView1.IO.Params.SamplesPerPixel := 4;
ImageEnView1.Proc.SetTransparentColors(TColor2TRGB(clFuchsia), TColor2TRGB(clFuchsia), 0);
ImageEnView1.IO.PreviewsParams := [ioppDefaultLockPreview];
ImageEnView1.IO.DoPreviews([ppAUTO]);
ImageEnView1.Update;
end;
procedure TForm1.Undo1Click(Sender: TObject);
begin
ImageEnView1.Proc.Undo();
ImageEnView1.Proc.ClearUndo;
end;
end.
If you want the whole project let me know and I'll email you the project in a zip file.
William Miller
Adirondack Software & Graphics
Email: w2m@frontiernet.net
EBook: http://www.imageen.com/ebook/
Apprehend: http://www.frontiernet.net/~w2m/index.html