[Back to DELPHI SWAG index]  [Back to Main SWAG index]  [Original]


Pedro,

If I understand you correctly, you want to be able to access (and show) the
caption of ANY control, regardless of its type, whether is is a TButton,
TForm, TLabel, and so on.  Is that right?

If so, the difficulty is this: although all descendants of TControl have a
Caption property, within TControl and some of its descendants the property
is protected, rather than public or published.  So, trying
TControl(Sender).Caption gives you an error.  Here is a trick, though, to
access that Caption property.

Add this in the implementation section of your unit:

type
  TCaptionControl = class(TControl)
  public
    property Caption;
  end;

You can then access the Caption of any control with
TCaptionControl(Sender).Caption, as in the following:

procedure TForm1.Label1Click(Sender: TObject);
begin
  ShowMessage(TCaptionControl(Sender).Caption);
end;

If you need to ensure that Sender is a descendant of TControl, then use:

procedure TForm1.Label1Click(Sender: TObject);
begin
  if Sender is TControl then
    ShowMessage(TCaptionControl(Sender).Caption);
end;

Note that using (Sender as TCaptionControl).Caption will not work, since
Sender will be a TControl but not a TCaptionControl.  Also note that some
controls (like TEdit) do not have an accessible Caption, but my code will
get it anyway!  For example, a TEdit's Caption is its Text.  For some other
controls it may be nonsense.


[Back to DELPHI SWAG index]  [Back to Main SWAG index]  [Original]