Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.47 MB
Время: 0.008 c
2-1145938297
Rubey
2006-04-25 08:11
2006.05.14
Отловить нажатие кнопки


15-1145311792
pargo
2006-04-18 02:09
2006.05.14
Два компьютера и одна антивирусная программа


9-1129754635
Ricks
2005-10-20 00:43
2006.05.14
Элементарный поиск пути


2-1145588748
Tans
2006-04-21 07:05
2006.05.14
Help!


1-1144302805
AlexeyT
2006-04-06 09:53
2006.05.14
Слетает форматирование RichEdit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский