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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |