Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-40024
Alex is Fecit
2002-05-29 21:49
2002.06.13
---|Ветка была без названия|---


1-39989
CrazyAngel
2002-06-01 17:31
2002.06.13
Разделение программы на потоки


14-40164
Cobalt
2002-05-07 07:10
2002.06.13
Поправки в уголовный кодекс


3-39940
SkyWalker
2002-05-20 13:17
2002.06.13
ADO


1-40057
Новеньки в Делфи
2002-06-01 20:13
2002.06.13
CopyFile





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский