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

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

Tab and DBGrid? [D6, IB6.x]


SEA1 ©   (2002-05-21 14:02:00) 

Мастера, добрый день! Подскжите, пжлста. Ситуация такова: при перемещении Tab-ом по DBGrid после прохождения всех столбцов записи, нажатие Tab приводит к добавлению новой записи. В идеале хотелось бы, чтобы по окончании всех столбцов записи, нажатие Tab перемещало бы фокус на соседний DBEdit например. Задание TabOrder=0 для DBGrid,а TabOrder=1 для DBEdit такого результата не дает. (Хотя бы отменить вставку новой записи при прохождении всех полей одной записи Tab-ом).


roottim   (2002-05-21 16:51:00) [1]

а почему бы просто не отрубить таб в опциях грида?
тогда контрол по табу слезет с него.. единственное что, по ячейкам перемещение будет стрелкой!


Nikols   (2002-05-21 16:46:00) [2]

Ну вот и ограничения обговорили. Вопрошающий решит, использовать компонент или нет.


Johnmen   (2002-05-21 16:31:00) [3]

>Nikols © (21.05.02 16:21) : Для DBase может быть, а вот для [IB6.x] точно нет...


Lusha   (2002-05-21 16:30:00) [4]

>Nikols © (21.05.02 14:59)
Метода SelectNextControl у TWinControl я что то тоже не наблюдаю... Да, и для того, чтобы добраться до protected метода достаточно лишь переопределения
TMyWinControl = class(TWinControl);

С TDBNikolsGrid таже история...


Nikols   (2002-05-21 16:21:00) [5]

Да, для Query действительно не работает. Я его использовал с TClientDataSet. Но для TTable тоже работает...


Johnmen   (2002-05-21 16:05:00) [6]

>Nikols ©
>if DataSource.DataSet.RecNo <> DataSource.DataSet.RecordCount

Неправомочно, т.к. свойство RecNo не может быть определено...


Nikols   (2002-05-21 15:58:00) [7]

> Johnmen ©
А именно?


Johnmen   (2002-05-21 15:32:00) [8]

>Nikols © (21.05.02 14:59)
Одна беда - не будет корректно работать...:)


Nikols   (2002-05-21 14:59:00) [9]

Компонент - наследник от грида с решением.

unit DBNikolsGrid;

interface

uses
SysUtils, Classes, Controls, DB, Graphics, Forms, WinTypes, Messages,
dbgrids;

type
TMyWinControl = class(TWinControl)
public
procedure SelectNextControl(CurControl: TWinControl; GoForward, CheckTabStop: Boolean);
end;

TDBNikolsGrid = class(TDBGrid)
private
protected
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
public
published
property OnMouseDown;
Property OnMouseMove;
Property OnMouseUp;
property Columns;
end;

procedure Register;

implementation

procedure TMyWinControl.SelectNextControl(CurControl: TWinControl; GoForward, CheckTabStop: Boolean);
begin
SelectNextControl(CurControl, GoForward, CheckTabStop);
end;

procedure TDBNikolsGrid.KeyDown(var Key: Word;
Shift: TShiftState);
begin
if DataSource = nil then exit;
if DataSource.DataSet = nil then exit;
case Key of
VK_DOWN: begin
if DataSource.DataSet.RecNo <> DataSource.DataSet.RecordCount then
inherited KeyDown(Key, Shift);
end;
VK_TAB: begin
if (DataSource.DataSet.RecNo = DataSource.DataSet.RecordCount) AND
(Col = Columns.Count) then
begin
TMyWinControl(Owner).SelectNext(self as TWinControl, True, True);
exit;
end
else inherited KeyDown(Key, Shift);
end
else inherited KeyDown(Key, Shift);
end;
end;

procedure Register;
begin
RegisterComponents("Nikols", [TDBNikolsGrid]);
end;

end.


kaif   (2002-05-21 14:26:00) [10]

Вставь в обработчик BeforeInsert набора данных (DataSet-а):

if DBGrid1.Focused then
Abort;

тогда ни при каких условиях в DBGrid1 нельзя будет добавить новую запись.


SEA1   (2002-05-21 14:25:00) [11]

В общем ситуация ясна, спасибо.


Johnmen   (2002-05-21 14:11:00) [12]

Обрабатывать OnKeyDown для грида...


Наверх

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