Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2012, 23:20   #1
Alesandr11
Новичок
Джуниор
 
Регистрация: 23.08.2012
Сообщений: 5
Счастье Возможно ли заставить StringGrid делиться событием

Хочу создать окно с таблицей в которой в каждую строку добавляется четыре кнопки (естественно динамически) три вначале и одна в конце. Стал тестить как все это работает и столкнулся с тем что при назначении метода кнопке (в обработчике события должно просто открыться окно сообщения с именем кнопки) находящейся в таблице происходит следующее: после запуска приложения нажимаю на кнопку ничего не происходит, но кнопка получает фокус ввода после чего нажимаю энтер окошко выскакивает. Если сделать для кнопки родителем саму форму все естественно работает.
Предполагаю что StringGrid использует событие клика для того чтобы выбирались ячейки в таблице при клике на соответствующей, но событием естественно не делится с дочерними компонентами, так как уже пытался это событие обрабатывать и быть может даже обработал так как я не вижу за кнопкой выделена ли ячейка находящаяся под ней или нет.

В связи с чем вопрос: Можно ли заставить StringGrid поделиться событием не смотря на, то что он уже предпринял попытку обработки события?
Alesandr11 вне форума Ответить с цитированием
Старый 24.08.2012, 23:48   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Вызывать в процедуре обработки события StringGridOnClick обработку события ButtonOnClick соответствующей кнопки
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 25.08.2012, 00:02   #3
Alesandr11
Новичок
Джуниор
 
Регистрация: 23.08.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Вызывать в процедуре обработки события StringGridOnClick обработку события ButtonOnClick соответствующей кнопки
Да но кнопки 4 в каждой строке, а строк неопределенное количество как в одном обработчике событий разграничить обработчики событий каждой кнопки?
Alesandr11 вне форума Ответить с цитированием
Старый 25.08.2012, 09:07   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Alesandr11 Посмотреть сообщение
Да но кнопки 4 в каждой строке, а строк неопределенное количество как в одном обработчике событий разграничить обработчики событий каждой кнопки?
Можно попытаться через swith case зделать. Только каждую кнопку нужно подключить к этому обработчику в инспекторе объектов.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 25.08.2012 в 09:25.
Smitt&Wesson вне форума Ответить с цитированием
Старый 25.08.2012, 09:08   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
как в одном обработчике событий разграничить обработчики событий каждой кнопки?
Цитата:
Хочу создать окно с таблицей в которой в каждую строку добавляется четыре кнопки (естественно динамически) три вначале и одна в конце.
В момент добавления мы знаем какой строке какая кнопка соответсвует. Научим этому программу, точнее говоря сделаем так чтобы кнопка "сама" помнила к какой строке она относится. Для запоминания доп. информации необходимой программисту и связанной непосредственно с каким-либо объектом используется свойство Tag. Примерно так
Код:
 btn:=TButton.Create;
 btn.tag:=StringGrid.Row; //указываем нужный нам номер строки ну или другую информацию для идентфикации 
 btn.OncLick:=Tform1.FirstButtinClick;
Теперь при нажатии кнопки мы всегда можем узнать к какой строке это отностися
Код:
procedure Tform1.FirstButtonclick(sender: TObject);
var
  nrow: integer;
begin
 //Sender это именно та кнопка котрую нажали
  nrow:=(sender as TButton).tag; // а теперь мы знаем на какой строке
 // и теперь делаем что нам требуется
end;
Есть и второй путь решения написать свой класс кнопки с дополнительными свойствами (номер строки).
Код:
type
TgridButton =class(Tbutton)
private
  FrowGrid;
public
  property rowGrid: integer read FrowGrid write GetRowGrid;
end;
и опять
Код:
 btn:=TgridButton.Create;
 btn.rowgrid:=Grid.row;
 btn.Onclick:=Tform1.firstButtonClick;
Код:
procedure Tform1.FirstbuttonClick(sender: TObject);
var
  btn: TGridButton;
  nrow: integer;
begin
  btn:=sender as TGridButton;
  nrow:=btn.rowgrid;
 ...........
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 25.08.2012 в 09:27.
evg_m вне форума Ответить с цитированием
Старый 25.08.2012, 22:56   #6
Alesandr11
Новичок
Джуниор
 
Регистрация: 23.08.2012
Сообщений: 5
По умолчанию

Да согласен можно и так изхитриться хотя конечно хотелось бы событием поделиться но чем больше шарюсь по сайтам тем больше начинаю понимать что это невозможно.

Всем большое спасибо за помощь!!!
Alesandr11 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно изменить цвет фона при редактировании ячейки StringGrid ? PK.Kirill Общие вопросы Delphi 6 25.02.2013 17:27
Как правельно работать с событием в потоке через форму bulldog5293 Общие вопросы Delphi 13 16.08.2011 08:48
Проблема с событием OnChange компонента DriveComboBox (C++Builder 6) Teor C++ Builder 4 15.07.2010 21:58
SQL+StringGrid - возможно ли? artemavd Общие вопросы Delphi 2 06.05.2010 10:11
Странности в работе с событием OnTimer Mixasik Общие вопросы Delphi 3 17.01.2009 01:22