Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.03.20;
Скачать: CL | DM;

Вниз

Вот не пойму   Найти похожие ветки 

 
Recurse   (2010-12-23 09:46) [0]

Создаю в процессе выполнения программы экземпляр TBUTTON, в перерисовке TDBGRID я их рисую по ячейкам.
if Field.Name = "Edite" then
 begin
    New (PBtn);
    PBtn := Ptr(Field.AsInteger);
   with PBtn^ do
   begin
     BoundsRect := Rect;
     Name := "EditButton"+IntToStr(DataModule2.cdsRecords.FieldByName("ID").AsInteger);
     Tag := DataModule2.cdsRecords.FieldByName("ID").AsInteger;
     caption := "Ðåäàêòèðîâàòü" ;
     OnClick := Self.OnClickButton; // x
     Parent := DBGrid1;
   end;

 end;



Не вызывается обработчик OnClickButton

procedure TMDIChild.OnClickButton(Sender : TObject);
begin
 ShowMessage( IntToStr(TButton(Sender).Tag));
end;


 
brother ©   (2010-12-23 09:48) [1]

> Self

кто?


 
Recurse   (2010-12-23 09:50) [2]

self == Имя_формы


 
brother ©   (2010-12-23 09:50) [3]

имя формы = TMDIChild ?


 
Медвежонок ХМЛ ©   (2010-12-23 09:52) [4]

Не вызывается обработчик OnClickButton

Потому что он не назначен на кнопку


 
Recurse   (2010-12-23 09:57) [5]

>> имя формы = TMDIChild ?
так точно
И  еще попытался назначить обработчик в DataModule  , вот :
procedure TDataModule2.cdsRecordsCalcFields(DataSet: TDataSet);
var PBtn : PBUTTON;
begin
if cdsRecords.FieldByName("&#208;&#229;&#228;&#224;&#234;&#242;&#232;&#240;&#238;&# 226;&#224;&#242;&#252;") <> nil then
begin
  if cdsRecords.FieldByName("&#208;&#229;&#228;&#224;&#234;&#242;&#232;&#240;&#238;&# 226;&#224;&#242;&#252;").AsInteger = 0 then
  begin
   New (PBtn);
   PBtn^ := TButton.Create(Self);
   with PBtn^ do
   begin
     OnClick := DataModule2.OnClick1; // x
   end;
   cdsRecords.FieldByName("EditButton").AsInteger := Integer(PBTN);

  end;

end;
end;


 
KSergey ©   (2010-12-23 10:09) [6]

New (PBtn);
   PBtn := Ptr(Field.AsInteger);
  with PBtn^ do


Это что за ужос?!
Почитайте вот тут
http://www.delphisources.ru/pages/faq/base/rtti_life.html

ЗЫ
Я не смог найти этой статьи на "Королевтстве"!!!! Люди, как так? :(


 
sniknik ©   (2010-12-23 10:25) [7]

> Я не смог найти этой статьи на "Королевтстве"!!!! Люди, как так? :(
1 "клик" по автору в твоей ссылке, внизу список его статей... одна из них -
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342


 
Recurse   (2010-12-23 10:25) [8]

Ну, пусть будет по вашему:

procedure TMDIChild.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
 Field: TField; State: TGridDrawState);
 var EmptySet : TGridDrawState;

var Buttons : array [0..10] of TBUTTON ;
begin
 ...
 if Field.Name = "Edite" then
 begin
    if FindComponent("EditButton"+...)=nil then
   begin
      Buttons[DataModule2.cdsRecords.RecNo] := TButton.Create( Self );
      with Buttons[DataModule2.cdsRecords.RecNo] do
      begin
         BoundsRect := Rect;
         Name := "EditButton"+IntToStr(...);
         Tag := DataModule2.cdsRecords.FieldByName("ID").AsInteger;
         caption := "блаблабла";
         OnClick := OnClickButton;
         Parent := DBGrid1;
   end;
 end;
end;
end;


Нет эффекта


 
Recurse   (2010-12-23 10:27) [9]

 TMDIChild = class(TForm)
    ...
   DBGrid1: TDBGrid;
  ...
   procedure DBGrid1DrawDataCell....
  ...
 private
   { Private declarations }
 public
  Procedure OnClickButton( Sender : TObject ); //как в статье
   { Public declarations }
 end;


и procedure TMDIChild.OnClickButton(Sender : TObject);
begin
 ShowMessage( IntToStr(TButton(Sender).Tag));
end;


 
brother ©   (2010-12-23 10:27) [10]

> Ну, пусть будет по вашему:

уговорили?)
оно вообще компилиться не должно...


 
brother ©   (2010-12-23 10:28) [11]

> оно вообще компилиться не должно...

погорячился (ну и форматирование)


 
Recurse   (2010-12-23 10:29) [12]


> ну и форматирование

А что не так с форматированием  ???


 
Ega23 ©   (2010-12-23 10:31) [13]


> Нет эффекта


Что дебаггер показывает?


 
brother ©   (2010-12-23 10:34) [14]

> А что не так с форматированием  ???

а ты думаешь оно идеально?
например:
     begin
        BoundsRect := Rect;
        Name := "EditButton"+IntToStr(...);
        Tag := DataModule2.cdsRecords.FieldByName("ID").AsInteger;
        caption := "блаблабла";
        OnClick := OnClickButton;
        Parent := DBGrid1;
  end;


 
KSergey ©   (2010-12-23 10:35) [15]

> brother ©   (23.12.10 10:28) [11]
> > оно вообще компилиться не должно...
> погорячился (ну и форматирование)

Конечно не должно. Вот это, наример
FindComponent("EditButton"+...)

Ну и эта, статью прочитать бы и осмыслить для начала надо, а не тупо код закопировать.

Вы на каждую отрисовку грида (вы вообще понимаете сколько отрисовок происходит?) создаете экземпляр кнопки!
Это вы понимаете?


 
brother ©   (2010-12-23 10:37) [16]

гы [15]! не обратил внимания на DBGrid1DrawDataCell


 
sniknik ©   (2010-12-23 10:37) [17]

поменяй парента на панель... грид не обязан передавать сообщения своим "деткам", не предусмотрен для этого (наверное модно поправить, но не до этого).


 
brother ©   (2010-12-23 10:41) [18]

Алексей! Прочитай ПОЛНОСТЬЮ всю статью! Потом попробуй сам (без статьи) реализовать: Создание 5 кнопок, обработку на клик их, и УНИЧТОЖЕНИЕ!
Пока, я думаю, ты не понимаешь, что делаешь...


 
KSergey ©   (2010-12-23 10:41) [19]

Если не ошибаюсь, без написания наследника грида кнопки встроить вообще нельзя, т.к. нет готового события добавления/удаления строк из грида. А именно в нем надо создавать (и удалять, к стати!). Особенно это касается DBGrid"а.

Возьмите любой готовый грид, в котором уже есть реализована готовая возможность включать кнопки в нужных ячейках просто установкой свойства.
Например, возьмите набор компонентов EhLib


 
sniknik ©   (2010-12-23 10:43) [20]

> наверное модно поправить
можно, а не модно конечно.
но все одно простейший путь сделать подложкой панель.


 
Recurse   (2010-12-23 10:43) [21]

У меня компилиться, поэтому ваши выпады совершенно не имеют отношения к делу.  Проверьте настройки своего компилятора.
Вот пример из хелпа по FindComponent:
TEdit(FindComponent(NamePrefix + IntToStr(i)))

> Вы на каждую отрисовку грида (вы вообще понимаете сколько
> отрисовок происходит?) создаете экземпляр кнопки!

Нет, не должно происходить , потому что FindComponent стоит


а ты думаешь оно идеально?

У меня в IDE всё кошерно.  При переносе в Memo на форуме расползается.


 
brother ©   (2010-12-23 10:45) [22]

те у тебя все гуд?


 
Recurse   (2010-12-23 10:45) [23]


> те у тебя все гуд?

Стараюсь всегда соблюдать форматирование!


 
brother ©   (2010-12-23 10:46) [24]

удачи!


 
KSergey ©   (2010-12-23 10:46) [25]

> sniknik ©   (23.12.10 10:37) [17]
> грид не обязан передавать сообщения своим "деткам", не предусмотрен для этого

Реально?! от сцуко...

> поменяй парента на панель...

Как-то я идею с панелью не понимаю. Куда ее сувать? ТС  ведь хочет кнопку в ячейку грида засунуть.


 
Ega23 ©   (2010-12-23 10:52) [26]


> brother ©   (23.12.10 10:41) [18]
> Создание 5 кнопок, обработку на клик их, и УНИЧТОЖЕНИЕ!


А чё вы все на уничтожение-то зацепились?
Да, у товарища код корявый, но мемлика быть не должно. Да и не будет.
А если ClientDataSet не переоткроет, то вообще ничего страшного не случится.

2 Recurse
TButton.BringToFront;


 
brother ©   (2010-12-23 10:53) [27]

Я предлагаю, создать РАБОЧИЙ код, а потом привязывать к гриду...


 
KSergey ©   (2010-12-23 10:57) [28]

> Ega23 ©   (23.12.10 10:52) [26]
> 2 Recurse
> TButton.BringToFront;

Как это поможет? Я так понял, что кнопка отрисовывается, но OnClick не приходит.
Возможно, sniknik ©   (23.12.10 10:37) [17] прав.


 
sniknik ©   (2010-12-23 11:00) [29]

> ТС  ведь хочет кнопку в ячейку грида засунуть.
панель на грид, кнопку на панель.



Страницы: 1 вся ветка

Текущий архив: 2011.03.20;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.018 c
15-1291861735
Арт
2010-12-09 05:28
2011.03.20
Драйвер аудио...


6-1200848613
Maloj2007
2008-01-20 20:03
2011.03.20
Связь TIdTCPServer и TIdTCPClient


2-1293131507
nza
2010-12-23 22:11
2011.03.20
Как отлаживать компонент?


2-1293086770
Recurse
2010-12-23 09:46
2011.03.20
Вот не пойму


2-1293114081
Павел В.
2010-12-23 17:21
2011.03.20
Относительно BoolToStr