Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.03.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.006 c
15-1290765713
pasha_golub
2010-11-26 13:01
2011.03.20
Космический симулятор


15-1291536797
oxffff
2010-12-05 11:13
2011.03.20
Доступны ли Вам блоги на blogspot.com?


4-1221723822
mikaa
2008-09-18 11:43
2011.03.20
Shell_NotifyIcon в Windows 2003


15-1291618037
TUser
2010-12-06 09:47
2011.03.20
1994 - год открытия численного интегрирования


2-1293424349
Curse
2010-12-27 07:32
2011.03.20
Растолкуйте пожалуйста безъязыкому





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский