我正在尝试使用Form Resize按比例调整列宽(开始时为30,30,50,130,130,130),这是有效的,有点......
问题1:我想摆脱+50,但每个Pixel调用Resize。
问题2:如果我可以获得宽度拖动已停止且鼠标已释放且表格宽度稳定的通知,则会解决问题1。
问题3:我需要帮助它才能减少表格宽度。我的数学不是很好。
procedure TfrmMain.FormResize(Sender: TObject);
var
i : Integer;
aPcntR : Real;
aPcntI : Integer;
anInc : Integer;
begin
if aClientWidth < 1 then Exit;
if aClientWidth = ClientWidth then Exit;
if aClientWidth+50 > ClientWidth then Exit; // Only adjust after an increase of at least 50
aPcntR:=(((aClientWidth-ClientWidth) / ClientWidth)*100.0);
aPcntI:=Abs(Round(aPcntR));
for i:=0 to dbgridItems.Columns.Count-1 do
begin
anInc:=dbgridItems.Columns[i].Width*aPcntI div 100;
dbgridItems.Columns[i].Width:=dbgridItems.columns[i].Width+anInc;
end;
aClientWidth:=ClientWidth;
aClientHeight:=ClientHeight;
end;
答案 0 :(得分:3)
为WM_EXITSIZEMOVE
邮件添加处理程序,然后在那里调整大小,而不是使用OnResize
:
interface
type
TfrmMain = class(TForm)
// Other declarations by IDE
private
procedure WMExitSizeMove(var Msg: TMsg); message WM_EXITSIZEMOVE;
// Other stuff
end;
在调整大小或移动完成并且用户释放鼠标后,WM_EXITSIZEMOVE被发送一次。