加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 是否可以在TForm上对Alpha混合VCL控件?

发布时间:2020-12-15 06:10:32 所属栏目:大数据 来源:网络整理
导读:对于TForm,可以对Alpha Blend进行类似的效果吗? 例如,考虑以下屏幕截图,除了其他控件之外,还有两个TPanels放在TForm上.两个面板都是可拖动的(见How to Move and Resize Controls at Run Time). 现在,可以让这些面板在拖动时半透明,以便您可以看到下面的内容
对于TForm,可以对Alpha Blend进行类似的效果吗?

例如,考虑以下屏幕截图,除了其他控件之外,还有两个TPanels放在TForm上.两个面板都是可拖动的(见How to Move and Resize Controls at Run Time).

现在,可以让这些面板在拖动时半透明,以便您可以看到下面的内容? (如通过图像操作产生的第二图像所示)

解决方法

你也可以在德尔福这样做.基本思想是将控件放入启用Alpha混合的自动化边框形式.

根据您链接的文章,在MouseDown事件中添加以下行:

P := TWinControl(Sender).ClientToScreen(Point(0,0));
  frm := TForm.Create(nil);
  TWinControl(Sender).Parent := frm;
  frm.BorderStyle := bsNone;
  frm.AlphaBlend := true;
  frm.AlphaBlendValue := 128;
  frm.AutoSize := true;
  frm.Left := P.X;
  frm.Top := P.Y;
  frm.Position := poDesigned;
  frm.Show;

在MouseMove事件中设置控件parent的Left和Top属性:

GetCursorPos(newPos);

  Screen.Cursor := crSize;
  Parent.Left := Parent.Left - oldPos.X + newPos.X;
  Parent.Top := Parent.Top - oldPos.Y + newPos.Y;
  oldPos := newPos;

并且在MouseUp事件发布窗体中,将控件父项设置回原始父项,并将屏幕位置相对于其相对位置转换为新位置:

frm := TWinControl(Sender).Parent;
P := Point(frm.Left,frm.Top);
P := ScreenToClient(P);
TWinControl(Sender).Parent := Self;
TWinControl(Sender).Left := P.X;
TWinControl(Sender).Top := P.Y;
frm.Free;
Screen.Cursor := crDefault;
ReleaseCapture;
inReposition := False;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读