Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
1

Передать фокус на TStringGrid по нажатию кнопки

30.05.2014, 13:37. Показов 1774. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, подскажите как реализовать данную задумку ... мне нужно чтобы по нажатии кнопки фокус перемещался на StringGrid и выполнял функцию OnClick StringGrida, хочу что бы не приходилось при изменении значений в строке не приходилось каждый раз нажимать на таблицу чтобы менялись значения ... Всем Спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2014, 13:37
Ответы с готовыми решениями:

По нажатию кнопки webBrowser должен получить фокус
По нажатию кнопки webBrowser должен получить фокус. Browser.Focus() срабатывает через раз. Т.е....

После нажатия кнопки на форме передать фокус ячейке на листе
Сделал некий обработчик содержимого ячеек. Нужно обработать много ячеек в индивидуальном порядке....

Передать объект из BaseAdapter по нажатию кнопки в другое activity через
Здравствуйте, помогите со следующей задачей: Есть объект с ценой и наименованием, описание провожу...

Как в Web Application по нажатию кнопки передать все элементы страницы
Всем привет, с ASP.NET Web Application знаком недавно, и возникла проблема, на форме есть много...

15
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
30.05.2014, 14:17 2
Да пожалуйста:
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::Button1Click(TObject *Sender)
{
StringGrid1->SetFocus(); // Непонятно зачем
StringGrid1->OnClick( Sender );
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
ShowMessage( "StringGrid click!" );
}
1
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
30.05.2014, 14:27  [ТС] 3
не работает
дело в том что у меня переменная присваивает значение строки Row
C++
1
k=StringGrid19->Row;
и мне надо когда я меняю значения ))) по кнопке присваивалась Row ... но по нажатию на кнопку таблица становиться уже не активной и Row принимает предыдущее значение строки 0, как обновлять тогда Row ?
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
30.05.2014, 14:36 4
Заведите себе переменную, это успокаивает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int GlobalRow;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage( GlobalRow );
//StringGrid1->OnClick( Sender );
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
GlobalRow = StringGrid1->Row;
}
Добавлено через 15 секунд
P.S. Да, я вас не слушаю. Х)
1
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
30.05.2014, 14:47  [ТС] 5
Ну да, и покажет она тот Row на который мы клацнули мышкой, либо прокрутили стрелками на клаве, а если мы нажмем на ScrolBar либо на кнопку ... Таблица становиться не активной, и значения Row будут принимать то что было, а не то что стало
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
30.05.2014, 15:05 6
Цитата Сообщение от Dostik Посмотреть сообщение
будут принимать то что было, а не то что стало
Значит оно не стало.

Добавлено через 2 минуты
Вы же прокрутили, но никуда не ткнули. Ничего не изменилось.
1
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
30.05.2014, 15:12  [ТС] 7
Смотрите я заношу значения в ячейки таблицы, так как у меня данные читаются из файла и я не знаю сколько у меня может быть строк, выполняется цикл заполнения ячеек, затем я определяю сколько у меня строк через Row, и далее чтобы мне посмотреть информацию из файла я нажимаю на скролбар но нечего не происходи, в таблице данные показывает что обновились, но переменная (к) не получает нужный Row

Добавлено через 1 минуту
Вот я и хочу чтобы по нажатию кнопки ... производилось считывание Row и присвоение его к переменной (к)

