Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Тут можно читать онлайн Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Советы по Delphi. Версия 1.4.3 от 1.1.2001
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - описание и краткое содержание, автор Валентин Озеров, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

…начиная с 1001. Смотрите другие файлы…

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать книгу онлайн бесплатно, автор Валентин Озеров
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Nomadicотвечает:

Здесь отрывки из исходников VCL —

unitDBGrids;

procedureTCustomDBGrid.UpdateScrollBar;

var

SIOld, SINew: TScrollInfo;

begin

[skipped]

if IsSequenced then begin

SINew.nMin := 1;

SINew.nPage := Self.VisibleRowCount;

SINew.nMax := RecordCount + SINew.nPage -1;

ifState in[dsInactive, dsBrowse, dsEdit] thenSINew.nPos := RecNo; // else keep old pos

end else begin

SINew.nMin := 0;

SINew.nPage := 0;

SINew.nMax := 4;

ifBOF thenSINew.nPos := 0

else ifEOF thenSINew.nPos := 4

elseSINew.nPos := 2;

end;

[skipped]

unitdbtables;

functionTBDEDataSet.IsSequenced: Boolean;

begin

Result := (FRecNoStatus = rnParadox) and( notFiltered);

end;

То есть, к примеру, все будет работать «красиво» на таблицах BDE, если они:

• таблицы Paradox;

• на них не установлен фильтр.

TClientDataSetв режиме single-tier (briefcase) также работает «красиво».

Изменение месторасположение колонок в TDBGrid

Delphi 1

Var

i: Integer;

fName: string;

…………

{ Определение изменения месторасположения колонок }

…………

with dbgrid1.datasource.dataset asttable do

for i := 0 toindexdefs.count – 1 do begin

fName := DBGrid1.Fields[0].FieldName;

ifcopy(indexdefs[i].fields, 1, length(fname)) = fname thenIndexName := IndexDefs[i].Name

end;

Решение проблемы передачи фокуса TDBGrid

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

Относится ко всем версиям Delphi.

Очевидно, DBGrid имеет некоторые проблемы с управлением фокусом, если он находится на дочерней MDI-форме. Эта проблема решена в приведенном ниже наследнике TDBGrid, в котором обрабатываются мышиные сообщения и выясняется когда фокус должен быть передан сетке. Наследник создан в виде компонента, который легко устанавливается в Палитру Компонентов. Примечание: код адаптирован для всех версий Delphi. Проблемы могут быть в Delphi 2 и 3, если вы забудете заменить устаревшие в этих версиях модули "winprocs" и "wintypes" на "windows."

unitFixedDBGrid;

interface

usesWinprocs,wintypes, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids;

typeTFixedDBGrid = class(TDBGrid)

private

{ Private declarations }

protected

{ Protected declarations }

public

{ Public declarations }

procedureWMRButtonDown( var Message: TWMRButtonDown); messageWM_RBUTTONDOWN;

procedureWMLButtonDown( var Message: TWMLButtonDown); messageWM_LBUTTONDOWN;

published

{ Published declarations }

end;

procedure Register;

implementation

procedureTFixedDBGrid.WMRButtonDown( var Message: TWMRButtonDown);

begin

winprocs.SetFocus(handle); {помните, что winprocs относится только к Delphi 1!}

inherited;

end;

procedureTFixedDBGrid.WMLButtonDown( var Message: TWMLButtonDown);

begin

winprocs.SetFocus(handle); {помните, что winprocs относится только к Delphi 1!}

inherited;

end;

proceduretfixeddbgrid.wmlbuttondown( var Message: twmlbuttondown);

begin

winprocs.SetFocus(handle); {помните, что winprocs относится только к Delphi 1!}

inherited;

end;

procedure Register;

begin

RegisterComponents('Samples', [TFixedDBGrid]);

end;

end.

Как отучить TDBGrid от автодобавления новой записи?

Добавьте в обработчик события вашего TTable «BeforeInsert» следующую строку:

procedureTForm1.Tbable1BeforeInsert(DataSet: TDataset);

begin

Abort; ← эту строчку

end;

Осуществляем перехват нажатия клавиши и проверку на конец файла (end-of-file):

procedureTForm8.DBGrid1KeyDown(Sender: TObject; varKey: Word; Shift: TShiftState);

begin

if(Key = VK_DOWN) then begin

TTable1.DisableControls;

TTable1Next;

ifTTable1.EOF thenKey := 0

elseTTable1.Prior;

TTable1.EnableControls;

end;

end;

Две таблицы в одном TDBGrid

Delphi 2

Если у вас D2, вы можете воспользоваться свойством Lookup. Для этого выберите в контекстном меню объекта table редактор полей (fields editor). Затем для добавления нового поля нажмите +N. Просто раскройте combobox и выберите lookup-поле. TDBGrid автоматически создаст выпадающий список, в котором пользователь сможет выбрать нужный элемент.

Добавление к TDBGrid события OnClick

Delphi 1

TGroothuisGrid = class() {!}

published

propertyOnClick;

end;

Это все! OnClick уже объявлен в TControl как защищенное свойство. Все, что вы должны сделать, это опубликовать это свойство в компоненте-наследнике, зарегистрировать его (смотри гл. 8 Руководства по созданию компонентов, Component Writer's Guide) и использовать взамен TDBGrid.

Позиция ячейки в TDBGrid

Delphi 1

В TCustomGrid определен метод CellRect, который, к сожалению, защищен. Это означает, что даный метод доступен только для TCustomGrid и его наследников. Но все-таки существует немного мудреное решение вызова данного метода:

typeTMyDBGrid = class(TDBGrid)

public

functionCellRect(ACol, ARow: Longint): TRect;

end;

functionTMyDBGrid.CellRect(ACol, ARow: Longint): TRect;

begin

Result := inheritedCellRect(ACol, ARow);

end;

Вы можете сделать приведение типа вашего DBGrid к TMyDBGrid (это возможно, поскольку CellRect статический метод) и вызвать CellRect:

Rectangle := TMyDBGrid(SomeDBGrid).CellRect(SomeColumn, SomeRow);

procedureTfmLoadIn.DBGrid1DrawColumnCell(Sender: TObject; constRect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState);

constDisp = 2; //Правильно выравниваем компонент

begin

inherited;

if(gdFocused inState) then begin

if(Column.FieldName = 'TYPEDescription') then begin

dlTYPEDescription.Left := Rect.Left + DBGrid1.Left + Disp;

dlTYPEDescription.Top := Rect.Top + DBGrid1.top + Disp;

dlTYPEDescription.Width := Rect.Right – Rect.Left;

dlTYPEDescription.Height := Rect.Bottom – Rect.Top;

dlTYPEDescription.Visible := True;

end;

end;

end;

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

Delphi 1

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Валентин Озеров читать все книги автора по порядку

Валентин Озеров - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Советы по Delphi. Версия 1.4.3 от 1.1.2001, автор: Валентин Озеров. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x