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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2012, 12:29   #1
Hex1986
 
Регистрация: 12.05.2011
Сообщений: 6
По умолчанию Куда пропал OnClick!?

Создаю динамически кнопки в Стрингриде:

SetLength(NewButton,Arow);
NewButton[Arow-1] := TButton.Create(self);
NewButton[Arow-1].Caption:='...';
NewButton[Arow-1].Parent := StringGrid1;
StringGrid1.Objects[ACol,Arow] := NewButton[Arow-1];
Rect := StringGrid1.CellRect(ACol,Arow);
NewButton[Arow-1].Width := 20;
NewButton[Arow-1].Height := 18;
NewButton[Arow-1].Left := Rect.Right-NewButton[Arow-1].Width;
NewButton[Arow-1].Top := Rect.Top;
NewButton[Arow-1].Tag:=-1;

NewButton[Arow-1].OnClick:= butcheckingLstElement;

При клике мышкой не происходит события(butcheckingLstElement), а при нажатии на клавишу Энтер происходит это событие. В чем фокус? Кто знает?
Hex1986 вне форума Ответить с цитированием
Старый 05.03.2012, 14:24   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Какое-то непонятное создание кнопок:
- в каком месте и в какой момент создается кнопка (в коде создается только одна кнопка)?
- зачем держать две ссылки на кнопку? Одной не хватит?
Прик вне форума Ответить с цитированием
Старый 05.03.2012, 15:01   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

может надо в OnClick передавать не метод, а указатель на него?
Человек_Борща вне форума Ответить с цитированием
Старый 05.03.2012, 15:52   #4
Hex1986
 
Регистрация: 12.05.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
Какое-то непонятное создание кнопок:
- в каком месте и в какой момент создается кнопка (в коде создается только одна кнопка)?
- зачем держать две ссылки на кнопку? Одной не хватит?
это тело процедуры, которая создает кнопку в указаном поле стринггрида
она вызывается столько раз сколько строк в таблице(StringGrid)
вот полностью:

Код:
procedure TForm1.addbutinTable(ACol,Arow:Integer);
var
  Rect: TRect;
begin
SetLength(NewButton,Arow);
 NewButton[Arow-1] := TButton.Create(self);
 NewButton[Arow-1].Caption:='...';
 NewButton[Arow-1].Parent := StringGrid1;
 StringGrid1.Objects[ACol,Arow] := NewButton[Arow-1];
 Rect := StringGrid1.CellRect(ACol,Arow);
 NewButton[Arow-1].Width := 20;
 NewButton[Arow-1].Height := 18;
 NewButton[Arow-1].Left := Rect.Right-NewButton[Arow-1].Width;
 NewButton[Arow-1].Top := Rect.Top;
 NewButton[Arow-1].Tag:=-1;

 NewButton[Arow-1].OnClick:= butcheckingLstElement;
end;
Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
может надо в OnClick передавать не метод, а указатель на него?
Частично ведь работает(при нажатии кнопки enter)

Я думаю это из-за стринггрида, ведь если выбрать парент = форма то все норм работает.
Hex1986 вне форума Ответить с цитированием
Старый 06.03.2012, 10:07   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Добавить
Код:
  NewButton[Arow - 1].OnMouseUp := foo;
...
procedure TForm1.foo(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
butcheckingLstElement(sender);
end;

Последний раз редактировалось phomm; 06.03.2012 в 10:09.
phomm вне форума Ответить с цитированием
Старый 06.03.2012, 13:26   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

проверил. действительно, если "родитель" кнопки stringgrid - то он не отдаёт кнопке нажатия.

подтверждение этому нашёл здесь

а что, если назначить форму родителем?!
примерно так:
Код:
 NewButton[Arow-1].Parent := Form1; 
 StringGrid1.Objects[ACol,Arow] := NewButton[Arow-1];
 Rect := StringGrid1.CellRect(ACol,Arow);
 NewButton[Arow-1].Width := 20;
 NewButton[Arow-1].Height := 18; NewButton[Arow-1].Left := Rect.Right-NewButton[Arow-1].Width + StringGrid1.Left;
 NewButton[Arow-1].Top := Rect.Top + StringGrid1.Top + 2;
 NewButton[Arow-1].Tag:=Arow;

p.s. если грид не помещается на форме целиком (скролируется), то выглядеть это будет глюкаво, впрочем, с родителем гридом тоже не очень кузявно...)


phomm, круто! Работает!
Хотя, со скролированием стрингрида та же беда!
Вложения
Тип файла: rar StringGridWithButtons.rar (1.3 Кб, 10 просмотров)
Тип файла: rar StringGridWithButtonsMouse.rar (1.4 Кб, 9 просмотров)

Последний раз редактировалось Serge_Bliznykov; 06.03.2012 в 13:32.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi XE2. Куда пропал TDataModule, и как его вернуть? И проблемы с стд. ресурсами среды. Человек_Борща Общие вопросы Delphi 12 16.07.2012 14:50
Пропал Vector3 RunLine Общие вопросы .NET 2 11.02.2012 19:37
Куда пойти, куда податься Delрhi Свободное общение 4 06.02.2012 12:39
Куда отследить куда утекает память? TwiX Общие вопросы Delphi 6 02.03.2010 03:10