--- ---
Question
I want to create a custom component that will have its normal (inherited) paint method.
However, if certain graphic data in the main program is present, I want the component to first run its inherited paint routine and then execute a procedure in the main program that has access to the data (also in the main program).
What is the best way to accomplish this?

You solve this by using a custom event to which you can attach a form method as needed:

    type
      TMyComp = class( TCustomControl )  {or TGraphicsControl}
      private
        FAfterPaint: TNotifyEvent;  {may use custom event type}
      protected
        procedure Paint; override;
        procedure DoAfterPaint; virtual;
      published
        property AfterPaint: TNotifyEvent read FAfterPaint write FAfterPaint;
      end;

    procedure TMyComp.Paint;
    begin
      inherited;
      DoAfterPaint;
    end;

    procedure TMyComp.DoAfterPaint;
    begin
      if assigned( FAfterpaint ) and NeedsCustomPaint then
        FAfterPaint(self);
    end;