Ich habe ein benutzerdefiniertes Steuerelement mit beiden Bildlaufleisten aktiviert und ich möchte eine einfache rote Linie Rahmen um den Client-Bereich und die Bildlaufleisten, wie im Bild unten zu zeichnen. Wie mache ich das?Wie zeichne ich einen benutzerdefinierten Rahmen innerhalb des Nicht-Client-Bereichs eines Steuerelements mit Bildlaufleisten?
Dies ist der Steuercode:
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.
Leider funktioniert dies nicht ordnungsgemäß in Windows 7 Home Premium, 64-Bit, Aero, Delphi 2009. Wenn Sie das Steuerelement teilweise außerhalb des Monitors und dann zurück bewegen, werden die Teile der Bildlaufleisten, die immer sichtbar waren, überstrichen . –
@And Sorry, aber ich habe (noch) keine Lösung für dich. (Übrigens habe ich festgestellt, dass der Fehler auch bei einer 'TScrollBox' mit einer 'BorderWidth> 0' liegt, also hat es wahrscheinlich nichts mit diesem Code zu tun.) – NGLN