TStatusBar + TProgressBar
01.01.2007
Вставить ProgressBar в StatusBar:
Вот эту функцию применять вместо стандартного Create
function CreateProgressBar(StatusBar:TStatusBar; index:integer):TProgressBar;
var findleft:integer;
i:integer;
begin
result:=TProgressBar.create(Statusbar);
result.parent:=Statusbar;
result.visible:=true;
result.top:=2;
findleft:=0;
for i:=0 to index-1 do
findleft:=findleft+Statusbar.Panels[i].width+1;
result.left:=findleft;
result.width:=Statusbar.Panels[index].width-4;
result.height:=Statusbar.height-2;
end;
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;
Взято с Vingrad.ru https://forum.vingrad.ru
unit adStatba;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls;
type
TAdrockStatusBar = class(TStatusBar)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
Constructor Create(Aowner : TComponent); override;
published
{ Published declarations }
end;
procedure Register;
implementation
Constructor TAdrockStatusBar.Create(Aowner : TComponent);
begin
inherited Create(Aowner);
ControlStyle := ControlStyle + [csAcceptsControls];
end;
procedure Register;
begin
RegisterComponents('Adrock', [TAdrockStatusBar]);
end;
end.
Это позволит вам разместить элемент управления в панели. Но этот способ не поддерживает использование вложенных панелей. Вероятно, вам также понадобиться выровнять элемент управления по правому краю. Не так это все сложно...
Взято из Советов по Delphi от Валентина Озерова
Сборник Kuliba
pgProgress положить на форму как Visible := false; StatusPanel надо OwnerDraw сделать и pефpешить, если Position меняется.
procedure TMainForm.stStatusBarDrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect);
begin
if Panel.Index = pnProgress then
begin
pgProgress.BoundsRect := Rect;
pgProgress.PaintTo(stStatusBar.Canvas.Handle, Rect.Left, Rect.Top);
end;
end;
Взято с Vingrad.ru https://forum.vingrad.ru
With TProgressBar.Create(StatusBar1) Do Parent:=StatusBar1;