Советы по Delphi

         

у меня проблема: как вставить


ProgressBar в StatusBar? Здравствуйте Валентин!

Некоторое время назад была у меня проблема: как вставить ProgressBar в StatusBar?
Не помню где в инете, но я нашел такое решение (мне очень понравилось):

    var
pb: TProgressBar;
begin
.... pb:= TProgressBar.Create(self);

with pb do begin Parent:= StatusBar1; Position:= 30; Top:= 2; Left:= 0; Height:= StatusBar1.Height - Top; Width:= StatusBar1.Panels[0].Width - Left; end;  //with; pb.Visible:= True; .... end;
Может и Вам понравится.

Алексей Лихолетов
alicho@go.ru [000490]
Письмо читателя

ProgressBar с невидимой рамкой


Заказчик моего проекта обратился с просьбой - "Сделать прогресс индикатор как в приложениях Нортона. Чтоб был в статус строке и НИКАКИХ рамок". ProgressBar в StatusBar - нет проблем, но как быть с рамкой от ProgressBar? ProgressBar всегда вычерчивает рамку и не имеет методов ее управления. Однако появилась интересная идея, воплотившаяся в компонент с новым свойством ShowFrame. Решение оказалось на удивление простым. На рисунке сравнение стандартного ProgressBar и ProgressBar с невидимой рамкой.

    unit vsprgs;

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); protected 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.
end.
C уважением, VS [001294]


Содержание раздела