Clube da Programação e Hardware

Tutorial, dicas, Programação, Hardware entre outros assuntos.
 
InícioInício  CalendárioCalendário  FAQFAQ  BuscarBuscar  MembrosMembros  GruposGrupos  Registrar-seRegistrar-se  Conectar-se  

Compartilhe
 

 DBGrid com Progressbar (Resolvido)

Ir em baixo 
AutorMensagem
Vini_do_vale



Mensagens : 4
Data de inscrição : 29/08/2012

DBGrid com Progressbar (Resolvido) Empty
MensagemAssunto: DBGrid com Progressbar (Resolvido)   DBGrid com Progressbar (Resolvido) EmptyQua Ago 29, 2012 10:31 pm

Preciso colocar uma progressbar em uma coluna do DBGrid, para por exemplo exibir a quantidade completa de uma tarefa. Não necessariamente precisa ser com progressbar, pode ser de qualquer forma desde que eu tenha dentro da coluna X uma barra representando a quantidade completada.


Última edição por Vini_do_vale em Seg Set 03, 2012 7:39 am, editado 1 vez(es)
Voltar ao Topo Ir em baixo
Ver perfil do usuário
vanix



Mensagens : 26
Data de inscrição : 20/01/2011

DBGrid com Progressbar (Resolvido) Empty
MensagemAssunto: Re: DBGrid com Progressbar (Resolvido)   DBGrid com Progressbar (Resolvido) EmptyDom Set 02, 2012 7:37 pm

Vini_do_vale escreveu:
Preciso colocar uma progressbar em uma coluna do DBGrid, para por exemplo exibir a quantidade completa de uma tarefa. Não necessariamente precisa ser com progressbar, pode ser de qualquer forma desde que eu tenha dentro da coluna X uma barra representando a quantidade completada.


Não sei Entendi muito bém o que vc deseja, mas este exemplo não usa o componente Tprogress Bar, aqui é criada a barra para a terefa de
na dbgrid, veja o funcionamento e adpte ao que vc precisa.

Componentes usados:
timer = nome tmrProgresso.
ClientDataSet1
combobox1=nome cboEstiloProgressBar

propridade itens do combobox = Sólida
Segmentada

Text = Sólida



type
// alteração local para poder ter acesso à propriedade Row, sem
// ter que fazer aquela 'gambiarra' de criar uma classe 'hackeada'!!!
TDBGrid = class(DBGrids.TDBGrid)
public
property Row;
end;


private
procedure DisableDataControls;
procedure EnableDataControls;
procedure UpdateIndicators;
procedure SetupDataSet;
public
constructor Create(AOwner: TComponent); override;
end;

var
frmTempoChamados: TfrmTempoChamados;

implementation

uses
Math, SysUtils, Windows, DateUtils;

const
clLightOrange = TColor($0091C8FF);
clOrange = TColor($000080FF);

{$R *.dfm}


procedure TfrmTempoChamados.Button1Click(Sender: TObject);
begin
Close;
end;

constructor TfrmTempoChamados.Create(AOwner: TComponent);
begin
inherited;
Position := poScreenCenter;
BorderStyle := bsSingle;
BorderIcons := [biSystemMenu];
Application.Icon.Assign(Self.Icon);
Application.Title := Self.Caption;
SetupDataSet;
tmrProgresso.Enabled := true;
end;

procedure TfrmTempoChamados.UpdateIndicators;
var
rowDelta: Integer;
row: integer;
lNow: TDateTime;
lInterval, lDiff: Int64;
lPerc: Extended;
lBookmark: TBookmark;
begin
DisableDataControls;
lBookmark := ClientDataSet1.GetBookmark;
rowDelta := -1 + DBGrid1.Row;
row := ClientDataSet1.RecNo;
try
ClientDataSet1.First;
while not ClientDataSet1.Eof do
begin
// cálcula tempo decorrido desde a abertura do chamado

{ 1 - verifica o intervalo total a ser verificado }
lInterval := Succ(MillisecondsBetween(
ClientDataSet1DATAHORACHAMADO.AsDateTime,
ClientDataSet1DATAHORACHAMADO.AsDateTime +
TimeOf(ClientDataSet1TEMPORESPONDER.AsDateTime)));

{ 2 - verifica quanto foi decorrido da ocorrência }
lNow := Now();
lDiff :=
MillisecondsBetween(ClientDataSet1DATAHORACHAMADO.AsDateTime, lNow);

{ 3 - calcula o percentual }
lPerc := Min((lDiff / lInterval) * 100.00, 100.00);

// configura 'barra de progresso' para o percentual calculado
ClientDataSet1.Edit;
if cboEstiloProgressBar.ItemIndex = 0 then
ClientDataSet1TEMPODECORRIDO.AsString :=
StringOfChar('g', Trunc(lPerc) div ClientDataSet1TEMPODECORRIDO.Size)
else
ClientDataSet1TEMPODECORRIDO.AsString :=
StringOfChar('¢', Trunc(lPerc) div ClientDataSet1TEMPODECORRIDO.Size);
ClientDataSet1.Post;

// vai para a próxima ocorrência a ser atualizada
ClientDataSet1.Next;
end;
finally
if ClientDataSet1.BookmarkValid(lBookmark) then
ClientDataSet1.GotoBookmark(lBookmark)
else
begin
ClientDataSet1.RecNo := row;
ClientDataSet1.MoveBy(-rowDelta);
ClientDataSet1.MoveBy(rowDelta);
end;
ClientDataSet1.FreeBookmark(lBookmark);
EnableDataControls;
end;
end;


procedure TfrmTempoChamados.tmrProgressoTimer(Sender: TObject);
begin
tmrProgresso.Enabled := false;
try
UpdateIndicators
finally
tmrProgresso.Enabled := true
end
end;

procedure TfrmTempoChamados.DisableDataControls;
begin
while not ClientDataSet1.ControlsDisabled do
ClientDataSet1.DisableControls
end;

procedure TfrmTempoChamados.EnableDataControls;
begin
while ClientDataSet1.ControlsDisabled do
ClientDataSet1.EnableControls
end;

procedure TfrmTempoChamados.ClientDataSet1NewRecord(DataSet: TDataSet);
begin
ClientDataSet1DATAHORACHAMADO.AsDateTime := Now()
end;

procedure TfrmTempoChamados.SetupDataSet;
begin
with ClientDataSet1 do
begin
CreateDataSet;
AppendRecord(['Problema na impressora', Now(), StrToTime('00:02:00'), EmptyStr]);
AppendRecord(['Windows não inicia', Now(), StrToTime('00:02:30'), EmptyStr]);
AppendRecord(['Impressora manchando impressões', Now(), StrToTime('00:01:45'), EmptyStr]);
end;
end;

procedure TfrmTempoChamados.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
const
AFontes: array[0..1] of string = ('Webdings', 'Wingdings 2');
Aligns: array[TAlignment] of integer = (DT_LEFT, DT_RIGHT, DT_CENTER);
var
lColor: TColor;
lText: string;
lRect: TRect;
begin
// pega o valor do campo a ser escrito na célula
lText := DBGrid1.DataSource.DataSet.FieldByName(Column.FieldName).DisplayText;

// associa a fonte usada pela coluna como fonte do grid para efeito de
// escrita do texto
DBGrid1.Canvas.Font.Assign(Column.Font);

// checa se a coluna é que conterá a 'barra de progresso' para
// definir a cor certa do texto
DBGrid1.Canvas.Font.Charset := ANSI_CHARSET;
if Column.FieldName = ClientDataSet1TEMPODECORRIDO.FieldName then
begin;
DBGrid1.Canvas.Font.Name := AFontes[cboEstiloProgressBar.ItemIndex];
DBGrid1.Canvas.Font.Charset := SYMBOL_CHARSET;
if Length(lText) >= 8 then // acima de 80% sem resposta
lColor := clRed
else if Length(lText) >= 6 then // acima de 60% sem resposta
lColor := clOrange
else if Length(lText) >= 4 then // acima de 40% sem resposta
lColor := clLightOrange
else if Length(lText) >= 2 then // acima de 20% sem resposta
lColor := clYellow
else // abaixo de 20% sem resposta
lColor := clGreen;
DBGrid1.Canvas.Font.Color := lColor;
end else if gdSelected in State then
DBGrid1.Canvas.Font.Color := clHighlightText
else
DBGrid1.Canvas.Font.Color := clWindowText;

// verifica a cor de fundo adequada para a célula de acordo
// com o seu estado no grid
if gdSelected in State then
DBGrid1.Canvas.Brush.Color := clBackground
else
DBGrid1.Canvas.Brush.Color := clWindow;
DBGrid1.Canvas.FillRect(Rect);

// ajusta área de escrita do texto
lRect := Rect;
InflateRect(lRect, -1, -1);

// desenha o texto com a função DrawText() da API do Windows
DrawText(DBGrid1.Canvas.Handle, PChar(lText), -1, lRect,
DT_VCENTER or DT_NOCLIP or DT_SINGLELINE or Aligns[Column.Alignment]);
end;




Espero que vc possa adptar ao que vc nescessida.
Voltar ao Topo Ir em baixo
Ver perfil do usuário
Vini_do_vale



Mensagens : 4
Data de inscrição : 29/08/2012

DBGrid com Progressbar (Resolvido) Empty
MensagemAssunto: Re: DBGrid com Progressbar (Resolvido)   DBGrid com Progressbar (Resolvido) EmptySeg Set 03, 2012 7:39 am

vanix escreveu:
Vini_do_vale escreveu:
Preciso colocar uma progressbar em uma coluna do DBGrid, para por exemplo exibir a quantidade completa de uma tarefa. Não necessariamente precisa ser com progressbar, pode ser de qualquer forma desde que eu tenha dentro da coluna X uma barra representando a quantidade completada.


Não sei Entendi muito bém o que vc deseja, mas este exemplo não usa o componente Tprogress Bar, aqui é criada a barra para a terefa de
na dbgrid, veja o funcionamento e adpte ao que vc precisa.

Componentes usados:
timer = nome tmrProgresso.
ClientDataSet1
combobox1=nome cboEstiloProgressBar

propridade itens do combobox = Sólida
Segmentada

Text = Sólida



type
// alteração local para poder ter acesso à propriedade Row, sem
// ter que fazer aquela 'gambiarra' de criar uma classe 'hackeada'!!!
TDBGrid = class(DBGrids.TDBGrid)
public
property Row;
end;


private
procedure DisableDataControls;
procedure EnableDataControls;
procedure UpdateIndicators;
procedure SetupDataSet;
public
constructor Create(AOwner: TComponent); override;
end;

var
frmTempoChamados: TfrmTempoChamados;

implementation

uses
Math, SysUtils, Windows, DateUtils;

const
clLightOrange = TColor($0091C8FF);
clOrange = TColor($000080FF);

{$R *.dfm}


procedure TfrmTempoChamados.Button1Click(Sender: TObject);
begin
Close;
end;

constructor TfrmTempoChamados.Create(AOwner: TComponent);
begin
inherited;
Position := poScreenCenter;
BorderStyle := bsSingle;
BorderIcons := [biSystemMenu];
Application.Icon.Assign(Self.Icon);
Application.Title := Self.Caption;
SetupDataSet;
tmrProgresso.Enabled := true;
end;

procedure TfrmTempoChamados.UpdateIndicators;
var
rowDelta: Integer;
row: integer;
lNow: TDateTime;
lInterval, lDiff: Int64;
lPerc: Extended;
lBookmark: TBookmark;
begin
DisableDataControls;
lBookmark := ClientDataSet1.GetBookmark;
rowDelta := -1 + DBGrid1.Row;
row := ClientDataSet1.RecNo;
try
ClientDataSet1.First;
while not ClientDataSet1.Eof do
begin
// cálcula tempo decorrido desde a abertura do chamado

{ 1 - verifica o intervalo total a ser verificado }
lInterval := Succ(MillisecondsBetween(
ClientDataSet1DATAHORACHAMADO.AsDateTime,
ClientDataSet1DATAHORACHAMADO.AsDateTime +
TimeOf(ClientDataSet1TEMPORESPONDER.AsDateTime)));

{ 2 - verifica quanto foi decorrido da ocorrência }
lNow := Now();
lDiff :=
MillisecondsBetween(ClientDataSet1DATAHORACHAMADO.AsDateTime, lNow);

{ 3 - calcula o percentual }
lPerc := Min((lDiff / lInterval) * 100.00, 100.00);

// configura 'barra de progresso' para o percentual calculado
ClientDataSet1.Edit;
if cboEstiloProgressBar.ItemIndex = 0 then
ClientDataSet1TEMPODECORRIDO.AsString :=
StringOfChar('g', Trunc(lPerc) div ClientDataSet1TEMPODECORRIDO.Size)
else
ClientDataSet1TEMPODECORRIDO.AsString :=
StringOfChar('¢', Trunc(lPerc) div ClientDataSet1TEMPODECORRIDO.Size);
ClientDataSet1.Post;

// vai para a próxima ocorrência a ser atualizada
ClientDataSet1.Next;
end;
finally
if ClientDataSet1.BookmarkValid(lBookmark) then
ClientDataSet1.GotoBookmark(lBookmark)
else
begin
ClientDataSet1.RecNo := row;
ClientDataSet1.MoveBy(-rowDelta);
ClientDataSet1.MoveBy(rowDelta);
end;
ClientDataSet1.FreeBookmark(lBookmark);
EnableDataControls;
end;
end;


procedure TfrmTempoChamados.tmrProgressoTimer(Sender: TObject);
begin
tmrProgresso.Enabled := false;
try
UpdateIndicators
finally
tmrProgresso.Enabled := true
end
end;

procedure TfrmTempoChamados.DisableDataControls;
begin
while not ClientDataSet1.ControlsDisabled do
ClientDataSet1.DisableControls
end;

procedure TfrmTempoChamados.EnableDataControls;
begin
while ClientDataSet1.ControlsDisabled do
ClientDataSet1.EnableControls
end;

procedure TfrmTempoChamados.ClientDataSet1NewRecord(DataSet: TDataSet);
begin
ClientDataSet1DATAHORACHAMADO.AsDateTime := Now()
end;

procedure TfrmTempoChamados.SetupDataSet;
begin
with ClientDataSet1 do
begin
CreateDataSet;
AppendRecord(['Problema na impressora', Now(), StrToTime('00:02:00'), EmptyStr]);
AppendRecord(['Windows não inicia', Now(), StrToTime('00:02:30'), EmptyStr]);
AppendRecord(['Impressora manchando impressões', Now(), StrToTime('00:01:45'), EmptyStr]);
end;
end;

procedure TfrmTempoChamados.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
const
AFontes: array[0..1] of string = ('Webdings', 'Wingdings 2');
Aligns: array[TAlignment] of integer = (DT_LEFT, DT_RIGHT, DT_CENTER);
var
lColor: TColor;
lText: string;
lRect: TRect;
begin
// pega o valor do campo a ser escrito na célula
lText := DBGrid1.DataSource.DataSet.FieldByName(Column.FieldName).DisplayText;

// associa a fonte usada pela coluna como fonte do grid para efeito de
// escrita do texto
DBGrid1.Canvas.Font.Assign(Column.Font);

// checa se a coluna é que conterá a 'barra de progresso' para
// definir a cor certa do texto
DBGrid1.Canvas.Font.Charset := ANSI_CHARSET;
if Column.FieldName = ClientDataSet1TEMPODECORRIDO.FieldName then
begin;
DBGrid1.Canvas.Font.Name := AFontes[cboEstiloProgressBar.ItemIndex];
DBGrid1.Canvas.Font.Charset := SYMBOL_CHARSET;
if Length(lText) >= 8 then // acima de 80% sem resposta
lColor := clRed
else if Length(lText) >= 6 then // acima de 60% sem resposta
lColor := clOrange
else if Length(lText) >= 4 then // acima de 40% sem resposta
lColor := clLightOrange
else if Length(lText) >= 2 then // acima de 20% sem resposta
lColor := clYellow
else // abaixo de 20% sem resposta
lColor := clGreen;
DBGrid1.Canvas.Font.Color := lColor;
end else if gdSelected in State then
DBGrid1.Canvas.Font.Color := clHighlightText
else
DBGrid1.Canvas.Font.Color := clWindowText;

// verifica a cor de fundo adequada para a célula de acordo
// com o seu estado no grid
if gdSelected in State then
DBGrid1.Canvas.Brush.Color := clBackground
else
DBGrid1.Canvas.Brush.Color := clWindow;
DBGrid1.Canvas.FillRect(Rect);

// ajusta área de escrita do texto
lRect := Rect;
InflateRect(lRect, -1, -1);

// desenha o texto com a função DrawText() da API do Windows
DrawText(DBGrid1.Canvas.Handle, PChar(lText), -1, lRect,
DT_VCENTER or DT_NOCLIP or DT_SINGLELINE or Aligns[Column.Alignment]);
end;




Espero que vc possa adptar ao que vc nescessida.





deu para adaptar sim Valeu!.
Voltar ao Topo Ir em baixo
Ver perfil do usuário
Conteúdo patrocinado




DBGrid com Progressbar (Resolvido) Empty
MensagemAssunto: Re: DBGrid com Progressbar (Resolvido)   DBGrid com Progressbar (Resolvido) Empty

Voltar ao Topo Ir em baixo
 
DBGrid com Progressbar (Resolvido)
Voltar ao Topo 
Página 1 de 1
 Tópicos similares
-
» [Resolvido] Como activar o Chatbox no Portal
» [Resolvido]Parceiros - Widgets
» [resolvido] como alterar um rank
» [Resolvido] Inscrição apenas com convite
» [Resolvido] Domínio ace.st

Permissão deste fórum:Você não pode responder aos tópicos neste fórum
Clube da Programação e Hardware :: PROGRAMAÇÃO :: Delphi-
Ir para: