![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
аналог 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-)