Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.13;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
4-40209
KoLega
2002-04-11 23:09
2002.06.13
А как програмно удалить файл, чтобы он не попадал в корзину?


1-40029
SLY-YO
2002-06-01 04:06
2002.06.13
Как программно запустить программу из *.res файла


14-40147
ZimZum
2002-05-07 22:41
2002.06.13
Браузер в Дельфи


7-40194
Win32
2002-03-15 17:27
2002.06.13
Клавиши на клаве


1-40098
kolobok11
2002-06-02 23:11
2002.06.13
Help ! Не могу получить имя файла *.dll с помощью TOpenDialog.