首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么实现一个悬浮的圆圈

2013-01-28 
如何实现一个悬浮的圆圈?我尝试过用Panel上加一个图片,但是Panel却不知道怎么设置透明。请问还有什么更好的

如何实现一个悬浮的圆圈?
我尝试过用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.

热点排行