Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

_HideColumns.Add(Columns[nIndex]);

_HideColumnsValues.Add(Pointer(Columns[nIndex].Width));

end;

 end;

begin

 for nIndex := 0 to Columns.Count - 1 do begin

if (Columns[nIndex].Width = 0) then begin

if (nIndex + 1 <= FreezeCols) or (nIndex >= SelectedIndex + ADelta) then

Columns[nIndex].Width := ReadWidth;

end else begin

SaveWidth;

if (nIndex + 1 > FreezeCols) and (nIndex < SelectedIndex + ADelta) and

(nIndex + 1 < Columns.Count) and (FreezeCols > 0) then

Columns[nIndex].Width := 0;

end;

 end;

end;

Dbgrid

с цветными ячейками IV

Nomadic советует:

Hапример, так:

DefaultDrawing:=False;

….

procedure TfrmCard.GridDrawColumnCell(Sender: TObject; constRect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState);

var

 Index : Integer;

 Marked, Selected: Boolean;

begin

 Marked := False;

 if (dgMultiSelect in Grid.Options) and THackDBGrid(Grid).Datalink.Active then

 Marked:=Grid.SelectedRows.Find(THackDBGrid(Grid).Datalink.Datasource.Dataset.Bookmark, Index);

 Selected := THackDBGrid(Grid).Datalink.Active and (Grid.Row-1 = THackDBGrid(Grid).Datalink.ActiveRecord);

 if Marked then begin

Grid.Canvas.Brush.Color:=$DFEFDF;

Grid.Canvas.Font.Color :=clBlack;

 end;

 if Selected then begin

Grid.Canvas.Brush.Color:=$FFFBF0;

Grid.Canvas.Font.Color :=clBlack;

if Marked then Grid.Canvas.Brush.Color:=$EFE3DF; { $8F8A30 }

 end;

 Grid.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;

где

THackDBGrid = class(TDBGrid)

 property DataLink;

 property UpdateLock;

end;

Обратите

внимание на обьявление класса THackDBGrid. Таким образом можно получить доступ к приватным полям, свойствам и методам класса, что, к сожалению, приходится делать, если авторы исходного класса оказались не предусмотрительны. 

Dbgrid с цветными ячейками V

Delphi 1 

Попробуйте следующий код в обработчике события TDBGrid OnDrawDataCell:

Procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);

begin

 If gdFocused in State then with (Sender as TDBGrid).Canvas do begin

Brush.Color := clRed;

FillRect(Rect);

TextOut(Rect.Left, Rect.Top, Field.AsString);

 end;

end;

Установите рисование по умолчинию (Default drawing) в True. Только после этого можно нарисовать выделенную ячейку. Если вы установили DefaultDrawing в False, вы должны сами рисовать все ячейки, используя свойство Canvas. 

Что я получаю от наличия ConstraintBroker (брокера ограничений)?

Nomadic отвечает:

ConstraintBroker позволяет Вам включать проверки на ограничения в данные.

Это означает, что когда Вы запрашиваете данные, Вы получаете вместе с ними и правила, которым они дорлжны удовлетворять. Эти правила автоматически без дополнительного кода входят в силу.

Поскольку это происходит без единой строчки кода, то Вам не требуется переписывать или обновлять приложение каждый раз при изменении правил.

Фактически это простое решение задачи обновления клиентского приложения без выхода из него.

Каждое приложение, использующее ConstraintBroker, автоматически получает это качество…

Улучшенный Dbgrid

Delphi 1

{

Код улучшенного TDBGrid, имеющего свойства Col, Row и Canvas и метод CellRect. Это чрезвычайно полезно в случае, если вы, к примеру, хотите получить выпадающий список на месте редактируемой пользователем ячейки.

}

unit VUBComps;

interface

uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Forms, Dialogs, Grids, DBGrids, DB, Menus;

type TDBGridVUB = class(TDBGrid)

private

{ Private declarations }

protected

 { Protected declarations }

Поделиться с друзьями: