From ffe4871a0b8d78784f80a5f0155b8d2a9bccf132 Mon Sep 17 00:00:00 2001 From: paul Date: Tue, 22 Feb 2011 07:21:00 +0000 Subject: [PATCH] lcl: don't set hint window region if window handle is not allocated git-svn-id: trunk@29645 - --- lcl/forms.pp | 2 ++ lcl/include/hintwindow.inc | 35 +++++++++++++++++++++++------------ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/lcl/forms.pp b/lcl/forms.pp index 7692b5d922..7bdfcc2f39 100644 --- a/lcl/forms.pp +++ b/lcl/forms.pp @@ -824,6 +824,7 @@ type protected class procedure WSRegisterClass; override; procedure DoShowWindow; override; + procedure UpdateRegion; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; @@ -832,6 +833,7 @@ type AData: pointer); virtual; function CalcHintRect(MaxWidth: Integer; const AHint: String; AData: Pointer): TRect; virtual; + procedure InitializeWnd; override; procedure ReleaseHandle; procedure Paint; override; procedure SetBounds(ALeft, ATop, AWidth, AHeight: integer); override; diff --git a/lcl/include/hintwindow.inc b/lcl/include/hintwindow.inc index b6937cfee9..23ea845e91 100644 --- a/lcl/include/hintwindow.inc +++ b/lcl/include/hintwindow.inc @@ -78,6 +78,21 @@ begin end; end; +procedure THintWindow.UpdateRegion; +var + ARect: TRect; + Details: TThemedElementDetails; + Rgn: HRGN; +begin + if (Color = clInfoBk) or (Color = clDefault) then + begin + Details := ThemeServices.GetElementDetails(tttStandardNormal); + ARect := ClientRect; + Rgn := ThemeServices.GetDetailRegion(Canvas.Handle, Details, ARect); + SetWindowRgn(Handle, Rgn, False); + end; +end; + function THintWindow.GetDrawTextFlags: Cardinal; var EffectiveAlignment: TAlignment; @@ -110,7 +125,6 @@ Begin FAutoHideTimer.Enabled := False; end; - procedure THintWindow.AutoHideHint(Sender : TObject); begin if FAutoHideTimer <> nil then @@ -147,19 +161,10 @@ begin end; procedure THintWindow.SetBounds(ALeft, ATop, AWidth, AHeight: integer); -var - ARect: TRect; - Details: TThemedElementDetails; - Rgn: HRGN; begin inherited SetBounds(ALeft, ATop, AWidth, AHeight); - if (Color = clInfoBk) or (Color = clDefault) then - begin - Details := ThemeServices.GetElementDetails(tttStandardNormal); - ARect := ClientRect; - Rgn := ThemeServices.GetDetailRegion(Canvas.Handle, Details, ARect); - SetWindowRgn(Handle, Rgn, False); - end + if HandleAllocated then + UpdateRegion; end; class function THintWindow.GetControlClassDefaultSize: TSize; @@ -236,6 +241,12 @@ begin //debugln('THintWindow.CalcHintRect Result=',dbgs(Result)); end; +procedure THintWindow.InitializeWnd; +begin + inherited InitializeWnd; + UpdateRegion; +end; + procedure THintWindow.ReleaseHandle; begin if HandleAllocated then