Форум: "Базы";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];
ВнизПереход через поле в DBGrid Найти похожие ветки
← →
kyn66 © (2006-03-22 10:07) [0]При переходе в 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;
← →
clickmaker © (2006-03-22 10:35) [1]
> пропускакивали
забавное словцо.
Проверяй поле на ридонли. Если оно, индекс увеличивай не на 1, а на 2
← →
kyn66 © (2006-03-22 10:39) [2]> 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;
← →
Плохиш © (2006-03-22 11:01) [3]
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 12:05) [4]>Плохиш
Не верно работает. Сделал вот так, но код какойто ........ый 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 12:13) [5]
> kyn66 © (22.03.06 12:05) [4]
> >Плохиш
> Не верно работает.
И в чём "неверность" заключается?
← →
kyn66 © (2006-03-22 13:23) [6]>>Плохиш
"Доходные столбцы" не проскакивают, идут все подряд. Вот рабочий вариант, тока повторения имеются, ч хотел как-нить без них
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;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c