Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Переход через поле в 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо