whats new ¦  programming tips ¦  indy articles ¦  intraweb articles ¦  informations ¦  links ¦  interviews
 misc ¦  tutorials ¦  Add&Win Game

Tips (1541)

Database (90)
Files (137)
Forms (107)
Graphic (114)
IDE (21)
Indy (5)
Internet / LAN (130)
IntraWeb (0)
Math (76)
Misc (126)
Multimedia (45)
Objects/
ActiveX (51)

OpenTools API (3)
Printing (35)
Strings (83)
System (266)
VCL (242)

Top15

Tips sort by
component


Search Tip

Add new Tip

Add&Win Game

Advertising

60 Visitors Online


 
...access protected properties?
Autor: Erwin Haantjes
[ Print tip ]  

Tip Rating (10):  
     


{*** It is not always necessary to write a new class when you miss the properties you need ***}

{
  Let's say, you writing a program with some standard controls on it's form.
  One of the components is a TProgressBar.
  All components, except the progressbar, are yellow (brrrr!!!)
  but it is not possible to change the color of the progressbar the normal way.
  There are three things that you can do:

  1. Leave it this way
  2. Write a new component
  3. Try to use WinAPI

  OR try this:
}

// Put this on top of your unit
type
 
TAccessControl = class(TWinControl)
   public
    property 
Color;
 end;

// and put into TForm1.FormCreate() the following code:

  
TAccessControl(MyProgressBar).Color:= clYellow;

{
  This is possible because TwinControl is the immediate ancestor.
  There is also another trick to give a existing class more functionality
  without the need of creating a new component, for example:
}

type
 
// Just a few lines of code and your TLabel
 // components on the form has more
 // functionality without writing a new class
 
TLabel = class(stdctrls.TLabel)
 public
   procedure 
SayHello();
 end;

 // ...
procedure TLabel.SayHello();
begin
  
ShowMessage( 'I just want to say hello (and not hello world!)');
end;


// As you know the Custom version of a class does not
// publish all it's properties, so you can do it the same way as with TLabel.

type
 
TTheBaseClass = class(UnitName.TTheBaseClass)
 public
   property 
Align;
   property Color;
   property YourProp;
   {etc etc}
 
end;

{
  NOTES:
  - You can never add new published properties when controls properties are stored
    in the DFM file (on a form)
  - You can put modified classes into another unit file so that you can add it
    AS THE LAST UNIT to the uses clause.

  I hope you find it usable.
}

 

Rate this tip:

poor
very good


Copyright © by SwissDelphiCenter.ch
All trademarks are the sole property of their respective owners