Rap event won't fire
Hi there, I created a component that has an OnDrawColumn event. The event
can be use in RAP. The parameters are correct but the event isn't called in
Rap. I've put a simple showmessage in it but it won't display.
Here's a bit of code of the component.
////////////////////////////////////////////////////////////////////////////
///////////////////////
const
ciDrawColumn = 101;
TraTWGridLinesRTTI = class(TraTppComponentRTTI)
public
class function GetParams(const aMethodName: String): TraParamList;
override;
class procedure GetPropList(aClass: TClass; aPropList: TraPropList);
override;
class function GetPropRec(aClass: TClass; const aPropName: String;
var aPropRec: TraPropRec): Boolean; override;
class function GetPropValue(aObject: TObject; const aPropName:
String; var aValue): Boolean; override;
class function RefClass: TClass; override;
class function SetPropValue(aObject: TObject; const aPropName:
String; var aValue): Boolean; override;
end;
class function TraTWGridLinesRTTI.GetParams(
const aMethodName: String): TraParamList;
begin
if (CompareText(aMethodName, 'OnDrawColumn') = 0) then
begin
Result := TraParamList.Create;
Result.AddParam('ColLeft', daInteger, nil, '', True, False);
Result.AddParam('ColTop', daInteger, nil, '', True, False);
Result.AddParam('ColWidth', daInteger, nil, '', True, False);
Result.AddParam('ColHeight', daInteger, nil, '', True, False);
end
else
Result := inherited GetParams(aMethodName);
end;
class procedure TraTWGridLinesRTTI.GetPropList(aClass: TClass;
aPropList: TraPropList);
begin
inherited GetPropList(aClass, aPropList);
end;
class function TraTWGridLinesRTTI.GetPropRec(aClass: TClass;
const aPropName: String; var aPropRec: TraPropRec): Boolean;
begin
Result := True;
if (CompareText(aPropName, 'OnDrawColumn') = 0) then
EventToRec(aPropName, ciDrawColumn, True, aPropRec)
else
Result := inherited GetPropRec(aClass, aPropName, aPropRec);
end;
class function TraTWGridLinesRTTI.GetPropValue(aObject: TObject;
const aPropName: String; var aValue): Boolean;
begin
Result := inherited GetPropValue(aObject, aPropName, aValue);
end;
class function TraTWGridLinesRTTI.RefClass: TClass;
begin
Result := TppTWGridLines;
end;
class function TraTWGridLinesRTTI.SetPropValue(aObject: TObject;
const aPropName: String; var aValue): Boolean;
begin
Result := inherited SetPropValue(aObject, aPropName, aValue);
end;
here's how I call the event in the component
lParams := TraTWGridLinesRTTI.GetParams('OnDrawColumn');
lParams.CreateValuePointer(0, colleft);
lParams.CreateValuePointer(1, coltop);
lParams.CreateValuePointer(2, colwidth);
lParams.CreateValuePointer(3, colheight);
SendEventNotify(Self, ciDrawColumn, lParams);
lParams.Free;
////////////////////////////////////////////////////////////////////////////
///////////////////////
Any idea if I'm missing something or doing too much things?
Thanks
Daniel
can be use in RAP. The parameters are correct but the event isn't called in
Rap. I've put a simple showmessage in it but it won't display.
Here's a bit of code of the component.
////////////////////////////////////////////////////////////////////////////
///////////////////////
const
ciDrawColumn = 101;
TraTWGridLinesRTTI = class(TraTppComponentRTTI)
public
class function GetParams(const aMethodName: String): TraParamList;
override;
class procedure GetPropList(aClass: TClass; aPropList: TraPropList);
override;
class function GetPropRec(aClass: TClass; const aPropName: String;
var aPropRec: TraPropRec): Boolean; override;
class function GetPropValue(aObject: TObject; const aPropName:
String; var aValue): Boolean; override;
class function RefClass: TClass; override;
class function SetPropValue(aObject: TObject; const aPropName:
String; var aValue): Boolean; override;
end;
class function TraTWGridLinesRTTI.GetParams(
const aMethodName: String): TraParamList;
begin
if (CompareText(aMethodName, 'OnDrawColumn') = 0) then
begin
Result := TraParamList.Create;
Result.AddParam('ColLeft', daInteger, nil, '', True, False);
Result.AddParam('ColTop', daInteger, nil, '', True, False);
Result.AddParam('ColWidth', daInteger, nil, '', True, False);
Result.AddParam('ColHeight', daInteger, nil, '', True, False);
end
else
Result := inherited GetParams(aMethodName);
end;
class procedure TraTWGridLinesRTTI.GetPropList(aClass: TClass;
aPropList: TraPropList);
begin
inherited GetPropList(aClass, aPropList);
end;
class function TraTWGridLinesRTTI.GetPropRec(aClass: TClass;
const aPropName: String; var aPropRec: TraPropRec): Boolean;
begin
Result := True;
if (CompareText(aPropName, 'OnDrawColumn') = 0) then
EventToRec(aPropName, ciDrawColumn, True, aPropRec)
else
Result := inherited GetPropRec(aClass, aPropName, aPropRec);
end;
class function TraTWGridLinesRTTI.GetPropValue(aObject: TObject;
const aPropName: String; var aValue): Boolean;
begin
Result := inherited GetPropValue(aObject, aPropName, aValue);
end;
class function TraTWGridLinesRTTI.RefClass: TClass;
begin
Result := TppTWGridLines;
end;
class function TraTWGridLinesRTTI.SetPropValue(aObject: TObject;
const aPropName: String; var aValue): Boolean;
begin
Result := inherited SetPropValue(aObject, aPropName, aValue);
end;
here's how I call the event in the component
lParams := TraTWGridLinesRTTI.GetParams('OnDrawColumn');
lParams.CreateValuePointer(0, colleft);
lParams.CreateValuePointer(1, coltop);
lParams.CreateValuePointer(2, colwidth);
lParams.CreateValuePointer(3, colheight);
SendEventNotify(Self, ciDrawColumn, lParams);
lParams.Free;
////////////////////////////////////////////////////////////////////////////
///////////////////////
Any idea if I'm missing something or doing too much things?
Thanks
Daniel
This discussion has been closed.
Comments
initialization
raRegisterRTTI(TraTWGridLinesRTTI);
finalization
raUnRegisterRTTI(TraTWGridLinesRTTI);
Cheers,
Jim Bennett
Digital Metaphors
http://www.digital-metaphors.com
info@digital-metaphors.com
complete code instead since the component will be free anyway I don't mind
having the source code distributed on the web. Just need to get some things
worked out before sending it.
Thanks
Daniel
canvas parameter, but I can't seem to find that project. I have moved from
two machines since I worked on that project.
If you place breakpoints in the methods of the RTTI class you have, do those
fire?
You have the SendEventNotify and a new eventID. That's good. Everything is
registered. And the RTTI class is complete. It should work. Place a
breakpoint in the initialization section for your register calls to make
sure that unit is getting linked in.
Cheers,
Jim Bennett
Digital Metaphors
http://www.digital-metaphors.com
info@digital-metaphors.com
friend section. It's a quite simple component but makes it easier to create grid
lines and my development team just hate to use lines or shapes to draw a grid so
I hope it helps others too.
Cheers and thanks again for your help.
--
Daniel Lemire
Cheers,
Jim Bennett
Digital Metaphors
http://www.digital-metaphors.com
info@digital-metaphors.com