[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]