|
Barra de progreso sin marco
Por Vladimir S. <shvetadvipa@mtu-net.ru>
La barra de progreso (ProgressBar) de Delphi siempre tiene marco. Si
desea ponerla en una barra de estado (StatusBar) no se ve muy lindo que
digamos. Puede hacer un pequeño cambio en el componente y así obtener un
nuevo componente sin borde.
Vea la figura (progress.gif). Puede ver tres barras de progreso. Una es
el componente estándar de Delphi con marco y el resto de ellas son el
componente con una propiedad nueva. Ahora puede quitar el marco de la
barra de progreso.
unit NewProgress;
// By Vladimir S. <shvetadvipa@mtu-net.ru>
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;
type
TNProgressBar = class(TProgressBar)
procedure WMNCPAINT(var Msg: TMessage); message WM_NCPAINT;
private
FShowFrame: boolean;
procedure SetShowFrame(Value: boolean);
public
constructor Create(AOwner: TComponent); override;
published
property ShowFrame: boolean read FShowFrame write SetShowFrame;
end;
procedure Register;
implementation
{ TNProgressBar }
constructor TNProgressBar.Create(AOwner: TComponent);
begin
inherited;
FShowFrame := True;
end;
procedure TNProgressBar.SetShowFrame(Value: boolean);
begin
if FShowFrame <> Value then begin
FShowFrame:= Value;
RecreateWnd;
end;
end;
procedure TNProgressBar.WMNCPAINT(var Msg: TMessage);
var
DC: HDC;
RC: TRect;
begin
if ShowFrame then begin
inherited;
Invalidate;
end else begin
DC := GetWindowDC(Handle);
try
Windows.GetClientRect(Handle, RC);
with RC do begin
Inc(Right, 2);
Inc(Bottom, 2);
end;
Windows.FillRect(DC, RC, Brush.Handle);
finally
ReleaseDC(Handle, DC);
end;
end;
end;
procedure Register;
begin
RegisterComponents('Controls', [TNProgressBar]);
end;
end.
|