我试着按比例调整列宽(30,30,50,130,130,130开始),这是工作的,有点。
问题1:我想去掉+50,但是每个像素都需要调整大小
问题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;
为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在调整大小或移动完成并且用户释放鼠标之后发送一次。