我的目的就是做成相框一样 但是周边都是图片 可以改变大小 的panel
四个角可以是直角也可以是圆角, 已经实现直角,但是圆角的
实现不了,我做这步的目的是把图片变成圆环,然后放进bitmap里 然后切成4份去做圆角
但是我在编写vcl时,放置了一个新的panel变成了圆环,但是保存不了bmp,所以进行不下了 ,郁闷
请高手指点!!!
我的思路是不是有问题,有谁有别的思路的吗?
procedure TBorderImagePanel.DrawPanelArc;
var
x, y: HRgn;
bit: tBitmap;
tmppanel: TPanel;
aimage: TImage;
w: Integer;
SourRect: TRect;
DC: HDC;
can: TCanvas;
begin w := Self.BorderWidth; try begin tmppanel := TPanel.Create(nil);
tmppanel.Parent := Self;
tmppanel.Width := 100;
tmppanel.Height := 100;
tmppanel.Top := 20;
tmppanel.Left := 20;
tmppanel.Visible := True;
tmppanel.Enabled := True; aimage := TImage.Create(nil);
aimage.Parent:= tmppanel;
aimage.Align := alClient;
aimage.Picture.Bitmap.LoadFromResourceName(HInstance, 'GROUNDBMP'); SourRect:= tmppanel.ClientRect;
bit := TBitMap.Create;
bit.PixelFormat := pf24bit;
bit.Width := SourRect.Right;
bit.Height := SourRect.Bottom; can:= TCanvas.Create;
DC := GetDC (tmppanel.Handle);
can.Handle := DC; x := CreateEllipticRgn(0, 0, tmppanel.Width, tmppanel.Height);
y := CreateEllipticRgn(w, w, tmppanel.Width - w, tmppanel.Height - w);
CombineRgn(y, x, y, RGN_XOR);
SetWindowRgn(tmppanel.Handle, y, True);
bit.Canvas.CopyRect(SourRect,can,Rect(0,0,100,100) );
bit.SaveToFile('C:\MyPic.bmp');
end;
finally
aimage.Free;
tmppanel.Free;
end;end;
四个角可以是直角也可以是圆角, 已经实现直角,但是圆角的
实现不了,我做这步的目的是把图片变成圆环,然后放进bitmap里 然后切成4份去做圆角
但是我在编写vcl时,放置了一个新的panel变成了圆环,但是保存不了bmp,所以进行不下了 ,郁闷
请高手指点!!!
我的思路是不是有问题,有谁有别的思路的吗?
procedure TBorderImagePanel.DrawPanelArc;
var
x, y: HRgn;
bit: tBitmap;
tmppanel: TPanel;
aimage: TImage;
w: Integer;
SourRect: TRect;
DC: HDC;
can: TCanvas;
begin w := Self.BorderWidth; try begin tmppanel := TPanel.Create(nil);
tmppanel.Parent := Self;
tmppanel.Width := 100;
tmppanel.Height := 100;
tmppanel.Top := 20;
tmppanel.Left := 20;
tmppanel.Visible := True;
tmppanel.Enabled := True; aimage := TImage.Create(nil);
aimage.Parent:= tmppanel;
aimage.Align := alClient;
aimage.Picture.Bitmap.LoadFromResourceName(HInstance, 'GROUNDBMP'); SourRect:= tmppanel.ClientRect;
bit := TBitMap.Create;
bit.PixelFormat := pf24bit;
bit.Width := SourRect.Right;
bit.Height := SourRect.Bottom; can:= TCanvas.Create;
DC := GetDC (tmppanel.Handle);
can.Handle := DC; x := CreateEllipticRgn(0, 0, tmppanel.Width, tmppanel.Height);
y := CreateEllipticRgn(w, w, tmppanel.Width - w, tmppanel.Height - w);
CombineRgn(y, x, y, RGN_XOR);
SetWindowRgn(tmppanel.Handle, y, True);
bit.Canvas.CopyRect(SourRect,can,Rect(0,0,100,100) );
bit.SaveToFile('C:\MyPic.bmp');
end;
finally
aimage.Free;
tmppanel.Free;
end;end;
解决方案 »
- delphi 调用excel宏
- delphi7.0 socketconnection sqlserver不存在或拒绝访问
- 如何使一个对话框总在最前面
- ReportBuilder问题:如何用代码获取报表的数据源的sql语句,并根据需要修改
- 如何用DBGrid向数据库中添加数据。
- 有没有一些关于delphi的电子图书,请大虾们赐教,我在线等待。
- Delphi如何做到监视一个WEB窗口的运行,并能截取WEB窗口发往网站的消息?在线等候...
- 请问如何在delphi 中调用C++ 的动态连接库。
- ADO的问题(急&在线等待)
- 有专用的算法基础书吗
- 提示“SELECT 子句中包含一个保留字、拼写错误或丢失的参数,或标点符号不正确。”
- 琢磨不透-到底工程项目文件隐藏了什么东西? 谁知道???
2、使用RGN_DIFF参数 , CombineRgn(y, x, y, RGN_DIFF);
我问了一下别人说,我的控件继承TcustomPanel
我又用了Panel 所以才会不对的 ,但是我能理解 但是不知道怎么去解决,郁闷