Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 881

/ вопрос открыт /

Приветствую, уважаемые эксперты!

Скажите пжлста почему не отрабатывает мой обработчик нажатия на сделанные в ран-тайме кнопки?

Приложение:
  1. ...
  2. type
  3. TForm1 = class(TForm)
  4. StringGrid2: TStringGrid;
  5. Button2: TButton;
  6. procedure Button2Click(Sender: TObject);
  7. private
  8. { Private declarations }
  9. public
  10. { Public declarations }
  11.  
  12. myBtn: array[0..9] of TButton;
  13. procedure MyBtnClick(Sender: TObject);
  14. end;
  15.  
  16. var
  17. Form1: TForm1;
  18.  
  19. procedure TForm1.Button2Click(Sender: TObject);
  20. var
  21. i: Integer;
  22. begin
  23.  
  24. StringGrid2.ColWidths[0] := 120;
  25. StringGrid2.RowCount := 10;
  26. for i:=0 to StringGrid2.RowCount-1 do
  27. StringGrid2.RowHeights[i] := 40;
  28.  
  29. for i:=0 to 9 do
  30. begin
  31. myBtn[i] := TButton.Create(Self);
  32. myBtn[i].Name := 'MyBtn'+IntToStr(i+1);
  33. myBtn[i].Caption := '...';
  34. myBtn[i].Parent := StringGrid2;
  35. myBtn[i].Height := 20;
  36. myBtn[i].Width := 20;
  37. myBtn[i].Left := StringGrid2.CellRect(0,i).Left+25;
  38. myBtn[i].Top := StringGrid2.CellRect(0,i).Top+10;
  39. myBtn[i].OnClick := MyBtnClick;
  40. end;
  41. end;
  42.  
  43. procedure TForm1.MyBtnClick(Sender: TObject);
  44. begin
  45. ShowMessage('Hello '+(Sender as TButton).Name);
  46. end;
  47.  


Muratov Radik Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Muratov Radik (статус: Посетитель)
Вопрос отправлен: 8 сентября 2008, 11:20
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 8 сентября 2008, 16:08; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 8 сентября 2008, 13:09 [#1]:

Не будет так работать. Где то я читал, уже не помню, да и на своем опыте убедился.
Суть в том, что StringGrid активно обрабатывает все клики мышки и не передаёт их выше (или ниже). Кнопка банально не получает сообщений о нажатии.
Хотя зачем там кнопки, если нажатие и так можно обработать?
Галочка "подтверждения прочтения" - вселенское зло.
Muratov Radik

Muratov Radik (статус: Посетитель), 8 сентября 2008, 13:24 [#2]:

Дело в том, что я пытаюсь донести до пользователя, что при нажатии в эту ячейку ему вывалится список значений на выбор. Качать JVCL я не могу. С моим диал-апом он будет 3 дня качаться :( Как мне выйти из положения? Чтобы и пользователь наглядно мог понять что к чему, мне не очень мудрено все сделать?
Вадим К

Вадим К (статус: Академик), 8 сентября 2008, 13:29 [#3]:

3 дня качаться? иногда лучше пожертвовать и скачать готовые компоненты чем мучиться.
Хотя есть идея. А почему бы не взять, и не нарисовать кнопку. Просто нарисовать.
Галочка "подтверждения прочтения" - вселенское зло.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 8 сентября 2008, 16:08 [#4]:

Определить на какой ячейке пользователь нажал кнопку мыши для stringGrid можно следующим образом:
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var ACol,ARow:integer;
begin
stringgrid1.MouseToCell(x,y,ACol,Arow);
end;

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:39
Выполнено за 0.02 сек.