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

Вниз

Progressbar   Найти похожие ветки 

 
Homo Sapiens ©   (2006-07-30 18:42) [0]

Не подскажете-ли какой-нить компонент progressbar красивый,
жедательно градиентный как в том же райзе компонентс?


 
Eraser ©   (2006-07-30 18:45) [1]

> красивый,

красота понятие относительное и индивидуальное, поэтому я бы посоветовал использовать стандартный компонент, который отображается в соответствии со стилем оформления windows.


 
Gydvin ©   (2006-07-30 19:02) [2]

Самому сделать либо имитировать


 
Ivolg ©   (2006-07-30 19:32) [3]

Юзай RbСontrols...


 
Homo Sapiens ©   (2006-07-30 19:33) [4]


> красота понятие относительное и индивидуальное

Уже сказал: ГРАДИЕНТНЫЙ
> Самому сделать либо имитировать

Попросил же дать ссылочку...


 
Anatoly Podgoretsky ©   (2006-07-30 19:43) [5]

И вся сила в красоту уйдет, а программирование побоку.


 
Gydvin ©   (2006-07-30 20:32) [6]

Какая ссылка, элементарное программирование.
Вот древний вариант

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure progressbar1(max, value: integer);
   procedure Button1Click(Sender: TObject);
   procedure FormShow(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
   rom, progress, buffer: tbitmap;
   progresswidth, progressheight, progressleft, progresstop, progressvalue: integer;

 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure tform1.progressbar1(max, value: integer);
 function RoundFloat(R: Extended; Decimals: Integer): Extended;
 var
   Factor: Extended;
 begin
   Factor := Int(Exp(Decimals * Ln(10)));
   Result := Round(Factor * R) / Factor;
 end;

var
 a: real;
 b: integer;
begin
 if max = 0 then exit;
 a := max / progresswidth;

 a := value / a;
 a := RoundFloat(a, 0);
 b := strtoint(floattostr(a));

 bitblt(buffer.canvas.Handle, 0, 0, progresswidth, progressheight, rom.Canvas.Handle, 0, 0, SRCCOPY);
 bitblt(buffer.canvas.Handle, 0, 0, b, progressheight, progress.Canvas.Handle, 0, 0, SRCCOPY);
 bitblt(canvas.Handle, progressleft, progresstop, progresswidth, progressheight, buffer.Canvas.Handle, 0, 0, SRCCOPY);

 application.ProcessMessages;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 x: integer;
begin

 rom.Canvas.CopyRect(rect(0, 0, progresswidth,
   progressheight), canvas, rect(progressleft, progresstop, progresswidth + progressleft, progressheight + progresstop));
 rom.PixelFormat := pf24bit;

 canvas.Draw(220, 220, rom);
 for x := 0 to 1000 do progressbar1(1000, x);
 for x := 1000 downto 0 do progressbar1(1000, x);

end;

procedure TForm1.FormShow(Sender: TObject);
begin
 rom := tbitmap.Create;
 progress := tbitmap.Create;
 buffer := tbitmap.Create;
 progress.LoadFromFile("progress.bmp"); //Gruzim progressbar
 progress.PixelFormat := pf24bit;
 progresswidth := progress.Width;
 progressheight := progress.Height;
 progressleft := 50;
 progresstop := 40;
 rom.Width := progresswidth;
 rom.Height := progressheight;
 buffer.Width := progresswidth;
 buffer.Height := progressheight;
 form1.DoubleBuffered := true;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 rom.Free;
 progress.Free;
 buffer.Free;
end;

end.


 
Gydvin ©   (2006-07-30 20:39) [7]

canvas.Draw(220, 220, rom);

Убрать


 
Homo Sapiens ©   (2006-07-30 21:08) [8]

Пасибо


 
Gydvin ©   (2006-07-30 21:14) [9]

Забыл (((

procedure tform1.progressbar1(max, value: integer);
 function RoundFloat(R: Extended; Decimals: Integer): Extended;
 var
   Factor: Extended;
 begin
   Factor := Int(Exp(Decimals * Ln(10)));
   Result := Round(Factor * R) / Factor;
 end;

var
 a: real;
 b: integer;
begin
 if max = 0 then exit;
 a := max / progresswidth;

 a := value / a;
 a := RoundFloat(a, 0);
 b := strtoint(floattostr(a));
if progressvalue<>b then begin
 bitblt(buffer.canvas.Handle, 0, 0, progresswidth, progressheight, rom.Canvas.Handle, 0, 0, SRCCOPY);
 bitblt(buffer.canvas.Handle, 0, 0, b, progressheight, progress.Canvas.Handle, 0, 0, SRCCOPY);
 bitblt(canvas.Handle, progressleft, progresstop, progresswidth, progressheight, buffer.Canvas.Handle, 0, 0, SRCCOPY);
 progressvalue:=b;
 application.ProcessMessages;
 end;

end;


 
Gydvin ©   (2006-07-30 21:15) [10]

Так будет быстрее. Убираем лишнюю отрисовку


 
programania ©   (2006-07-30 22:34) [11]

http://programania.com/poloska.zip   1кб


 
Gydvin ©   (2006-07-30 23:07) [12]


> programania ©   (30.07.06 22:34) [11]

Красиво, но медлено


 
programania ©   (2006-07-31 01:40) [13]

>Gydvin ©   (30.07.06 23:07) [12]
>Красиво, но медлено

В примере специально медленно, чтоб было лучше видно
а на самом деле достаточно 100 вызвать, это мгновенно
для этого можно добавить в начало процедуры:

if (abs(p-i.tag)<max div 100) and (p<max) then exit;
i.tag:=p;



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

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

Наверх




Память: 0.48 MB
Время: 0.039 c
2-1154552866
susergey
2006-08-03 01:07
2006.08.20
Абракадабра в TMemo


4-1146456876
kernel
2006-05-01 08:14
2006.08.20
Add resource


3-1150346152
abhtr
2006-06-15 08:35
2006.08.20
Нумерация строк результата SQL запроса


15-1153918841
Felian
2006-07-26 17:00
2006.08.20
Посоветуйте пожалуйста что-то для любителей криптографии


2-1154428209
DelphiLexx
2006-08-01 14:30
2006.08.20
external без описания имени модуля





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