ecSyntMemo.pas

declare type
  TDragMarginEvent = procedure(Sender: TObject; Margin: TecTextMargin; var Pos: integer) of object; //old
  TSyntShowHintEvent = procedure(Sender: TObject; const HintStr: string; var HintObj: THintWindow) of object; //AT2

add field 
    FOnGetTokenHint: TGetTokenHintEvent; //old
    FOnShowHint: TSyntShowHintEvent; //AT2
    
add field
    FHint: THintWindow; //old
    FHintBak: THintWindow; //AT2
    
add property
    property OnGetTokenHint: TGetTokenHintEvent read FOnGetTokenHint write FOnGetTokenHint; //old
    property OnShowHint: TSyntShowHintEvent read FOnShowHint write FOnShowHint; //AT2


after
  FHintProps := THintProps.Create(Self);
  FHint.FreeNotification(Self);
add  
  FHintBak := FHint;


replace all TSyntHintWindow(FHint) to (FHint as TSyntHintWindow):
-in procedure TCustomSyntaxMemo.ResetHint:
 if FHint is TSyntHintWindow then //AT2
   (FHint as TSyntHintWindow).ResetLines;

-and in procedure TCustomSyntaxMemo.ShowCollapsedHint:
    if FHint is TSyntHintWindow then //AT2
      (FHint as TSyntHintWindow).SetLines(....
      
-also in procedure THintProps.SetHintLines:      
  if FOwner.FHint is TSyntHintWindow then 
    (FOwner.FHint as TSyntHintWindow).SetLines(....
                 

in procedure TCustomSyntaxMemo.ResetHint add to the end:
 //AT2
 if FHint <> FHintBak then
 begin
   FreeAndNil(FHint);
   FHint := FHintBak;
 end;


in procedure TCustomSyntaxMemo.ShowHintWnd (1st of 3) add to beginning:
  //AT2
  if Assigned(FOnShowHint) then
    FOnShowHint(Self, Text, FHint);
