148просмотров
5 января 2026 г.
📷 ФотоScore: 163
Избавляемся от фокусной рамки
Иногда очень хочется избавиться от примитивной фокусной рамки на контроле. В некоторых случаях может помочь: function RecreateControlRgn( const AControl: TWinControl; const AMargin: TRect; const ARGN: NativeInt): NativeInt;
var rct: TRect;
begin if ARGN <> 0 then DeleteObject(ARGN); rct := AControl.ClientRect; rct.TopLeft := rct.TopLeft + AMargin.TopLeft; rct.BottomRight := rct.BottomRight - AMargin.BottomRight; Result := CreateRectRgn(rct.Left, rct.Top, rct.Right, rct.Bottom); SetWindowRgn(AControl.Handle, Result, TRUE);
end;
Использовать, например, так:
procedure TForm1.FormResize(Sender: TObject);
var i: Integer; P: TWinControl;
begin for i := 0 to ComponentCount-1 do if (Components[i] is TTrackBar) then begin P := TWinControl(Components[i]); P.Tag := RecreateControlRgn( P, Rect(1, 1, 1, 1), P.Tag); end;
end;
Работает со стилями, и без.