Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

аналог DBGrid, наследник TGraphicControl


q-q ©   (2006-05-11 16:02:00) 

как сделать, или где взять аналог DBGrid, наследник TGraphicControl, со свойством Transparent (нужен прозрачный грид только для отбражения данных и навигации по ним)


Игорь Шевченко   (2006-05-12 15:50:00) [1]

Достаточно вдумчиво переписать метод Paint у Grid'а. Стандартный метод явно затирает всю область вне текста цветом самого грида.


q-q   (2006-05-12 13:51:00) [2]

Loginov Dmitry ©   (11.05.06 19:23)
Да и в обычном Гриде такое можно сотворить (при прорисовке ячеек копировать кусочек фона из TBitmap ...


Делаю так

type
 TDBGrid = class(DBGrids.TDBGrid)
 private
   FBmp: TBitmap;
 protected
   procedure Scroll(Distance: Integer); override;
   procedure Paint; override;
   procedure DrawColumnCell(const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); override;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 end;

constructor TDBGrid.Create(AOwner: TComponent);
begin
 inherited;
 FBmp := TBitmap.Create;
 FBmp.LoadFromFile('maket.bmp');
 ScrollBars := ssVertical;
end;

destructor TDBGrid.Destroy;
begin
 FBmp.Free;
 inherited;
end;

procedure TDBGrid.DrawColumnCell(const Rect: TRect; DataCol: Integer;
 Column: TColumn; State: TGridDrawState);
var
 Value: String;
 R: TRect;
begin
FBmp.Canvas.Handle, Rect.Left, Rect.Top, SRCCOPY);
 Windows.BitBlt(Canvas.Handle, Rect.Left, Rect.Top-1, Rect.Right, Rect.Bottom-1, FBmp.Canvas.Handle, Rect.Left, Rect.Top, SRCCOPY);
 Canvas.Brush.Style := bsClear;
 R := Rect;
 Value := Column.Field.AsString;
 DrawText(Canvas.Handle, PChar(Value), Length(Value), R, DT_LEFT or DT_VCENTER);
 inherited;
end;

procedure TDBGrid.Paint;
var
 DrawInfo: TGridDrawInfo;
begin
 CalcDrawInfo(DrawInfo);
 inherited;
 with DrawInfo do
 begin
   { Fill in area not occupied by cells }
   if Horz.GridBoundary < Horz.GridExtent then
   begin
     Windows.BitBlt(Canvas.Handle, Horz.GridBoundary, -1, Horz.GridExtent, Vert.GridBoundary-1,
     FBmp.Canvas.Handle, Horz.GridBoundary, 0, SRCCOPY);
   end;
   if Vert.GridBoundary < Vert.GridExtent then
   begin
     Windows.BitBlt(Canvas.Handle, 0, Vert.GridBoundary, Horz.GridExtent, Vert.GridExtent,
      FBmp.Canvas.Handle, 0, Vert.GridBoundary, SRCCOPY);
   end;
 end;
end;

procedure TDBGrid.Scroll(Distance: Integer);
begin
inherited;
 InvalidateRect(Handle, nil, False);
end;

Противно мерцает


Loginov Dmitry   (2006-05-11 19:23:00) [3]

q-q   (11.05.06 16:34) [3]
Грид нужен по необходимости, надо выводить поверх картинки данные в виде таблицы из БД


Да и в обычном Гриде такое можно сотворить (при прорисовке ячеек копировать кусочек фона из TBitmap, а затем уж и сам текст рисовать)


Elen   (2006-05-11 16:59:00) [4]

Есть бесплатные или с кряком компоненты в ИНете и тот-же LMD (Кстати появилась новая версия) и остальные. Ты просто плохо искал


q-q   (2006-05-11 16:34:00) [5]

LMD да и QuantiumGrid - платные
Грид нужен по необходимости, надо выводить поверх картинки данные в виде таблицы из БД


Elen   (2006-05-11 16:28:00) [6]

Поройся среди компонентов. Кажется что-то было в LMD да и QuantiumGrid можно наити в ИНете там кажется это предусмотренно


Sergey13   (2006-05-11 16:13:00) [7]

>нужен прозрачный грид
чем только люди не занимаются. 8-)


Наверх

Титульная страница Поиск, карта сайта Написать письмо