Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ProgressBar, который отрисовывает линейку програсса в Статусбаре [D7, WinXP]


lehich ©   (2005-08-24 11:18:00) 

помогите плыз... скачал компонент из альтернативной кладовки... добавил его через Add file to project прописал в Unit1
uses VisSTProgressBar;
а в VisSTProgressBar
uses Unit1;

в инструкции написано:
"
Невизуальный компонент - ProgressBar, который отрисовывает линейку програсса в Статусбаре. Для настройки нужно указать StatusBar, в котором будет отрисовка и PanelIndex - индекс панели в статусбаре. Работает как в обычном ProgressBar, оптимизировано на отрисовку изменений. Часть кода взято из примеров. Freeware.
"

но нифига понять не могу где и чего менять? :-(((

дабы не захламлять форум выложу просто ссылку на скачивание:
http://kladovka.net.ru/download.cgi?id=41

подскажите что нужно еще дополнительно изменить?

Заранее премного благодарен!!!


lehich   (2005-08-24 18:08:00) [1]

всем огромный респект!!!

> asmi ©   (24.08.05 12:22) [2]

ступил... думал не так подключать его :-))) спасибо!!!

> Alexander Panov ©   (24.08.05 12:17) [1]

сенкс! фактически и не работал никогда с самостоятельной отрисовкой... буду ковырять выложенный код! еще раз спасибо!!!

> Игорь Шевченко ©   (24.08.05 12:54) [3]

спасибо большое! буду разбираться с выложенным... :-)))


Игорь Шевченко   (2005-08-24 12:54:00) [2]


> Вообще, для отображения линейки в TStatusBar, как в TGauge,
> необязательно искать дополнительных компонент. Дело весьма
> нехитрое.


Это точно. Назначить ProgressBar или Gauge BoundsRect и Parent

procedure TfMain.ShowProgress;
var
 R: TRect;
begin
 SetRect(R, 0, 3, StatusBar.ClientWidth, Pred(StatusBar.ClientHeight));
 if WindowState <> wsMaximized then
   Dec(R.Right, StatusBar.ClientHeight);
 with ProgressBar do begin
   BoundsRect := R;
   Parent := StatusBar;
   Visible := true;
 end;
end;


asmi   (2005-08-24 12:22:00) [3]

//lehich   (24.08.05 11:18)
//Невизуальный компонент - ProgressBar
Имелось в виду на форму кидается в виде пиктограмки.

Вообщем делай так:
Выбирай Component -> Install Component...
Закладка Into new package
Unit file name: <путь к файлу>\VisSTProgressBar.pas
Package file name: Visor (Или что душе угодно)
OK
Compile
Install
Вуаля, Close All, File -> New -> Application, кидаешь компоненту с вкладки Visor, и наслаждаешься своим прогресиком

ЗЫ Надеюсь ты знал как устанавливать компоненты в Delphi :-)


Alexander Panov   (2005-08-24 12:17:00) [4]

Вообще, для отображения линейки в TStatusBar, как в TGauge, необязательно искать дополнительных компонент. Дело весьма нехитрое.

Нужно заменить обработчик события OnDrawPanel.
Для одной из панелей установить свойство Style в psOwnerDraw и отрисовывать ее самому.

Вот выдернул из рабочего проекта. Все несложно, просто разберись:

В классе формы:

 private
   FProgress: Integer;
   procedure ResizeSbm;
 public
   procedure ShowProgress(Proz: Integer);
   procedure NextProgress;
   procedure ClearProgress;

procedure TForm1.ClearProgress;
begin
 ShowProgress(-1);
end;

procedure TForm1.ShowProgress(Proz: Integer);
begin
 FProgress := Proz;
 sbm.Repaint;
end;

procedure TForm1.NextProgress;
begin
 Inc(FProgress);
 sbm.Repaint;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
 ResizeSbm;
end;

procedure TForm1.ResizeSbm;
begin
 sbm.Panels[1].Width := sbm.Width-
   sbm.Panels[0].Width-
   sbm.Panels[2].Width-
   sbm.Panels[3].Width-
   sbm.Panels[4].Width-20;
end;

procedure TForm1.tmTimeTimer(Sender: TObject);
begin
 Sbm.Panels[0].Text := FormatDateTime('dd.mm.yyyy hh:nn:ss',now);
end;

procedure TForm1.sbmDrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel;
 const Rect: TRect);
var
 R: TRect;
 pz: Integer;
begin
 if Panel=sbm.Panels[1] then
 begin
   if FProgress=-1 then
   begin
     sbm.Canvas.Brush.Color := sbm.Brush.Color;
     sbm.Canvas.FillRect(Rect);
     sbm.Panels[2].Text := '';;
     Exit;
   end;

   pz := Trunc((Rect.Right-Rect.Left)*(FProgress/100));
   if FProgress>100
     then FProgress := 0;

   if FProgress=0 then
   begin
     sbm.Canvas.Brush.Color := sbm.Brush.Color;
     sbm.Canvas.FillRect(Rect);
     sbm.Panels[2].Text :=IntToStr(FProgress)+' %';
     Exit;
   end;

   R := Rect;
   R.Right := R.Left+pz;
   sbm.Canvas.Brush.Color := clBlue;
   sbm.Canvas.FillRect(R);
   sbm.Panels[2].Text :=IntToStr(FProgress)+' %';
 end
 else inherited;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо