Recognising diferent components...

Suppose that I create next components:
TMyDBEdit (from TDBEdit), TMyDBText (from TDBText), etc.
So, what is the best way to ask is some object is one of my
components (not particulaly one but one of all)? But, without casting, becouse some time I can add some new component and don't want to change casting again and again!
Thanks!
grebovAsked:
Who is Participating?
 
vanja1Connect With a Mentor Commented:
You can try to use Interfaces as a way
of multiple inheritance. All of your
components should have the same ancestor.

Bye,
vanja1
0
 
florisbCommented:
F.e. if you gives both components the same onClickevent:

if Sender is TMyDBEdit then
  TMyDBEdit(Sender).something := somethingelse
else if Sender is TMyDBText then
  TMyDBText(Sender).something := somethingelse

If use use propery's that are in both components (f.e. tag), you can use it without casting.

Floris.



0
 
kretzschmarCommented:
hi grebov,

what about

if (Control is TMyDBEdit) then
or
if (Component is TMyDBEdit) then
or
if (Object is TMyDBEdit) then

>is there a way to use there DB properties whithout casting
i guess no

meikl
0
Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

 
simonetCommented:
<<<<<

if Sender is TMyDBEdit then
  TMyDBEdit(Sender).something := somethingelse
else if Sender is TMyDBText then
  TMyDBText(Sender).something := somethingelse

>>>>

This won't work quite as desired, since TMyDBText is inherited from TMyDBEdit. It will pass both tests.

A fix up would be to invert the tests, starting from the outmost class (TMyDBEdit) and then to the parent classes (TDBEdit, TCustomEdit, etc).

Yours,

Alex
0
 
grebovAuthor Commented:
Edited text of question.
0
 
grebovAuthor Commented:
Adjusted points to 200
0
 
grebovAuthor Commented:
Adjusted points to 300
0
 
grebovAuthor Commented:
None of the comments satisfied me,
so I decided to delete my question
and to ask a new one that is similar.
0
 
grebovAuthor Commented:
This question has a deletion request Pending
0
 
grebovAuthor Commented:
I found the answer by myself!
Here it is:
All components must implement the
same interface, for ex: IMyI
and, then, just ask:

for i:=0 to ComponentCount-1 do
if Components[i].GetInterface(IMyI,Temp)
then showmessage(Components[i].Name);

And none of your "experts" didn't
know the answer, so PLEASE
give mi my points BACK!!!
0
 
florisbCommented:
This question no longer is pending deletion
0
 
florisbCommented:
I object, Simonet and I gave you the anser. Do check what you asked here.

errr, none of the experts didn't know = all experts knew. Do check your logic greboy.

Floris.

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.