Ho un controllo personalizzato con entrambe le barre di scorrimento abilitate e desidero disegnare un semplice bordo della linea rossa attorno all'area client e alle barre di scorrimento, come nell'immagine qui sotto. Come faccio questo?Come disegnare un bordo personalizzato all'interno dell'area non client di un controllo con le barre di scorrimento?
Questo è il codice di controllo:
unit SuperList;
interface
uses Windows, Controls, Graphics, Classes, Messages, SysUtils, StdCtrls;
type
TSuperList = class(TCustomControl)
protected
procedure Paint; override;
procedure CreateParams(var Params: TCreateParams); override;
public
constructor Create(AOwner: TComponent); override;
end;
implementation
procedure TSuperList.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style:=Params.Style or WS_VSCROLL or WS_HSCROLL;
end;
constructor TSuperList.Create(AOwner: TComponent);
begin
inherited;
Color:=clBlack;
Width:=300;
Height:=250;
end;
procedure TSuperList.Paint;
begin
Canvas.Pen.Color:=clNavy;
Canvas.Brush.Color:=clWhite;
Canvas.Rectangle(ClientRect); // a test rectangle te see the client area
end;
end.
Sfortunatamente, questo non funziona correttamente in Windows 7 Home Premium, 64-bit, Aero abilitato, Delphi 2009. Se si sposta il controllo in parte all'esterno del monitor e quindi indietro, le parti delle barre di scorrimento che erano sempre visibili sono dipinte sopra . –
@ Spiacente, ma non ho ancora una soluzione per te. (A proposito, ho scoperto che il glitch è con un 'TScrollBox' che ha anche un' BorderWidth> 0', quindi probabilmente non ha nulla a che fare con questo codice.) – NGLN