如何实现一个悬浮的圆圈?
我尝试过用Panel上加一个图片,但是Panel却不知道怎么设置透明。请问还有什么更好的办法没。可以悬浮在Webbrowser控件之上。谢谢
[解决办法]
Function GetWebBrowserWindow(Web : TWebBrowser) : THandle;
var
hWin : THandle;
begin
Result := 0;
hWin := GetWindow(Web.Handle, GW_CHILD);
while hWin<>0 do begin
Result := hWin;
hWin := GetWindow(hWin, GW_CHILD);
if hWin = 0 then Break;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Canvas : TCanvas;
hWin : THandle;
begin
hWin := GetWebBrowserWindow(Web);
Canvas := TCanvas.Create;
Canvas.Handle := GetDC(hWin);
Canvas.Brush.Style := bsClear;
Canvas.Ellipse(5,5,200,200);
Windows.ReleaseDC(hWin , Canvas.Handle);
Canvas.Handle := 0;
Canvas.Free;
end;
这样可以画一个圆,需要用这个方法响应WM_PAINT消息,并且计算滚动条位置才能到达目的
[解决办法]
LZ的悬浮圆是什么场景下使用?
最好使用支持透明度调整的第三方控件或HTML+Css达到目的
使用canvas会让你疲于应付
[解决办法]
也可以这么实现
---------------------------
在主窗体上创建一个透明窗体, 在透明窗体上画一个圆(可以画任何形状,或安放控件)
包含webbrowser的窗体代码
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, ExtCtrls;
type
TForm1 = class(TForm)
wb1: TWebBrowser;
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
frm : TForm;
procedure WMMOVE(var Msg: TMessage); message WM_MOVE;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
frm := TForm.Create(self);
frm.Top := self.Top + 50;
frm.Left := self.Left + 50;
frm.Width := 100;
frm.Height := 100;
frm.FormStyle := fsStayOnTop;
frm.BorderStyle := bsNone;
frm.TransparentColor := True;
frm.TransparentColorValue := Color;
frm.Show;
frm.Canvas.Ellipse(0,0, 100, 100);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
frm.Free;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
wb1.Navigate('http://news.baidu.com');
end;
procedure TForm1.WMMOVE(var Msg: TMessage);
begin
//主窗体移动位置时, 透明窗体跟着移动
Inherited;
if frm <> nil then
begin
frm.Top := self.Top + 50;
frm.Left := self.Left + 50;
end;
end;
end.