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

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

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

Студворк — интернет-сервис помощи студентам
Добрый день, подскажите как реализовать данную задумку ... мне нужно чтобы по нажатии кнопки фокус перемещался на StringGrid и выполнял функцию OnClick StringGrida, хочу что бы не приходилось при изменении значений в строке не приходилось каждый раз нажимать на таблицу чтобы менялись значения ... Всем Спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.05.2014, 13:37
Ответы с готовыми решениями:

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

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

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

15
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
30.05.2014, 14:17
Да пожалуйста:
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
 Аватар для Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
30.05.2014, 14:27  [ТС]
не работает
дело в том что у меня переменная присваивает значение строки Row
C++
1
k=StringGrid19->Row;
и мне надо когда я меняю значения ))) по кнопке присваивалась Row ... но по нажатию на кнопку таблица становиться уже не активной и Row принимает предыдущее значение строки 0, как обновлять тогда Row ?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
30.05.2014, 14:36
Заведите себе переменную, это успокаивает:
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
 Аватар для Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
30.05.2014, 14:47  [ТС]
Ну да, и покажет она тот Row на который мы клацнули мышкой, либо прокрутили стрелками на клаве, а если мы нажмем на ScrolBar либо на кнопку ... Таблица становиться не активной, и значения Row будут принимать то что было, а не то что стало
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
30.05.2014, 15:05
Цитата Сообщение от Dostik Посмотреть сообщение
будут принимать то что было, а не то что стало
Значит оно не стало.

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

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

Добавлено через 3 минуты
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Вы же прокрутили, но никуда не ткнули. Ничего не изменилось.
да да, вот я и хочу сделать это на кнопку, чтобы производить изменения но не знаю как
C++
1
2
3
4
void __fastcall TForm1::Button21Click(TObject *Sender)
{
StringGrid19->Row;
}
Так тоже нечего не происходит
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
30.05.2014, 15:14
Цитата Сообщение от Dostik Посмотреть сообщение
Так тоже нечего не происходит
А вот так:
C++
1
2
3
4
void __fastcall TForm1::Button21Click(TObject *Sender)
{
k=StringGrid19->Row;
}
0
 Аватар для Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
30.05.2014, 15:20  [ТС]
Забыл написать что так тоже пробовал нечего не происходит (( потому как при нажатии на кнопку программа теряет строку
Пробовал даже так
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
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
30.05.2014, 15:36
Цитата Сообщение от Dostik Посмотреть сообщение
при нажатии на кнопку программа теряет строку
При каждом изменении строки записывайте ее в какую-либо переменную. Не из другой кнопки, а именно из обработчика нажатия. И вот эту вот переменную используйте уже внутри кнопки.
1
 Аватар для Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
30.05.2014, 15:39  [ТС]
Простите за наглость, просто я уже настолько запутался ... вы не могли бы мне привести пример ... на моем куске ? пожалуйста ... не пойму как это реализовать, Большое вам спасибо
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
30.05.2014, 15:43
Ну а вот это вот: Передать фокус на TStringGrid по нажатию кнопки ? Это и есть пример.
В StringGrid1Click обрабатывается нажатие, заносится в переменную. А в Button1Click уже используется.
1
 Аватар для Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
30.05.2014, 15:47  [ТС]
Буду сейчас пробовать, чуть позже отпишусь ... по возможности как будет время загляньте, большое вам спасибо
Если у кого есть какие предложения и т.д ... буду рад любой вашей помощи, Всем спасибо
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
30.05.2014, 15:49
Dostik, если что не получится, выложите сразу ваш кусок реального кода, там уже по место чего-нибудь вмонтируем.
1
 Аватар для Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
31.05.2014, 17:10  [ТС]
Вообщем не чего не получается придумать с фокусом таблицы, читал что можно отлавливать через событие
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
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.06.2014, 12:49
Цитата Сообщение от Dostik Посмотреть сообщение
фокус пропадает с таблицы, отсюда мы уже не можем определить чему равен наш Row пока не кликнем на таблицу, тоесть не сделаем её активной, обработчик onClick отрабатывает, но теперь нужно сделать так, чтобы по нажатии кнопки ОК определялся индекс строки
Dostik, в четвертом посте SatanaXIII дал исчерпывающее и простое решение при данной постановке задачи.

Например, я жмякнул на пятую строчку грида. Что произошло? В переменную запомнился индекс строки, на которую я нажал. После этого я могу пойти погулять и попить кофе, могу вообще вернуться через неделю и, нажав на кнопку, получу этот ранее запомненных индекс пятой строки. Что еще надо-то? Объясни по-человечески. Не получается объяснить - не знаю, видео работы программы с комментариями запиши что ли...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.06.2014, 12:49
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru