Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Название:Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание
…начиная с 1001. Смотрите другие файлы…
Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
FFreezeCols := ?;
_HideColumnsValues := TList.Create;
_HideColumns := TList.Create;
end;
// ----------------------------------------------------------------------------
procedureTDbGridEx.KeyDown( varKey: Word; Shift: TShiftState);
begin
if(Key = VK_LEFT) thenColBeforeEnter(-1);
if(Key = VK_RIGHT) thenColBeforeEnter(1);
inherited;
end;
// ----------------------------------------------------------------------------
procedureTDbGridEx.SetFreezeColor(AColor : TColor);
begin
InvalidateRow(0);
end;
// ----------------------------------------------------------------------------
procedureTDbGridEx.SetFreezeCols(AFreezeCols : Integer);
begin
FFreezeCols := AFreezeCols;
InvalidateRow(0);
end;
// ----------------------------------------------------------------------------
procedureTDbGridEx.ColEnter;
begin
ColBeforeEnter(0);
ifAssigned(OnColEnter) thenOnColEnter(Self);
end;
// ----------------------------------------------------------------------------
procedureTDbGridEx.ColBeforeEnter(ADelta : Integer);
varnIndex : Integer;
functionReadWidth : Integer;
vari : Integer;
begin
i := _HideColumns.IndexOf(Columns[nIndex]);
ifi = -1 thenresult := 120
elseresult := Integer(_HideColumnsValues[i]);
end;
procedureSaveWidth;
vari : Integer;
begin
i := _HideColumns.IndexOf(Columns[nIndex]);
ifi <> - 1 then begin
_HideColumnsValues[i] := Pointer(Columns[nIndex].Width);
end else begin
_HideColumns.Add(Columns[nIndex]);
_HideColumnsValues.Add(Pointer(Columns[nIndex].Width));
end;
end;
begin
fornIndex := 0 toColumns.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;
….
procedureTfrmCard.GridDrawColumnCell(Sender: TObject; constRect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState);
var
Index : Integer;
Marked, Selected: Boolean;
begin
Marked := False;
if(dgMultiSelect inGrid.Options) andTHackDBGrid(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);
ifMarked then begin
Grid.Canvas.Brush.Color:=$DFEFDF;
Grid.Canvas.Font.Color :=clBlack;
end;
ifSelected then begin
Grid.Canvas.Brush.Color:=$FFFBF0;
Grid.Canvas.Font.Color :=clBlack;
ifMarked thenGrid.Canvas.Brush.Color:=$EFE3DF; { $8F8A30 }
end;
Grid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
где
THackDBGrid = class(TDBGrid)
propertyDataLink;
propertyUpdateLock;
end;
Обратите внимание на обьявление класса THackDBGrid. Таким образом можно получить доступ к приватным полям, свойствам и методам класса, что, к сожалению, приходится делать, если авторы исходного класса оказались не предусмотрительны.
Dbgrid с цветными ячейками V
Delphi 1
Попробуйте следующий код в обработчике события TDBGrid OnDrawDataCell:
ProcedureTForm1.DBGrid1DrawDataCell(Sender: TObject; constRect: TRect; Field: TField; State: TGridDrawState);
begin
IfgdFocused inState then with(Sender asTDBGrid).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. Это чрезвычайно полезно в случае, если вы, к примеру, хотите получить выпадающий список на месте редактируемой пользователем ячейки.
}
unitVUBComps;
interface
usesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Forms, Dialogs, Grids, DBGrids, DB, Menus;
typeTDBGridVUB = class(TDBGrid)
private
{ Private declarations }
protected
{ Protected declarations }
public
propertyCanvas;
functionCellRect(ACol, ARow: Longint): TRect;
propertyCol;
propertyRow;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('VUBudget', [TDBGridVUB]);
end;
functionTDBGridVUB.CellRect(ACol, ARow: Longint): TRect;
begin
Result := inheritedCellRect(ACol, ARow);
end;
end.
Пример Drag and Drop между двумя Dbgrid
Delphi 3
Данный пример компонента и демонстрационный проект показывают простой путь осуществления операции "drag and drop" (перетащи и брось) между двумя полями различных табличных сеток.
Запустите Delphi 3 (с незначительными изменениями данный код может работать и в Delphi 1-2).
Активизируйте File|New|Unit. Скопируйте приведенный ниже модуль MyDBGrid во вновь созданный модуль. Сделайте File|Save As. Сохраните модуль как MyDBGrid.pas.
Выберите пункт меню Component|Install Component. Переключитесь на страницу Info New Package. Поместите MyDBGrid.pas в поле редактирования "Unit file name" (имя файла модуля). Назовите модуль MyPackage.dpk. Ответьте Yes на вопрос Delphi 3 о необходимости сборки и установки пакета. Нажмите OK на сообщение Delphi 3 о необходимости включения VCL30.DPL. После этого пакет будет собран и установлен. Теперь компонент TMyDBGrid будет отображен в Палитре Компонентов в группе "Samples". Закройте редактор пакетов и сохраните пакет.
Читать дальшеИнтервал:
Закладка: