使用Resize设置网格宽度 - 需要通知

时间:2014-07-18 23:09:30

标签: delphi delphi-5 column-width

我正在尝试使用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;

1 个答案:

答案 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被发送一次。