如题,比如把九个集成进去,可以形成3*3的行列解构
最好可以定义行列,Image的个数为行数*列数
鼠标点击事件可以判断出是点击哪个Image,让其显示一张图片
有会做的兄弟说下方法或者帮我做一个,我没有开发控件的经验
在线等待
最好可以定义行列,Image的个数为行数*列数
鼠标点击事件可以判断出是点击哪个Image,让其显示一张图片
有会做的兄弟说下方法或者帮我做一个,我没有开发控件的经验
在线等待
下面代码可以实现的是生成9个image,3×3矩阵排列,双击可加载图片unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, DB, ADODB, ExtCtrls, Buttons,jpeg;type
TWdImage = class(Tpanel)
public//我都写成了public,做成组件时,frow这些东西最好写在private中,
//然后提供一个属性来供用户调用
FRow : integer;
FCol : integer;
Fimage : array of timage;
constructor Create(AOwner: TComponent);override;
destructor Destroy;
procedure Setrowandcol(value : integer);
procedure MyImageOndbclick(Sender: TObject);
end;
TForm1 = class(TForm)
Image1: TImage;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure Image1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
a : TWdImage;implementation{$R *.dfm}procedure TForm1.Image1Click(Sender: TObject);
beginend;{ TWdImage }constructor TWdImage.Create(AOwner: TComponent);
var
i ,l,t,j,n: integer;
begin
inherited;
FRow := 3;
FCol := 3;//默认是3*3的
Width := 600;//从tpanel继承而来,这里设置的就是panel的大小
Height := 600;
SetLength(Fimage,frow*fcol);//image这里用的是动态数组,在这里分配空间
n := 0;
//下面的代码用来创建image数组中的内容并显示在背景的panel上。
for i := 0 to frow-1 do
begin
l := 0;
for j := 0 to FCol-1 do
begin
Fimage[n] := TImage.Create(nil);
Fimage[n].Parent := Self;
Fimage[n].Width := Width div 3;
Fimage[n].Height := Height div 3;
Fimage[n].Left := l;
fimage[n].Top := i * Fimage[n].Height;
l := l + Fimage[n].Width;
fimage[n].Canvas.MoveTo(0,0);
Fimage[n].Canvas.Font.Size := 8;
fimage[n].Canvas.TextOut(0,0,inttostr(n+1));
fimage[n].Stretch := true;
fimage[n].OnDblClick := MyImageOndbclick;
inc(n);
end;
end;end;destructor TWdImage.Destroy;
begin
inherited;
SetLength(Fimage,0);end;procedure TWdImage.MyImageOndbclick(Sender: TObject);
var
Dialog : TOpenDialog;
begin
Dialog := TOpenDialog.Create(nil);
try
if Dialog.Execute then
(sender as TImage).Picture.LoadFromFile(Dialog.FileName);
finally
Dialog.Free;
end;
end;procedure TWdImage.Setrowandcol(value: integer);
beginend;procedure TForm1.BitBtn1Click(Sender: TObject);
begin
//测试代码,创建并显示,双击可以加载图片
a := TWdImage.Create(nil);
a.Parent := Form1;
a.Left := 100;
a.Top := 100;end;procedure TForm1.BitBtn2Click(Sender: TObject);
begin
ShowMessage('abc');
a.Destroy;end;end.
但是不能用呀,兄弟帮忙看看
以下是我在网上找到的透明控件的代码unit Glass;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;type
TGlassStyle = (
gsBlackness, gsDstInvert, gsMergeCopy, gsMergePaint, gsNotSrcCopy,
gsNotSrcErase, gsPatCopy, gsPatInvert, gsPatPaint, gsSrcAnd,
gsSrcCopy, gsSrcErase, gsSrcInvert, gsSrcPaint, gsWhiteness);TGlass = class(TCustomControl)//------------private-----------------------------------------------------------
private
FColor: TColor;
FStyle: TGlassStyle;
FOnPaint: TNotifyEvent;procedure SetColor(Value: TColor); //设置颜色
procedure SetStyle(Value: TGlassStyle); //设置类型
procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED; //改变3D效果
procedure WMEraseBkgnd(var Message: TMessage); message WM_ERASEBKGND; //除去背景色
procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING; //?坐标变化//--------------protected-------------------------------------------------------
protected
Buffer: TBitmap;procedure CreateParams(var Params: TCreateParams); override;
procedure Paint; override;
procedure Resize; override;//--------------public----------------------------------------------------------
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Canvas;//--------------published-------------------------------------------------------
published
property Align;
property Anchors;
property AutoSize;
property BiDiMode;
property BorderWidth;
property Color: TColor read FColor write SetColor;
property Ctl3D;
property Enabled;
property Style: TGlassStyle read FStyle write SetStyle default gsSrcAnd;
property Visible;property OnClick;
property OnDblClick;
property OnEnter;
property OnExit;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnResize;
property OnPaint: TNotifyEvent read FOnPaint write FOnPaint;
end;procedure Register;
//------------------执行语句----------------------------------------------------
//------------------------------------------------------------------------------
implementationprocedure Register;
begin
RegisterComponents('Croco', [TGlass]);
end;//--------------给自定义颜色赋值------------------------------------------------
function GlassStyleToInt(gs: TGlassStyle): LongInt;
begin
case gs of
gsBlackness : Result := cmBlackness;
gsDstInvert : Result := cmDstInvert;
gsMergeCopy : Result := cmMergeCopy;
gsMergePaint : Result := cmMergePaint;
gsNotSrcCopy : Result := cmNotSrcCopy;
gsNotSrcErase: Result := cmNotSrcErase;
gsPatCopy : Result := cmPatCopy;
gsPatInvert : Result := cmPatInvert;
gsPatPaint : Result := cmPatPaint;
gsSrcAnd : Result := cmSrcAnd;
gsSrcCopy : Result := cmSrcCopy;
gsSrcErase : Result := cmSrcErase;
gsSrcInvert : Result := cmSrcInvert;
gsSrcPaint : Result := cmSrcPaint;
gsWhiteness : Result := cmWhiteness;
else Assert(True, 'Error parameter in function GlassStyleToInt');
end;
end;
//-----------------创建---------------------------------------------------------
constructor TGlass.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Buffer := TBitmap.Create;ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents,
csDoubleClicks, csReplicatable];
Width := 100;
Height := 100;
FStyle := gsSrcAnd;
ParentCtl3d := False;
Ctl3D := False;
ParentColor := False;
FColor := clWhite;
end;
//-----------------销毁---------------------------------------------------------
destructor TGlass.Destroy;
begin
Buffer.Free;
inherited Destroy;
end;//------------------绘制控件----------------------------------------------------
procedure TGlass.Paint;
var
R: TRect;
rop: LongInt;
begin
R := Rect(0, 0, Width, Height);
Buffer.Width := Width;
Buffer.Height := Height;
Buffer.Canvas.Brush.Style := bsSolid;
Buffer.Canvas.Brush.Color := FColor;
Buffer.Canvas.FillRect(Rect(0, 0, Width, Height));
rop := GlassStyleToInt(FStyle);
StretchBlt(Buffer.Canvas.Handle, 0, 0, Width, Height,
Canvas.Handle, 0, 0, Width, Height, rop);
if Ctl3D then DrawEdge(Buffer.Canvas.Handle, R, BDR_RAISEDINNER, BF_RECT);
Buffer.Canvas.Pen.Mode := pmCopy;
Buffer.Canvas.Pen.Style := psSolid;
Canvas.Draw(0, 0, Buffer);
if Assigned(FOnPaint) then FOnPaint(Self);
end;//-----------------设置颜色-----------------------------------------------------
procedure TGlass.SetColor(Value: TColor);
begin
if Value <> FColor then
begin
FColor := Value;
RecreateWnd; //重画窗口
end;
end;//-----------------创建参数-----------------------------------------------------
procedure TGlass.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);Params.ExStyle := Params.ExStyle + WS_EX_TRANSPARENT;
end;//-------------------窗口坐标改变-----------------------------------------------
procedure TGlass.WMWindowPosChanging(var Message: TWMWindowPosChanging);
begin
Invalidate;inherited;
end;//----------------擦除背景色----------------------------------------------------
procedure TGlass.WMEraseBkgnd(var Message: TMessage);
begin
Message.Result := 0;
end;//---------------------调整大小-------------------------------------------------
procedure TGlass.Resize;
begin
Invalidate;inherited;
end;//--------------------3D效果----------------------------------------------------
procedure TGlass.CMCtl3DChanged(var Message: TMessage);
begin
inherited;RecreateWnd;
end;//------------------设置样式----------------------------------------------------
procedure TGlass.SetStyle(Value: TGlassStyle);
begin
if Value <> FStyle then
begin
FStyle := Value;
RecreateWnd;
end;
end;end.
运行是把内存都吃光了,郁闷
unit Glass;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;type
TGlassStyle = (
gsBlackness, gsDstInvert, gsMergeCopy, gsMergePaint, gsNotSrcCopy,
gsNotSrcErase, gsPatCopy, gsPatInvert, gsPatPaint, gsSrcAnd,
gsSrcCopy, gsSrcErase, gsSrcInvert, gsSrcPaint, gsWhiteness);TGlass = class(TCustomControl)//------------private-----------------------------------------------------------
private
FColor: TColor;
FStyle: TGlassStyle;
FOnPaint: TNotifyEvent;procedure SetColor(Value: TColor); //设置颜色
procedure SetStyle(Value: TGlassStyle); //设置类型
procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED; //改变3D效果
procedure WMEraseBkgnd(var Message: TMessage); message WM_ERASEBKGND; //除去背景色
procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING; //?坐标变化//--------------protected-------------------------------------------------------
protected
Buffer: TBitmap;procedure CreateParams(var Params: TCreateParams); override;
procedure Paint; override;
procedure Resize; override;//--------------public----------------------------------------------------------
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Canvas;//--------------published-------------------------------------------------------
published
property Align;
property Anchors;
property AutoSize;
property BiDiMode;
property BorderWidth;
property Color: TColor read FColor write SetColor;
property Ctl3D;
property Enabled;
property Style: TGlassStyle read FStyle write SetStyle default gsSrcAnd;
property Visible;property OnClick;
property OnDblClick;
property OnEnter;
property OnExit;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnResize;
property OnPaint: TNotifyEvent read FOnPaint write FOnPaint;
end;procedure Register;
//------------------执行语句----------------------------------------------------
//------------------------------------------------------------------------------
implementationprocedure Register;
begin
RegisterComponents('Croco', [TGlass]);
end;//--------------给自定义颜色赋值------------------------------------------------
function GlassStyleToInt(gs: TGlassStyle): LongInt;
begin
case gs of
gsBlackness : Result := cmBlackness;
gsDstInvert : Result := cmDstInvert;
gsMergeCopy : Result := cmMergeCopy;
gsMergePaint : Result := cmMergePaint;
gsNotSrcCopy : Result := cmNotSrcCopy;
gsNotSrcErase: Result := cmNotSrcErase;
gsPatCopy : Result := cmPatCopy;
gsPatInvert : Result := cmPatInvert;
gsPatPaint : Result := cmPatPaint;
gsSrcAnd : Result := cmSrcAnd;
gsSrcCopy : Result := cmSrcCopy;
gsSrcErase : Result := cmSrcErase;
gsSrcInvert : Result := cmSrcInvert;
gsSrcPaint : Result := cmSrcPaint;
gsWhiteness : Result := cmWhiteness;
else Assert(True, 'Error parameter in function GlassStyleToInt');
end;
end;
//-----------------创建---------------------------------------------------------
constructor TGlass.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Buffer := TBitmap.Create;ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents,
csDoubleClicks, csReplicatable];
Width := 100;
Height := 100;
FStyle := gsSrcAnd;
ParentCtl3d := False;
Ctl3D := False;
ParentColor := False;
FColor := clWhite;
end;
//-----------------销毁---------------------------------------------------------
destructor TGlass.Destroy;
begin
Buffer.Free;
inherited Destroy;
end;