Форум: "Потрепаться";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
ВнизИзвращения, или может можно так делать? Найти похожие ветки
← →
MVova (2004-01-14 17:28) [0]Сначала задачка.
На ProgressBar1 поставить Label1 для отображения текста с включенной прозрачностью. Но без создания нового компонента.
← →
RealRascal (2004-01-14 17:31) [1]не понял. кАкАвА цель этих хитроумно-находчивых действий?
← →
RealRascal (2004-01-14 17:33) [2]А, понял, caption к прогрессбару хошь?
Отчегож нельзя-то?
← →
МАКСЮХА (2004-01-14 17:35) [3]На его, это самое ПрогрессБар можно что угодно поставить...
А ишо лучше на нем ЕТО нарисовать...
← →
Юрий Зотов (2004-01-14 17:41) [4]Никаких извращений. Задачка совершенно элементарная и использующаяся сплошь и рядом.
procedure TForm1.CreateForm(Sender: TObject);
begin
Label1 := TLabel.Create(ProgressBar1);
with Label1 do
begin
Parent := ProgressBar1;
Top := (ProgressBar1.Height - Height) div 2;
UpdateProgressValue
end
end;
procedure TForm1.UpdateProgressValue;
begin
with Label1 do
begin
Caption := IntToStr(ProgressBar1.Position);
Left := (ProgressBar1.Width - Width) div 2
end
end;
← →
RealRascal (2004-01-14 17:42) [5]Лэйбл почему то завсехда за прогрессбаром остается....хоть как ты его положь... твоя идея накрылась медным тазом...
← →
Юрий Зотов (2004-01-14 17:48) [6]> RealRascal © (14.01.04 17:42) [5]
Если просто положить мышкой, то да. И не "почему-то", а именно так и должно быть. А вот если положить в коде, и положить правильно, то все будет ОК.
← →
RealRascal (2004-01-14 17:50) [7]
> Юрий Зотов © (14.01.04 17:41) [4]
> Никаких извращений. Задачка совершенно
а десигн тиам почему-то RealRascal © (14.01.04 17:42) [5].
а можно просто после привязки у лэйбла поставить свойство алигн в алклиент, алигмент в тасентер, а лэйоут в тлсентер?(ну чтобы отцентровать единожды и навсегда)
← →
RealRascal (2004-01-14 17:53) [8]
> Юрий Зотов © (14.01.04 17:48) [6]
а понял, в десигн тайме он его своим парентом не считает...
← →
Юрий Зотов (2004-01-14 18:07) [9]> RealRascal © (14.01.04 17:53) [8]
Совершенно верно. У стандартного ProgressBar"а не выставлен флаг csAcceptControls, поэтому в design-time его нельзя сделать Parent"ом (в отличие от TPanel, TGroupBox и пр). А в коде - запросто.
Насчет Align - можно. Возможно, так будет даже лучше.
← →
MVova (2004-01-14 18:09) [10]
> Юрий Зотов © (14.01.04 17:41) [4]
Я сначала так и делал, а потом подредактировал dfm.
и в десигн тайме лейба легла на прогресс бар.
← →
MVova (2004-01-14 18:14) [11]А можно кнопку на кнопку положить, но там цирк получается :)
← →
Семен Сорокин (2004-01-14 18:15) [12]как альтернатива ProgressBar"у - TGauge на закладке Samples уже с Label"ом
← →
Юрий Зотов (2004-01-14 18:44) [13]> MVova © (14.01.04 18:09) [10]
Ничего удивительного - Parent был назначем при чтении потока. Только произошло это не совсем в design-time, а как бы несколько раньше, во время чтения DFM.
Но не думаю, что такой способ можно считать хорошим.
← →
easy (2004-01-14 19:09) [14]почти то-же самое, что PB в TotalCommander
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Drawprogress(Position: Integer);
procedure Timer1Timer(Sender: TObject);
private
i: integer;
progressimg: TImage;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
panel1.DoubleBuffered := true;
Panel1.BevelOuter:=bvLowered;
progressimg := TImage.Create(self);
with progressimg do begin
Parent := Panel1;
Align := alClient;
end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
progressimg.Free;
end;
procedure TForm1.Drawprogress(Position: Integer);
var
s: string;
pos: integer;
begin
s := inttostr(Position) + "%";
with progressimg do begin
pos := (Width div 100) * Position;
Canvas.Brush.Color := clbtnface;
Canvas.FillRect(ClientRect);
Canvas.Brush.Color := clHighlight;
Canvas.FillRect(rect(0, 0, pos, ClientHeight));
Canvas.Font.Style := [fsbold];
Canvas.Font.Color := clHighlightText;
Canvas.Brush.Style := bsclear;
Canvas.TextRect(Rect(0, 0, pos, ClientHeight),
ClientWidth div 2 - Canvas.TextWidth(s) div 2,
ClientHeight div 2 - Canvas.TextHeight(s) div 2, s);
Canvas.Font.Color := clBtnText;
Canvas.TextRect(Rect(pos, 0, ClientWidth, ClientHeight),
ClientWidth div 2 - Canvas.TextWidth(s) div 2,
ClientHeight div 2 - Canvas.TextHeight(s) div 2, s);
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Drawprogress(i);
inc(i);
if i = 101 then i := 0;
end;
end.
← →
MVova (2004-01-14 19:11) [15]
> Юрий Зотов © (14.01.04 18:44) [13]
>Но не думаю, что такой способ можно считать хорошим.
Согласен, как-то скрытно получается.
Я напарнику показал, он пол часа мучался, бедняга думал как я его туда засунул.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.03 c