Delphi: Как узнать, когда TEdit меняет размер? - PullRequest
3 голосов
/ 14 сентября 2009

Мне нужно обновить элементы вокруг поля редактирования, когда оно меняет размер.

TEdit не имеет события OnResize .

Поле для редактирования может изменяться в разное время, например ::100100

  • изменение ширины / высоты в коде
  • форма, масштабируемая для масштабирования DPI
  • шрифт изменен

И я уверен, что другие, о которых я не знаю.

Мне нужно одно событие, чтобы узнать, когда поле редактирования изменило свой размер. Есть ли сообщение Windows, для которого я могу подклассифицировать поле ввода и захватить?

Ответы [ 3 ]

9 голосов
/ 14 сентября 2009

OnResize объявлен как защищенное свойство TControl. Вы можете выставить его, используя так называемый класс "взломщик". Это все равно что взломать.

type
  TControlCracker = class(TControl);

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  TControlCracker(Edit1).OnResize := MyEditResize;
end;

procedure TForm1.MyEditResize(Sender: TObject);
begin
  Memo1.Lines.Add(IntToStr(Edit1.Width));
end;
3 голосов
/ 14 сентября 2009

Вы пробовали что-то вроде этого:

unit _MM_Copy_Buffer_;

interface

type
  TMyEdit = class(TCustomEdit)
  protected
    procedure Resize; override;
  end;

implementation

procedure TMyEdit.Resize;
begin
  inherited;
  if not (csLoading in ComponentState) then
  begin
    // react on new size
  end;
end;

end.

или это:

unit _MM_Copy_Buffer_;

interface

type
  TCustomComboEdit = class(TCustomMaskEdit)
  private
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
  end;

implementation

procedure TCustomComboEdit.WMSize(var Message: TWMSize);
begin
  inherited;
  if not (csLoading in ComponentState) then
  begin
    // react on new size
  end;
  UpdateBtnBounds;
end;

end.
1 голос
/ 15 сентября 2009

Обработка сообщения wm_Size. Подкласс управления, назначая новое значение его WindowProc свойство; Обязательно сохраните старое значение, чтобы вы могли делегировать другие сообщения.

См. Также: wm_WindowPosChanged

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...