Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Вниз

"Засунуть" ProgressBar в StatusBar   Найти похожие ветки 

 
SergP ©   (2004-04-13 13:31) [0]

Подскажите как сделать сабж.
Можно код или хотя-бы сам принцип .


 
RDen   (2004-04-13 13:39) [1]

ProgressBar.Parent:=  StatusBar;


 
SergP ©   (2004-04-13 13:44) [2]

Ну это понятно. Я имел ввиду как его засунуть в конкретную Panel?


 
clickmaker ©   (2004-04-13 13:46) [3]

Определить координаты панели (сложив Width предыдущих, например) и ProgressBar.Left :=


 
pasha_golub ©   (2004-04-13 13:48) [4]

SergP ©   (13.04.04 13:44) [2]
Лучше самому отрисовывать в OnDrawPanel


 
han_malign ©   (2004-04-13 13:52) [5]

ну, лично я, не мудрствуя лукаво, отрисовываю руками
procedure DrawSimpleHProgressBar(aCanvas: TCanvas; const aRect: TRect; aColor: TColor;
  aText: string; aPercent: byte; aHCenterText: boolean);
var W,H,X,Y: integer;
   _rect: TRect;
   _clr: TColor;
   _bs: TBrushStyle;
begin
  if(aPercent>100)then aPercent:=0;
  W:=aRect.Right-aRect.Left+1; H:=aRect.Bottom-aRect.Top+1;
  _rect:=aRect;
  if(aPercent>0)then begin
     _rect.Right:=aRect.Left+W*aPercent div 100-1;
     _clr:=aCanvas.Brush.Color;
     aCanvas.Brush.Color:=aColor;
     aCanvas.FillRect(_rect);
     aCanvas.Brush.Color:=_clr;
     aText:=aText+" "+IntStr(aPercent)+"%";
     _rect.Left:=_rect.Right+1;
     _rect.Right:=aRect.Right;
  end;
  if(_rect.Right>=_rect.Left)then aCanvas.FillRect(_rect);
  Y:=(H-aCanvas.TextHeight(aText))div 2;
  if(Y<0)then Y:=0;
  X:=(W-aCanvas.TextWidth(aText))div 2;
  if(X<0)then X:=0;
  if((X>Y)and not aHCenterText)then
     if(Y>0)then X:=Y
     else if(X>2)then X:=2;
  _bs:=aCanvas.Brush.Style;
  aCanvas.Brush.Style:=bsClear;
  aCanvas.TextOut(aRect.Left+X,aRect.Top+Y,aText);
  aCanvas.Brush.Style:=_bs;
end;

примерно так, для одной панели
procedure TDeviceForm.sbDeviceDrawPanel(StatusBar: TStatusBar;
 Panel: TStatusPanel; const Rect: TRect);
var _text: string;
   _prgrs: byte;
begin
  Lock; _text:=F_sStatus; _prgrs:=F_nProgress;Unlock;
  DrawSimpleHProgressBar(StatusBar.Canvas,Rect,clBlue,_text,_prgrs,false);
end;

 F_sStatus, F_nProgress - у меня обновляется в контексте другого потока, поэтому используется Lock/Unlock, в которых упакована критическая секция.
procedure TDeviceForm.SetStatus(aStatus: string; aProgress: byte= 0);
var _fU: boolean;
begin
 Lock;
  _fU:=(F_sStatus<>aStatus)or(aProgress<>F_nProgress);
  F_sStatus:=aStatus;
  F_nProgress:=aProgress;
 Unlock;
  if(_fU)then sbDevice.Invalidate;
end;


 
SergP ©   (2004-04-13 13:55) [6]


> clickmaker ©   (13.04.04 13:46) [3]


> pasha_golub ©   (13.04.04 13:48) [4]


Просто сначала думал что его можно сразу поместить в конкретную panel, а нифига не выходило.
Теперь все понял. Спасибо...


 
Amoeba ©   (2004-04-13 13:57) [7]

В целом ряде библиотек есть StatusBar, которые позволяют помещать на них другие компоненты. Также посмотри такие StatusBar на http://www.torry.net
Отрисовка руками, IMHO, есть "поездка в Москву из Питера через Владивосток".


 
pasha_golub ©   (2004-04-13 14:51) [8]

Amoeba ©   (13.04.04 13:57) [7]
Здрасте, это как раз и есть, то шо надо. :-) Не учитывая наличия компонентов.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.033 c
8-1075134301
ST
2004-01-26 19:25
2004.05.02
FFT


14-1081238156
Александр Иванов
2004-04-06 11:55
2004.05.02
Test cases


1-1081938543
V-Isa
2004-04-14 14:29
2004.05.02
Запретить закрытие формы.


1-1082042199
Никита
2004-04-15 19:16
2004.05.02
Загрузка файлов через Delphi приложение.


3-1081416944
Igorok
2004-04-08 13:35
2004.05.02
Иконки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский