Главная страница | назад





Article #21552: RichEdit in a COM server is not being correctly created

Question:
I have a RichEdit control in my COM Server application that uses the tmFree threading model for COM objects, and the RichEdit control is not being created. How can I get around this?

Answer:
This is related to a bug in the VCL for Delphi 5 and you can click here to read more about it. (It is also mentioned in the readme file for Delphi 5).

One possible workaround given was to override CreateParams for a TRichEdit and add the ES_EX_NOCALLOLEINIT style to it. However, this may not always work. Another possible solution is to capture the WM_NCCREATE message and set the proper params at that point. Below is a component that will do that for you.

Download FixedRichEdit.pas

Sample Code

unit FixedRichEdit;

interface

uses
  Windows, Messages, Classes, Controls, RichEdit, ComCtrls;

type
  TFixedRichEdit = class(TRichEdit)
  protected
    procedure WMNCCreate(var message: TWMNCCreate); message WM_NCCREATE;
  end;

procedure Register;

implementation

procedure TFixedRichEdit.WMNCCreate(var message: TWMNCCreate);
var
  gwlEx : Longint;
begin
  gwlEx := GetWindowLong(WindowHandle, GWL_EXSTYLE);
 gwlEx := gwlEx or ES_EX_NOCALLOLEINIT;
  message.CreateStruct^.dwExStyle := gwlEx;
  inherited;
end;

procedure Register;
begin
  RegisterComponents('Samples', [TFixedRichEdit]);
end;

end.

Last Modified: 05-APR-00