Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

OnClick для TButton [D7, XP]


Wood ©   (2008-08-12 08:37:00) 

Не пинайте пожалуйста сильно. Вопрос, наверное, ламерский совсем:
TButton создан динамически или в дизайне. При назначении ему parent:=StringGrid не работает обработчик OnClick. Как нужно сделать?


Wood   (2008-08-12 18:09:00) [1]

Cпасибо всем, завтра буду применять:-)


aaaaa   (2008-08-12 16:32:00) [2]


> Leonid Troyanovsky ©   (12.08.08 15:55) [14]

что-то такое я и подозревал. Спасибо.


> Wood   (12.08.08 15:45) [13]


работает


Leonid Troyanovsky   (2008-08-12 15:55:00) [3]


> aaaaa   (12.08.08 15:08) [12]

> А может кто ответит, почему событие не происходит?

Tstringgrid has not been designed to be a parent to other controls, so it does
not properly reflect WM_COMMAND messages back to the control. You need to
derive a new class from TStringgrid and use that:

unit ControlStringgrid;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 Grids;

type
 TControlStringgrid = class(TStringgrid)
 private
   { Private declarations }
   Procedure WMCommand( var msg: TWMCommand ); message WM_COMMAND;
 protected
   { Protected declarations }
 public
   { Public declarations }
 published
   { Published declarations }
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents('PBGoodies', [TControlStringgrid]);
end;

{ TControlStringgrid }

procedure TControlStringgrid.WMCommand(var msg: TWMCommand);
begin
 If EditorMode and ( msg.Ctl = InplaceEdit.Handle ) Then
   inherited
 Else
   If msg.Ctl <> 0 Then
     msg.result :=
       SendMessage( msg.ctl, CN_COMMAND,
                    TMessage(msg).wparam,
                    TMessage(msg).lparam );
end;

end.

Peter Below (TeamB)  100113.1101@compuserve.com)


Wood   (2008-08-12 15:45:00) [4]


aaaaa   (12.08.08 14:56) [11]

Да, возможно это вариант, не проверял, сейчас дельфей нет под рукой

> MsGuns ©   (12.08.08 14:47) [10]

да я и не спорю, но все же:

> А может кто ответит, почему событие не происходит?
>


aaaaa   (2008-08-12 15:08:00) [5]

А может кто ответит, почему событие не происходит?


aaaaa   (2008-08-12 14:56:00) [6]

TMybtn = class(TButton)
    procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
  end;

procedure TMybtn.WMLButtonDown(var Message: TWMLButtonDown);
begin
 ShowMessage('Вы это можете');
end;

:)


MsGuns   (2008-08-12 14:47:00) [7]

Для того, чтобы кнопку нарисовать поверх грида, вовсе необязательно делать этот грид ее парентом


Wood   (2008-08-12 14:46:00) [8]


> а Visible:=True(False) еще никто не отменял

Хм.. Свойства не вызывают у меня затруднений:) Вы слегка отклонились от темы.


oldman   (2008-08-12 14:32:00) [9]


> Wood   (12.08.08 14:13) [7]
> В общем, с этим "кликом" я облажался, частенько создавал
> кнопки, менюшки и т.п. в ран-тайм


ну и продолжай создавать
а Visible:=True(False) еще никто не отменял
:)


Wood   (2008-08-12 14:13:00) [10]


> brother ©   (12.08.08 11:58) [5]

нет

> А при создании объекта это так долго и сложно?

В общем-то разница в том, что если парент делать к форме, то к вычислениям месторасположения кнопки добавляется месторасположение грида, а если парент= грид, то достаточно написать bt.left=grid.cellrect(ACol,ARow).left и т.п.
Это я хотел, чтоб кнопка появилась в нужной строке, в нужной ячейке..
В общем, с этим "кликом" я облажался, частенько создавал кнопки, менюшки и т.п. в ран-тайм и ни разу не нарывался на сие положение..


oldman   (2008-08-12 12:08:00) [11]


> Wood   (12.08.08 09:34) [2]
> иначе, назначать left, top кнопке относительно положению
> нужной ячейки с перерасчетом расположения грида на форме?


А при создании объекта это так долго и сложно?


brother   (2008-08-12 11:58:00) [12]

есть нехорошее подозрение что он клик теперь отрабатывает не для кнопки, а для грида? проверь а? ;)


Wood   (2008-08-12 11:26:00) [13]


> Amoeba ©   (12.08.08 11:04) [3]

спасибо, читал. При parent =TForm onclick работает, при parent=StringGrid - нет


Amoeba   (2008-08-12 11:04:00) [14]

Автору вопроса читать вот это:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342


Wood   (2008-08-12 09:34:00) [15]


> Можно поинтересоваться: а зачем назначать?

иначе, назначать left, top кнопке относительно положению нужной ячейки с перерасчетом расположения грида на форме?


AlexanderMS   (2008-08-12 08:57:00) [16]


> При назначении ему parent:=StringGrid

Можно поинтересоваться: а зачем назначать?


Наверх

Титульная страница Поиск, карта сайта Написать письмо