io mi ritrovo il seguente codice che viene triggerato da piu' parti del software :
procedure TForm1.MenuItem42Click(Sender: TObject);
begin
//informazioni
showmessage('ok2');
end;
devo estrarlo da Sender o senno metto una variabile pubblica dove oni volta cambio il valore dal punto di chiamata del evento;
Se la procedura è chiamata da un evento abbinato allora Sender rappresenta correttamente chi l'ha chiamato, se invece viene usato manualmente (è una procedura e può essere chiamato a codice) allora Sender può rappresentare qualunque cosa.
Per capire cosa rappresenta Sender puoi verificarlo con la proprietà dello stesso:
if Sender <> nil then
ShowMessage(Sender.ClassName); //Visualizza il nome della classe rappresentata da Sender
Se vuoi invece rappresentarlo (ma ovviamente lo devi sapere a priori) allora puoi usare "as" e "is":
if Sender is TButton then
(Sender as TButton).Enabled := false; //Rappresenta Sender come un TButton e setta a false la proprietà Enabled
if Sender is TEdit then
(Sender as TEdit).Text := ''; //Rappresenta Sender come una TEdit e cancella il testo.