![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Переход через поле в DBGrid [D7, WinXP]
kyn66 © (2006-03-22 10:07:00)При переходе в TEDit использую:
procedure TReestrFrm.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
SelectNext(Sender as TWinControl, True, True );
Key := #0;
end;
end;
По такому принципу мне нужно сделать переходы по полям Grid-а. Делаю так :
procedure TReestrFrm.Rep01DBGridKeyPress(Sender: TObject;
var Key: Char);
begin
if Key = #13 then
try
if Grid.Columns.Grid.SelectedIndex < Grid.Columns.Count - 1 then
Grid.Columns[Grid.Columns.grid.SelectedIndex + 1].Field.FocusControl
else
begin
Tab.Next;
Grid.Columns[0].field.FocusControl
end;
finally
Key := #0;
end;
end;
Однако ситуация такая, что в гриде 9 столбцов. И по порядку они идут как 1-количество, 2-сумма, 3-доход и т.д. Та вот, поле доход у меня автовычисляемое и имеет атрибут Readonly. Т.е. мне нужно, чтобы по нажатии Enter поля доходов пропускакивали. Ведь здесь я не могу указать TAborder := 0;
kyn66 (2006-03-22 13:23:00) [1]>>Плохиш
"Доходные столбцы" не проскакивают, идут все подряд. Вот рабочий вариант, тока повторения имеются, ч хотел как-нить без них
if Key = #13 then
try
if (Grid.Columns.Grid.SelectedIndex < Grid.Columns.Count - 1) then
begin
if (not Grid.Columns.Grid.Fields[Grid.SelectedIndex + 1].ReadOnly) then
Grid.Columns[Grid.Columns.grid.SelectedIndex + 1].Field.FocusControl
else
if (Grid.Columns.Grid.Fields[Grid.SelectedIndex + 2] <> nil) then
Grid.Columns[Grid.Columns.grid.SelectedIndex + 2].Field.FocusControl
else
begin
Tab.Next;
Grid.Columns[IIF(RepKod in RupsSet, 0, 1)].field.FocusControl
end;
end
else
begin
Tab.Next;
Grid.Columns[IIF(RepKod in RupsSet, 0, 1)].field.FocusControl
end;
finally
Key := #0;
end;
Плохиш (2006-03-22 12:13:00) [2]
> kyn66 © (22.03.06 12:05) [4]
> >Плохиш
> Не верно работает.
И в чём "неверность" заключается?
kyn66 (2006-03-22 12:05:00) [3]>Плохиш
Не верно работает. Сделал вот так, но код какойто ........ый 8-(
if Key = #13 then
try
if (Grid.Columns.Grid.SelectedIndex < Grid.Columns.Count - 1) then
begin
if (not Grid.Columns.Grid.Fields[Grid.SelectedIndex + 1].ReadOnly) then
begin
Grid.Columns[Grid.Columns.grid.SelectedIndex + 1].Field.FocusControl;
end
else
begin
if (Grid.Columns.Grid.Fields[Grid.SelectedIndex + 2] <> nil) then
begin
Grid.Columns[Grid.Columns.grid.SelectedIndex + 2].Field.FocusControl;
end
else
begin
Tab.Next;
Grid.Columns[0].field.FocusControl
end;
end;
end
else
begin
Tab.Next;
Grid.Columns[0].field.FocusControl
end;
finally
Key := #0;
end;
Плохиш (2006-03-22 11:01:00) [4]
procedure TReestrFrm.Rep01DBGridKeyPress(Sender: TObject;
var Key: Char);
var
idxNew: Integer;
begin
if Key = #13 then
try
idxNew := Grid.SelectedIndex;
repeat
Inc(idxNew);
if idxNew = Grid.FieldCount then
begin
idxNew:=0;
tab.Next;
end;
until (not Grid.Fields[idxNew].ReadOnly) or
(tab.eof and idxNew = (Grid.FieldCount-1));
Grid.SelectedIndex := idxNew;
finally
Key := #0;
end;
end;
kyn66 (2006-03-22 10:39:00) [5]> clickmaker 8-)))
Я так и начал делать, но совсем запутался. Ведь там у меня ешшо идет проверка на последний столбец, если последний, то переходить на первый в следующей строке. А вот это последний как раз и есть "доходный".
procedure TReestrFrm.Rep01DBGridKeyPress(Sender: TObject;
var Key: Char);
begin
if Key = #13 then
try
if (Grid.Columns.Grid.SelectedIndex < Grid.Columns.Count - 1) and
(Grid.Columns.Grid.Fields[Grid.SelectedIndex + 1] <> nil) then
begin
if (not Grid.Columns.Grid.Fields[Grid.SelectedIndex + 1].ReadOnly) and
(Grid.Columns.Grid.Fields[Grid.SelectedIndex + 2] <> nil) then
Grid.Columns[Grid.Columns.grid.SelectedIndex + 1].Field.FocusControl
else
Grid.Columns[Grid.Columns.grid.SelectedIndex + 2].Field.FocusControl
end
else
begin
Tab.Next;
Grid.Columns[0].field.FocusControl
end;
finally
Key := #0;
end;
end;
clickmaker (2006-03-22 10:35:00) [6]
> пропускакивали
забавное словцо.
Проверяй поле на ридонли. Если оно, индекс увеличивай не на 1, а на 2