How can I force a TRichedit control to fire up the onRequestResize in Delphi 11.3?

79 Views Asked by At

Somewhere in my app I have the statement RE.Lines.LoadFromStream(st) where RE is a TRichEdit control.

I have also set the event onResizeRequest that fires up on execution of the above statement but not every time although the event remains assigned.

The code is big and I can't cut a part of it to show it.

Can I add some command, for example RE.Perform(.....) that will force the control to execute the event (or even better not to use an event but a function that I will call whenever I want)?

1

There are 1 best solutions below

0
Peter Wolf On BEST ANSWER

It seems to be an implementation detail of rich edit control that the common controls library prevents generating EN_REQUESTRESIZE notification when the width or height of the control is zero.

To force EN_REQUESTRESIZE notification, send EM_REQUESTRESIZE message to rich edit control's window. This will generate the notification regardless of the control's size.

SendMessage(RE.Handle, EM_REQUESTRESIZE, 0, 0);

CRichEditCtrl from MFC has a dedicated method RequestResize for that. To mimic that you can implement a class helper:

uses
  Vcl.ComCtrls, Winapi.RichEdit;

type
  TCustomRichEditHelper = class helper for TCustomRichEdit
  public
    procedure RequestResize;
  end;

procedure TCustomRichEditHelper.RequestResize;
begin
  if HandleAllocated then
    SendMessage(Handle, EM_REQUESTRESIZE, 0, 0);
end;

You can then call:

RE.RequestResize;