diff --git a/components/ideintf/idehelpintf.pas b/components/ideintf/idehelpintf.pas index 8da5a80207..7f1f92d59c 100644 --- a/components/ideintf/idehelpintf.pas +++ b/components/ideintf/idehelpintf.pas @@ -327,10 +327,10 @@ var var HintWinRect: TRect; begin - HintWinRect := HintTextWindow.CalcHintRect(Screen.Width, TheHint); + HintWinRect := HintTextWindow.CalcHintRect(Screen.Width, TheHint, Nil); HintTextWindow.HintRectAdjust := HintWinRect; // Adds borders. HintTextWindow.OffsetHintRect(ScreenPos); - HintTextWindow.ActivateText(TheHint); + HintTextWindow.ActivateHint(TheHint); end; procedure DoHtml; diff --git a/components/synedit/syncompletion.pas b/components/synedit/syncompletion.pas index 02b6104c70..29b9a4100f 100644 --- a/components/synedit/syncompletion.pas +++ b/components/synedit/syncompletion.pas @@ -77,7 +77,8 @@ type FIndex: Integer; public constructor Create(AOwner: TComponent); override; - function CalcHintRect(MaxWidth: Integer; const AHint: string): TRect; override; + function CalcHintRect(MaxWidth: Integer; const AHint: string; + AData: pointer): TRect; override; procedure Paint; override; property Index: Integer read FIndex write FIndex; end; @@ -685,7 +686,7 @@ begin // CalcHintRect uses the current index FHint.Index := AIndex; // calculate the size - R := FHint.CalcHintRect(Monitor.Width, ItemList[AIndex]); + R := FHint.CalcHintRect(Monitor.Width, ItemList[AIndex], nil); if (R.Right <= Scroll.Left) then begin FHint.Hide; @@ -726,7 +727,7 @@ end; procedure TSynBaseCompletionForm.OnHintTimer(Sender: TObject); begin FHintTimer.Enabled := False; - FHint.ActivateText(ItemList[FHint.Index]); + FHint.ActivateHint(ItemList[FHint.Index]); end; procedure TSynBaseCompletionForm.KeyDown(var Key: Word; Shift: TShiftState); @@ -2154,7 +2155,8 @@ begin Visible := False; end; -function TSynBaseCompletionHint.CalcHintRect(MaxWidth: Integer; const AHint: string): TRect; +function TSynBaseCompletionHint.CalcHintRect(MaxWidth: Integer; const AHint: string; + AData: pointer): TRect; var P: TPoint; begin diff --git a/components/synedit/synedit.pp b/components/synedit/synedit.pp index 9b455fe873..f20ffee574 100644 --- a/components/synedit/synedit.pp +++ b/components/synedit/synedit.pp @@ -4747,7 +4747,7 @@ begin ScrollHint.Visible := TRUE; end; s := Format('line %d', [TopLine]); - rc := ScrollHint.CalcHintRect(200, s); + rc := ScrollHint.CalcHintRect(200, s, Nil); pt := ClientToScreen(Point(ClientWidth-ScrollBarWidth - rc.Right - 4, 10)); if eoScrollHintFollows in fOptions then pt.y := Mouse.CursorPos.y - (rc.Bottom div 2); diff --git a/components/tachart/tatools.pas b/components/tachart/tatools.pas index d5dd5fcd2f..c0e9e220d2 100644 --- a/components/tachart/tatools.pas +++ b/components/tachart/tatools.pas @@ -1799,7 +1799,7 @@ begin if FHintWindow = nil then FHintWindow := THintWindow.Create(nil); if h = '' then exit; - r := FHintWindow.CalcHintRect(FChart.Width, h); + r := FHintWindow.CalcHintRect(FChart.Width, h, Nil); OffsetRect(r, APoint.X, APoint.Y); FHintWindow.ActivateWithBounds(r, h); end; diff --git a/designer/designer.pp b/designer/designer.pp index 5fa00a458b..5ba8be2298 100644 --- a/designer/designer.pp +++ b/designer/designer.pp @@ -4244,14 +4244,14 @@ begin AHint := GetSelectionPosHintText; end; - Rect := FHintWindow.CalcHintRect(0, AHint); //no maxwidth + Rect := FHintWindow.CalcHintRect(0, AHint, Nil); //no maxwidth Rect.Left := Position.X + 15; Rect.Top := Position.Y + 15; Rect.Right := Rect.Left + Rect.Right; Rect.Bottom := Rect.Top + Rect.Bottom; FHintWindow.HintRectAdjust := Rect; - FHintWindow.ActivateText(AHint); + FHintWindow.ActivateHint(AHint); end; procedure TDesigner.SetSnapToGrid(const AValue: boolean); diff --git a/ide/idehelpmanager.pas b/ide/idehelpmanager.pas index 1d1a980a78..35d64f1dbd 100644 --- a/ide/idehelpmanager.pas +++ b/ide/idehelpmanager.pas @@ -1678,7 +1678,7 @@ begin HintWinRect := Rect(0, 0, NewWidth, NewHeight); TheHint:=''; end else begin - HintWinRect := aHintWindow.CalcHintRect(Screen.Width, TheHint); + HintWinRect := aHintWindow.CalcHintRect(Screen.Width, TheHint, Nil); aHintWindow.HintRectAdjust := HintWinRect; // Adds borders. end; OffsetRect(HintWinRect, ScreenPos.X, ScreenPos.Y+30); diff --git a/lcl/forms.pp b/lcl/forms.pp index 15710e8c1f..31465adf4d 100644 --- a/lcl/forms.pp +++ b/lcl/forms.pp @@ -860,11 +860,13 @@ type public constructor Create(AOwner: TComponent); override; destructor Destroy; override; - procedure ActivateText(const AHint: String); + procedure ActivateHint(const AHint: String); + procedure ActivateHint(ARect: TRect; const AHint: String); virtual; procedure ActivateWithBounds(ARect: TRect; const AHint: String); - procedure ActivateWithData(ARect: TRect; const AHint: String; AData: pointer); - deprecated 'Set HintData explicitly'; - function CalcHintRect(MaxWidth: Integer; const AHint: String): TRect; virtual; + procedure ActivateHintData(ARect: TRect; const AHint: String; + AData: pointer); virtual; + function CalcHintRect(MaxWidth: Integer; const AHint: String; + AData: pointer): TRect; virtual; function OffsetHintRect(NewPos: TPoint; dy: Integer = 30): Boolean; procedure InitializeWnd; override; procedure ReleaseHandle; diff --git a/lcl/include/application.inc b/lcl/include/application.inc index 5dba7ff4fd..2f74213feb 100644 --- a/lcl/include/application.inc +++ b/lcl/include/application.inc @@ -847,7 +847,8 @@ begin // make the hint have the same BiDiMode as the activating control FHintWindow.BiDiMode := FHintControl.BiDiMode; // calculate the width of the hint based on HintStr and MaxWidth - HintWinRect := FHintWindow.CalcHintRect(HintInfo.HintMaxWidth, HintInfo.HintStr); + with HintInfo do + HintWinRect := FHintWindow.CalcHintRect(HintMaxWidth, HintStr, HintData); //Position HintWindow depending on LTR/RTL if FHintWindow.UseRightToLeftAlignment then OffsetRect(HintWinRect, HintInfo.HintPos.X - (HintWinRect.Right - HintWinRect.Left), HintInfo.HintPos.Y) @@ -860,7 +861,7 @@ begin //debugln('TApplication.ShowHintWindow B HintWinRect=',dbgs(HintWinRect),' HintStr="',DbgStr(HintInfo.HintStr),'"'); FHintWindow.HintRectAdjust := HintWinRect; - FHintWindow.ActivateText(HintInfo.HintStr); + FHintWindow.ActivateHint(HintInfo.HintStr); FHintRect := HintInfo.CursorRect; // start hide timer StartHintTimer(HintInfo.HideTimeout,ahttHideHint); diff --git a/lcl/include/hintwindow.inc b/lcl/include/hintwindow.inc index a9012f4fa2..fc484dd225 100644 --- a/lcl/include/hintwindow.inc +++ b/lcl/include/hintwindow.inc @@ -213,7 +213,7 @@ begin Invalidate; end; -procedure THintWindow.ActivateText(const AHint: String); +procedure THintWindow.ActivateHint(const AHint: String); // Shows simple text hint. begin if FActivating then exit; @@ -227,19 +227,27 @@ begin end; end; +procedure THintWindow.ActivateHint(ARect: TRect; const AHint: String); +begin + HintRect := ARect; + AdjustBoundsForMonitor; + ActivateHint(AHint); +end; + procedure THintWindow.ActivateWithBounds(ARect: TRect; const AHint: String); begin HintRect := ARect; - ActivateText(AHint); + ActivateHint(AHint); end; -procedure THintWindow.ActivateWithData(ARect: TRect; const AHint: String; AData: pointer); +procedure THintWindow.ActivateHintData(ARect: TRect; const AHint: String; AData: pointer); begin HintRectAdjust := ARect; - ActivateText(AHint); // AData is not used now. + ActivateHint(AHint); // AData is not used now. end; -function THintWindow.CalcHintRect(MaxWidth: Integer; const AHint: String): TRect; +function THintWindow.CalcHintRect(MaxWidth: Integer; const AHint: String; + AData: pointer): TRect; var Flags: Cardinal; uh: HDC;