diff --git a/designer/designer.pp b/designer/designer.pp index bb9164dddd..7688f08a6d 100644 --- a/designer/designer.pp +++ b/designer/designer.pp @@ -2501,8 +2501,9 @@ var Diff, ItemLeftTop: TPoint; IconRect, TextRect: TRect; TextSize: TSize; - IsSelected: Boolean; + IsSelected, IsSaved: Boolean; begin + IsSaved := False; for i := 0 to FLookupRoot.ComponentCount - 1 do begin AComponent := FLookupRoot.Components[i]; @@ -2516,12 +2517,18 @@ begin ItemTop := ItemLeftTop.Y - Diff.Y; ItemRight := ItemLeft + NonVisualCompWidth; ItemBottom := ItemTop + NonVisualCompWidth; + + if not IsSaved then + begin + aDDC.Save; + IsSaved := True; + end; + if not aDDC.RectVisible(ItemLeft, ItemTop, ItemRight, ItemBottom) then Continue; IsSelected := ControlSelection.IsSelected(AComponent); - aDDC.Save; - with aDDC.Canvas do + with aDDC.Canvas do begin // draw component frame Pen.Width := 1; @@ -2561,9 +2568,11 @@ begin if (ControlSelection.Count > 1) and IsSelected then ControlSelection.DrawMarkerAt(aDDC, ItemLeft, ItemTop, NonVisualCompWidth, NonVisualCompWidth); - aDDC.Restore; end; end; + + if IsSaved then + aDDC.Restore; end; procedure TDesigner.DrawDesignerItems(OnlyIfNeeded: boolean);