Главная страница
    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.032 c
1-1081760952
Alexey Chekmezov
2004-04-12 13:09
2004.05.02
Компоненты Delphi


7-1078612457
fishca
2004-03-07 01:34
2004.05.02
Отлов на ATX корпусе нажатия кнопки Power


1-1082039788
Ivolg
2004-04-15 18:36
2004.05.02
Create object


1-1082011855
jenbond
2004-04-15 10:50
2004.05.02
Перехват записи в ini


3-1081150365
alexey
2004-04-05 11:32
2004.05.02
IBTable и IBQuery





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский