对于TForm,可以对Alpha Blend进行类似的效果吗?
例如,考虑以下屏幕截图,除了其他控件之外,还有两个TPanels放在TForm上.两个面板都是可拖动的(见How to Move and Resize Controls at Run Time).
现在,可以让这些面板在拖动时半透明,以便您可以看到下面的内容? (如通过图像操作产生的第二图像所示)
解决方法
你也可以在德尔福这样做.基本思想是将控件放入启用Alpha混合的自动化边框形式.
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;