Solved

Overriding/hiding inherited published properties

Posted on 1999-01-11
6
906 Views
Last Modified: 2010-04-06
I am making a component that is a descendent of TDrawGrid.

Lets say that I want these properties (among others) to be published:  Width, Height, ColCount, RowCount.

When the user changes one of these, I want the methods found in DrawGrid to take care of it.  However, before this is done, I need my component to take care of some other things, such as memory allocation.

For example, say that the user increases RowCount by 1.  I need to allocate additional memory and do some other things (for the purpose of my component), and then let TDrawGrid do whatever is needed to change the rows.

How would I hide the inherited properties, and include new properties of the same name that call the inherited properties?  I think I should use the "inherited" keyword, but I am not exactly sure.

Another, similar question:

How would I hide (i.e. make private to my component) any inherited published properties, yet still make them available to my component?

For example, lets say I wanted to make Height and Width (in DrawGrid) totally unavailable to the user and other components, but I want to retain them for private use by my component.  How would I do that?

If it matters, I am using Delphi 2.
0
Comment
Question by:scrapdog
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
6 Comments
 
LVL 20

Accepted Solution

by:
Madshi earned 60 total points
ID: 1356000
Hi scrapdog,

look at this example, it combines your both questions. The Width property is overriden by your own functions, but these functions call the inherited Width property. AND - your Width property is NOT available to other units.

type
  TScrapDogsDrawGrid = class(TEdit)
  private
    function  GetWidth : integer;
    procedure SetWidth(const value: integer);
    property  Width : integer read GetWidth write SetWidth;
  end;

procedure TScrapDogsDrawGrid.SetWidth(const value: integer);
begin
  // here do your stuff
  inherited Width:=value;
  // or here
end;

function TScrapDogsDrawGrid.GetWidth : integer;
begin
  // here do your stuff
  result:=inherited Width;
  // or here
end;

Regards, Madshi.
0
 
LVL 20

Expert Comment

by:Madshi
ID: 1356001
Of course you should change (TEdit) to (TDrawGrid)...  :-)
0
 
LVL 5

Author Comment

by:scrapdog
ID: 1356002
OK.  Thanks.  Just a couple of things I need clarified.

1.  If I DID want to make the Width property (the new property for my component, as shown in your code) visible to others, I just simply move it from private to public or published, right?

2.  Let's say I wanted to totally hide FixedRows and not do anything with it.  All I want to do is keep the user from changing it.  Do I simply exclude it from my property definitions, or is there more to it?
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!

 
LVL 5

Author Comment

by:scrapdog
ID: 1356003
Adjusted points to 65
0
 
LVL 20

Expert Comment

by:Madshi
ID: 1356004
(1) That's right...  :-)
(2) Hmmm. If you derive your component from TDrawGrid then your component will have all properties published, that TDrawGrid published, too. That means you have to DO something in order to hide such a property.
You could try just this:
  private
    FixedRows;
  public
Perhaps that's all. I'm not sure about that. If it doesn't work, then use the same stuff as I showed you with the Width property, but just leave your GetFixedRows/SetFixedRows functions empty.

Regards, Madshi.
0
 
LVL 5

Author Comment

by:scrapdog
ID: 1356005
Thanks.
0

Featured Post

Independent Software Vendors: 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!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…
Finding and deleting duplicate (picture) files can be a time consuming task. My wife and I, our three kids and their families all share one dilemma: Managing our pictures. Between desktops, laptops, phones, tablets, and cameras; over the last decade…

759 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question