Solved

Overriding/hiding inherited published properties

Posted on 1999-01-11
6
931 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
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!

 
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

Industry Leaders: 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

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…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
Suggested Courses
Course of the Month9 days, 13 hours left to enroll

624 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