Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2009, 04:07   #1
SONce
Пользователь
 
Регистрация: 13.04.2009
Сообщений: 21
Лампочка Продвинутый грид

Встречал в инетрнете платные аналоги, вобщем что нужно, нужно в одной из ячеек грида выводить прогрес бар, кто что подскажет?

проще говоря както так

Последний раз редактировалось Stilet; 14.04.2009 в 08:45.
SONce вне форума Ответить с цитированием
Старый 14.04.2009, 06:00   #2
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

ручками рисовать пробовал?? создаешь новый прогресбар, и дильше тока следи за прокруткой и перемещай его соотвественно..
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 14.04.2009, 08:50   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

По-моему автор просит что-то наподобие такого:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   timer1.Tag:=timer1.Tag+1;
   if timer1.Tag=StringGrid1.DefaultColWidth then Timer1.Tag:=0;
   StringGrid1.Repaint;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 if acol=arow then begin
  with TStringGrid(sender).Canvas do begin
   Brush.Color:=clred;
   rect.Right:=Rect.Left+timer1.Tag;
   FillRect(rect);
  end;
  end;
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.04.2009, 16:16   #4
SONce
Пользователь
 
Регистрация: 13.04.2009
Сообщений: 21
По умолчанию

Хотелось бы всетаки отдельный компонент иметь, кстати в предыдушем примере приветиде пример вызова вашей процедуры.
SONce вне форума Ответить с цитированием
Старый 14.04.2009, 16:25   #5
Ulagay700
Пользователь
 
Регистрация: 07.11.2007
Сообщений: 91
По умолчанию

А насколько важно делать это именно в гриде?
Ulagay700 вне форума Ответить с цитированием
Старый 14.04.2009, 19:04   #6
SONce
Пользователь
 
Регистрация: 13.04.2009
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Ulagay700 Посмотреть сообщение
А насколько важно делать это именно в гриде?
важно именно в гриде, должен быть уровень загрузки, например как в опере или DM, тоесть в гриде там отрисовываеться прогрес бар сразу
SONce вне форума Ответить с цитированием
Старый 15.04.2009, 17:02   #7
CahekG
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 28
По умолчанию

Можно на основе TStringGrid свой компонент накидать.
Я примерно такой сделал.
В свойство ProgressCol указать колонку, в которой будут progressBar
И тогда значение ячеек содержащих числовое представление , будут интерпретироваться как %
Код:
unit MyStringGrid;

interface

uses
  Windows,SysUtils, Classes, QControls, Grids,Graphics;

type
  TMyStringGrid = class(TStringGrid)
  private
    { Private declarations }
    AProgressCol:integer;
    AProgressColor:Tcolor;
    AProgressPecentColor:Tcolor;
    aShowPecent:boolean;

  protected
    { Protected declarations }
  procedure DrawCell(ACol, ARow: Longint; ARect: TRect;
      AState: TGridDrawState); override;
  public
    { Public declarations }
   property ProgressCol:integer read AProgressCol write    AProgressCol;
   property ProgressColor:Tcolor read AProgressColor write    AProgressColor;
   property ProgressPecentColor:Tcolor read AProgressPecentColor write    AProgressPecentColor;
   property ShowPecent:boolean read aShowPecent write    aShowPecent;
    constructor Create(AOwner: TComponent); override;

  published

    { Published declarations }
  end;

procedure Register;

implementation

uses Controls;

procedure Register;
begin
  RegisterComponents('Standart', [TMyStringGrid]);
end;

constructor TMyStringGrid.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  AProgressCol:=-1;// колонка содержащая прогремм бар
  AProgressColor:=clBlue;// цвет отрисовки прогресса
  AProgressPecentColor:=Font.Color;//цвет шрифта %
  aShowPecent:=true;// нужно - ли показывать %
end;

procedure TMyStringGrid.DrawCell(ACol, ARow: Longint; ARect: TRect;
  AState: TGridDrawState);
var s:string;Pcent,withCell,withtxt,j,i:integer;
OldDefaultDrawing:boolean;
OldPen:TPenMode;
begin
if   (AProgressCol=ACol) and (ARow>0) then 
  begin
   s:=cells[ACol,Arow];
   val(s,Pcent,j);
   if j>0 then exit;
   if Pcent<0 then Pcent:=0;
   if Pcent>100 then Pcent:=100;
   withCell:=ARect.Right-ARect.Left-4;
   j:=(withCell*Pcent) div 100;
   i:=ARect.Left+2;

    withtxt:=Canvas.TextWidth(inttostr(Pcent)+'%');
    Canvas.Font.Color:=AProgressPecentColor;
    if withtxt>=withCell then
    Canvas.TextRect(ARect, ARect.Left+2, ARect.Top+2,inttostr(Pcent)+'%')
    else
    Canvas.TextRect(ARect, ARect.Left+2+((withCell-withtxt) div 2), ARect.Top+2,inttostr(Pcent)+'%');

   Canvas.Pen.Color:=AProgressColor;
   OldPen:=Canvas.Pen.Mode;
   Canvas.Pen.Mode:=pmNotXor;
   while (i<=(ARect.Right-2)) and (j>0) do
    begin
     Canvas.MoveTo(i,ARect.Top+2);
     Canvas.LineTo(i,ARect.Bottom-2);
     dec(j);inc(i);
    end;
    Canvas.Pen.Mode:=OldPen;
    OldDefaultDrawing:=DefaultDrawing;
    DefaultDrawing:=false;
    inherited DrawCell(ACol, ARow, ARect, AState);
    DefaultDrawing:=OldDefaultDrawing;
   exit;
  end;
  inherited DrawCell(ACol, ARow, ARect, AState);
end;

end.
CahekG вне форума Ответить с цитированием
Старый 30.12.2010, 07:08   #8
rurnit
Новичок
Джуниор
 
Регистрация: 29.11.2010
Сообщений: 2
По умолчанию

ПИПЕЦ!!!
во проблема...
создал прогерсс руками ... :=TProgressBar.create(nil)

присвоил родителя ... Parent:=<grid>

разместил его в ячейке ... Top:=... Left:=...

навел красоту:
PostMessage(Handle,PBM_SETBARCOLOR, 0,$007BFBBB);
SetWindowRgn(Handle,CreateRectRgn(1 ,1,Width - 1,Height - 1 ),true);

про скролл можешь забыть - грид все сделает сам!

ну и когда надо удалить его - freeandnil(<progressbar>)

пихай их в TList и обращайся по индексу выделенной строки в гриде...
Изображения
Тип файла: jpg progress_grid.JPG (9.7 Кб, 99 просмотров)
rurnit вне форума Ответить с цитированием
Старый 30.12.2010, 14:58   #9
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

NextGrid имеет возможность добовлять прогрессеры, иконки и другое... Для Delphi6-7 компонент бесплатный.
W0LF вне форума Ответить с цитированием
Старый 03.01.2011, 11:54   #10
xexxex
Пользователь
 
Регистрация: 31.07.2010
Сообщений: 52
По умолчанию

Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  with TProgressBar.Create(nil) do try
    BoundsRect := Rect;
    Left := - Width;
    Parent := Self;
    Position := 30;
    PaintTo(TStringGrid(Sender).Canvas, Rect.Left, Rect.Top);
  finally
    Free;
  end;
end;
xexxex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен продвинутый пользователь Excel+VBA Валерйи Фриланс 8 29.03.2009 11:53
Обновление ДБ Грид-а opel.omega Общие вопросы Delphi 6 24.11.2008 12:58
Продвинутый импорт данных npsb Microsoft Office Access 0 28.02.2008 14:38
Собрать и развернуть грид Hollander Общие вопросы .NET 1 20.02.2008 20:24
Сложный грид pkv БД в Delphi 15 09.11.2007 14:08