Добавлено через 3 минуты
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Вы же прокрутили, но никуда не ткнули. Ничего не изменилось.
да да, вот я и хочу сделать это на кнопку, чтобы производить изменения но не знаю как
C++
1
2
3
4
void __fastcall TForm1::Button21Click(TObject *Sender)
{
StringGrid19->Row;
}
Так тоже нечего не происходит
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
30.05.2014, 15:14 8
Цитата Сообщение от Dostik Посмотреть сообщение
Так тоже нечего не происходит
А вот так:
C++
1
2
3
4
void __fastcall TForm1::Button21Click(TObject *Sender)
{
k=StringGrid19->Row;
}
0
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
30.05.2014, 15:20  [ТС] 9
Забыл написать что так тоже пробовал нечего не происходит (( потому как при нажатии на кнопку программа теряет строку
Пробовал даже так
C++
1
2
3
4
void __fastcall TForm1::Button21Click(TObject *Sender)
{
Rul_Sel();
}
а далее :
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Rul_Sel()
{
k=StringGrid19->Row-1;
 SetFilePointer(fser,(sizeof(str_sm)+(k*sizeof(ser))),NULL,FILE_BEGIN);
 ReadFile(fser,&sr,sizeof(ser),&lread,NULL);
// и т.д
}
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
30.05.2014, 15:36 10
Цитата Сообщение от Dostik Посмотреть сообщение
при нажатии на кнопку программа теряет строку
При каждом изменении строки записывайте ее в какую-либо переменную. Не из другой кнопки, а именно из обработчика нажатия. И вот эту вот переменную используйте уже внутри кнопки.
1
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
30.05.2014, 15:39  [ТС] 11
Простите за наглость, просто я уже настолько запутался ... вы не могли бы мне привести пример ... на моем куске ? пожалуйста ... не пойму как это реализовать, Большое вам спасибо
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
30.05.2014, 15:43 12
Ну а вот это вот: Передать фокус на TStringGrid по нажатию кнопки ? Это и есть пример.
В StringGrid1Click обрабатывается нажатие, заносится в переменную. А в Button1Click уже используется.
1
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
30.05.2014, 15:47  [ТС] 13
Буду сейчас пробовать, чуть позже отпишусь ... по возможности как будет время загляньте, большое вам спасибо
Если у кого есть какие предложения и т.д ... буду рад любой вашей помощи, Всем спасибо
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
30.05.2014, 15:49 14
Dostik, если что не получится, выложите сразу ваш кусок реального кода, там уже по место чего-нибудь вмонтируем.
1
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
31.05.2014, 17:10  [ТС] 15
Вообщем не чего не получается придумать с фокусом таблицы, читал что можно отлавливать через событие
OnSelectCell но кроме как покраски ячеек в разные цвета нужного не нашел ...
Хорошо давайте попробую как можно подробно описать что происходит
Раньше все крутилось через
C++
1
 ListBox1->ItemIndex
Естественно тут все понятно что не важно что выводим мы в лист бокс мы получаем только индекс от 0 и выше
после чего
C++
1
k=ListBox1->ItemIndex
мы присваивали индекс к целочисленной переменной (к) которая по умолчанию ровна 0
далее мы попадаем в функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
void __fastcall TForm1::Rul_Sel()
{
 k= StringGrid19->Row-1;
 SetFilePointer(fser,(sizeof(str_sm)+(k*sizeof(ser))),NULL,FILE_BEGIN);
 ReadFile(fser,&sr,sizeof(ser),&lread,NULL);
 unsigned long r=sr.adr;
 hhz=sr.hz;
 h1z=sr.h1;
 hd1=sr.hdm;
 hd2=sr.hdp;
 
 if (F_mash){
            Chart2->LeftAxis->Automatic = false ;
            Chart2->LeftAxis->SetMinMax((2*hd1-hhz),(2*hd2-hhz));
            }
    else    Chart2->LeftAxis->Automatic = true;
 
 F_mash12=true;
 
 SetFilePointer(fdat,r,NULL,FILE_BEGIN);
 ReadFile(fdat,&z[0],(sizeof(bt)*(sr.l+1)),&lread,NULL);
 Gisto();
 
  m= sr.l;
  if (m<100) kt=100; else kt=m;
 
  if (CheckBox2->State==cbChecked)
    {
     Chart2->MaxPointsPerPage=kt;
     Chart3->MaxPointsPerPage=kt;
     Chart5->MaxPointsPerPage=kt;
     Chart12->MaxPointsPerPage=kt;
    }
     else
    {
     Chart2->MaxPointsPerPage=100;
     Chart3->MaxPointsPerPage=100;
     Chart5->MaxPointsPerPage=100;
     Chart12->MaxPointsPerPage=100;
    }
  mpp=Chart2->MaxPointsPerPage;
  ScrollBar1->Position=0;
  ScrollBar1->Max=kt-mpp;
//============================================================================
if (Sh_2) {Sertificat();}
if (Sh_3) { Gistogr();}  // Гистограмма
if (Sh_4) { Diagr();}
if (Sh_5) { Defekt();}
//if (Sh_10){ Valki(); }
}
Где это самое (к) производит смещение в файле, получая число с индекса листбокса ... ну и дальше все понятно что читается файл и обновляет все чарты !
Но так уж решили уйти от листбокса, и заменили на StringGrid... который должен выполнять туже роль, не важно что будет написано в строке, важно только его индекс !
Строка может быть от 0-50 а может и от 0-20 а может быть и 0, тоесть жесткой фиксации строк нет !
C++
1
2
3
4
5
6
7
8
9
10
11
 ReadFile(fser,&srt,(sizeof(ser)*Nrul),&lread,NULL);
      for (int i=0;i<Nrul;i++)
         {StringGrid19->RowCount=Nrul+1;
          StringGrid19->Cells[0][i+1] =  IntToStr(sr.n);
          StringGrid19->Cells[1][i+1] =  FloatToStrF(sr.hz,ffFixed,7,2);
          StringGrid19->Cells[2][i+1] =  FloatToStrF(sr.bz,ffFixed,7,0);
          StringGrid19->Cells[3][i+1] =  FloatToStrF(sr.l,ffFixed,7,0);
          StringGrid19->Cells[4][i+1] =  FloatToStrF(sr.pf,ffFixed,7,2);
          StringGrid19->Cells[5][i+1] =  TimeToStr(sr.tz);
          StringGrid19->Cells[6][i+1] =  TimeToStr(sr.ts);
         }
Вот Кусочек для общего представления ..
Теперь когда вроде мы можем получать индекст строки через Row и мы не зависим от фиксации строк, при выборе данных которые мы внесли в таблицу они будут = какому либо индексу, который будет присвоен к переменной (к)
а он сделает нам сдвиг в файле, но возникла проблема ... при выборе данных в таблице с помощь стандартного скролбара, либо нажатии на кнопку, фокус пропадает с таблицы, отсюда мы уже не можем определить чему равен наш Row пока не кликнем на таблицу, тоесть не сделаем её активной, обработчик onClick отрабатывает, но теперь нужно сделать так, чтобы по нажатии кнопки ОК определялся индекс строки, тоесть выполнить роль onClick таблицы, спасибо за помощь и трату времени

Добавлено через 21 час 53 минуты
Неужели некто не сталкивался с подобным вопросом ?
Все еще актуально ....
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.06.2014, 12:49 16
Цитата Сообщение от Dostik Посмотреть сообщение
фокус пропадает с таблицы, отсюда мы уже не можем определить чему равен наш Row пока не кликнем на таблицу, тоесть не сделаем её активной, обработчик onClick отрабатывает, но теперь нужно сделать так, чтобы по нажатии кнопки ОК определялся индекс строки
Dostik, в четвертом посте SatanaXIII дал исчерпывающее и простое решение при данной постановке задачи.

Например, я жмякнул на пятую строчку грида. Что произошло? В переменную запомнился индекс строки, на которую я нажал. После этого я могу пойти погулять и попить кофе, могу вообще вернуться через неделю и, нажав на кнопку, получу этот ранее запомненных индекс пятой строки. Что еще надо-то? Объясни по-человечески. Не получается объяснить - не знаю, видео работы программы с комментариями запиши что ли...
0
01.06.2014, 12:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2014, 12:49
Помогаю со студенческими работами здесь

Как достать и передать в другой метод значения нескольких текстовых полей по нажатию кнопки?
Привет всем! Владеющие языком, прошу принять новичка в свои ряды, ну и... помочь чуток. Не могу...

Переключение между ячейками TStringGrid по нажатию Enter
Здравствуйте. Есть динамически создаваемые таблицы. Нужно сделать так, чтобы при вводе данных в...

Добавление текстбоксов по нажатию клавиши и удаление по нажатию другой кнопки
Всем доброго времени суток. Хотел попросить помощи в написании следующего кода. Кое что набросал,...

Разбить строку на слова по нажатию первой кнопки, отсортировать список слов по нажатию второй
Разбить строку, введённую в первую ячейку первого столбца активного листа, на слова, и вывести их в...

Нарисовать домик по нажатию кнопки, и звезду по нажатию на форме
Нарисовать домик по нажатию кнопки и звезду по нажатию на форме

Как передать value с input одной формы, к другой input формы, по нажатию кнопки
Как передать value с input одной формы, к другой input формы, по нажатию кнопки скрипт ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru