Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 153
  • Last Modified:

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!
0
grebov
Asked:
grebov
1 Solution
 
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
 
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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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
 
vanja1Commented:
You can try to use Interfaces as a way
of multiple inheritance. All of your
components should have the same ancestor.

Bye,
vanja1
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now