|
Вопрос # 1 881/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Скажите пжлста почему не отрабатывает мой обработчик нажатия на сделанные в ран-тайме кнопки?
Приложение: Переключить в обычный режим- ...
- type
- TForm1 = class(TForm)
- StringGrid2: TStringGrid;
- Button2: TButton;
- procedure Button2Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
-
- myBtn: array[0..9] of TButton;
- procedure MyBtnClick(Sender: TObject);
- end;
-
- var
- Form1: TForm1;
-
- procedure TForm1.Button2Click(Sender: TObject);
- var
- i: Integer;
- begin
-
- StringGrid2.ColWidths[0] := 120;
- StringGrid2.RowCount := 10;
- for i:=0 to StringGrid2.RowCount-1 do
- StringGrid2.RowHeights[i] := 40;
-
- for i:=0 to 9 do
- begin
- myBtn[i] := TButton.Create(Self);
- myBtn[i].Name := 'MyBtn'+IntToStr(i+1);
- myBtn[i].Caption := '...';
- myBtn[i].Parent := StringGrid2;
- myBtn[i].Height := 20;
- myBtn[i].Width := 20;
- myBtn[i].Left := StringGrid2.CellRect(0,i).Left+25;
- myBtn[i].Top := StringGrid2.CellRect(0,i).Top+10;
- myBtn[i].OnClick := MyBtnClick;
- end;
- end;
-
- procedure TForm1.MyBtnClick(Sender: TObject);
- begin
- ShowMessage('Hello '+(Sender as TButton).Name);
- end;
-
 |
Вопрос задал: Muratov Radik (статус: Посетитель)
Вопрос отправлен: 8 сентября 2008, 11:20
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 8 сентября 2008, 16:08; участников в обсуждении: 3.
|
Вадим К (статус: Академик), 8 сентября 2008, 13:09 [#1]:
Не будет так работать. Где то я читал, уже не помню, да и на своем опыте убедился.
Суть в том, что StringGrid активно обрабатывает все клики мышки и не передаёт их выше (или ниже). Кнопка банально не получает сообщений о нажатии.
Хотя зачем там кнопки, если нажатие и так можно обработать?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
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;
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|