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