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

前端之家收集整理的这篇文章主要介绍了delphi – 是否可以在TForm上对Alpha混合VCL控件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于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;
原文链接:https://www.f2er.com/delphi/102645.html

猜你在找的Delphi相关文章