Форум: "Базы";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];
ВнизTab and DBGrid? Найти похожие ветки
← →
SEA1 (2002-05-21 14:02) [0]Мастера, добрый день! Подскжите, пжлста. Ситуация такова: при перемещении Tab-ом по DBGrid после прохождения всех столбцов записи, нажатие Tab приводит к добавлению новой записи. В идеале хотелось бы, чтобы по окончании всех столбцов записи, нажатие Tab перемещало бы фокус на соседний DBEdit например. Задание TabOrder=0 для DBGrid,а TabOrder=1 для DBEdit такого результата не дает. (Хотя бы отменить вставку новой записи при прохождении всех полей одной записи Tab-ом).
← →
Johnmen (2002-05-21 14:11) [1]Обрабатывать OnKeyDown для грида...
← →
SEA1 (2002-05-21 14:25) [2]В общем ситуация ясна, спасибо.
← →
kaif (2002-05-21 14:26) [3]Вставь в обработчик BeforeInsert набора данных (DataSet-а):
if DBGrid1.Focused then
Abort;
тогда ни при каких условиях в DBGrid1 нельзя будет добавить новую запись.
← →
Nikols (2002-05-21 14:59) [4]Компонент - наследник от грида с решением.
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.
← →
Johnmen (2002-05-21 15:32) [5]>Nikols © (21.05.02 14:59)
Одна беда - не будет корректно работать...:)
← →
Nikols (2002-05-21 15:58) [6]> Johnmen ©
А именно?
← →
Johnmen (2002-05-21 16:05) [7]>Nikols ©
>if DataSource.DataSet.RecNo <> DataSource.DataSet.RecordCount
Неправомочно, т.к. свойство RecNo не может быть определено...
← →
Nikols (2002-05-21 16:21) [8]Да, для Query действительно не работает. Я его использовал с TClientDataSet. Но для TTable тоже работает...
← →
Lusha (2002-05-21 16:30) [9]>Nikols © (21.05.02 14:59)
Метода SelectNextControl у TWinControl я что то тоже не наблюдаю... Да, и для того, чтобы добраться до protected метода достаточно лишь переопределения
TMyWinControl = class(TWinControl);
С TDBNikolsGrid таже история...
← →
Johnmen (2002-05-21 16:31) [10]>Nikols © (21.05.02 16:21) : Для DBase может быть, а вот для [IB6.x] точно нет...
← →
Nikols (2002-05-21 16:46) [11]Ну вот и ограничения обговорили. Вопрошающий решит, использовать компонент или нет.
← →
roottim (2002-05-21 16:51) [12]а почему бы просто не отрубить таб в опциях грида?
тогда контрол по табу слезет с него.. единственное что, по ячейкам перемещение будет стрелкой!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c