Форум: "Начинающим";
Текущий архив: 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;
Не вызывается обработчик OnClickButtonprocedure 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("Ðåäàêòèðî&# 226;àòü") <> nil then
begin
if cdsRecords.FieldByName("Ðåäàêòèðî&# 226;àòü").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 RecurseTButton.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