Steema Issues Database

Note: This database is for bugs and wishes only. For technical support help, if you are a customer please visit our online forums;
otherwise you can use StackOverflow.
Before using this bug-tracker we recommend a look at this document, Steema Bug Fixing Policy.



Bug 1949

Summary: unwanted Application.HintPause overwrite by TMarksTipTool.MouseDelay
Product: VCL TeeChart Reporter: boris.seve
Component: ToolsAssignee: Steema Issue Manager <issuemanager>
Status: RESOLVED FIXED    
Severity: normal CC: marc, sandra
Priority: ---    
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Windows   
Chart Series: --- Delphi / C++ Builder RAD IDE Version:

Description boris.seve 2017-11-23 05:02:41 EST
Hi, 

Application.HintPause is modified by TMarksTipTool even if SystemHints is set to False.

TFrame > TChart > TMarksTipTool > SystemHints = False

I looked in your sources and my understanding is that in vcl TMarksTipTool.SystemHints is set to True in Create.

your source:

  constructor TMarksTipTool.Create(AOwner: TComponent);
  begin
    inherited;

    FSystemHints:={$IFDEF FMX}False{$ELSE}True{$ENDIF};
    FStyle:=smsLabelOrValue;

    FHidePause:=2500;

    FFormat:=TTextShape.Create(nil);
    FFormat.Visible:=False;
    FFormat.TextAlignment:=taCenter;
    FFormat.CustomPosition:=True;
  end;

The craft of the dfm set SystemHints after MouseDelay.

dfm extract example:

  object ChartTool1: TMarksTipTool
    Format.CustomPosition = True
    Format.Left = 0
    Format.TextAlignment = taCenter
    Format.Top = 0
    Format.Visible = False
    MouseDelay = 0
    SystemHints = False
  end

So when the dfm is loaded, it set the MouseDelay before SystemHints so it affects Application.HintPause.

your source:
  procedure TMarksTipTool.SetMouseDelay(const Value: Integer);
  begin
    {$IFNDEF FMX}
    if SystemHints then
       Application.HintPause:=Value
    else
    {$ENDIF}
       FMouseDelay:=Value;
  end;

Thanks guys.
Comment 1 marc meumann 2018-02-26 11:51:27 EST
fix: 

Property now delays possible setting of Application.HintPause until component is loaded.

Change can be made in current code this way:

//Modify existing setter:

procedure TMarksTipTool.SetMouseDelay(const Value: Integer);
begin
  {$IFNDEF FMX}
  if (not (csLoading in ComponentState)) and SystemHints then
     Application.HintPause:=Value
  else
  {$ENDIF}
     FMouseDelay:=Value;
end;

//new protected method in TMarksTipTool:

procedure TMarksTipTool.Loaded;
Begin
  inherited;

  {$IFNDEF FMX}
  if SystemHints then
     Application.HintPause:= MouseDelay;
  {$ENDIF}
end;