Allora mecoman. In informatica ci sono almeno 10 strade per ottenere lo stesso risultato.
Facciamo un attimino di "base comune".
1) Hai 2 Form.
2) Form2 Richiama Form1.
3) Per far scattare il metodo della form1 (procedura mi fa presupporre che non sia legata all'istanza della Form1 ma dichiarata come procedura della unit1, che contiene anche la Form1).
La strada che indicava Nomore, prevede che ci sia una dipendenza diretta da Unit2 verso Unit1 (porca paletta, con l'UML ci metterei 1 secondo a rappresentarla ...)
Narciso si accoda, ma non spiega bene dove vuole mettere la dipendenza. Se nella parta pubblica (come implicitamente diceva Nomore) o nella parte privata del modulo.
Partiamo con gli esempi di codice:
unit unit1;
//bla bla
type
TForm1 = class(TForm)
PUBLIC <{- Altrimenti con piffero che la richiami da fuori della gerarchia delle classi !!!!}
//bla bla
procedure QuellaCheMiInteressaRichiamareEssendoUnRicicloneDelCodice;
//bla bla
End;
//bla bla
unit unit2;
Uses
..... UNIT1; <-Ipotesi di Nomorelogic
type
TForm2 = class(TForm)
public
property AltraForm: TForm1 read FAltraForm write SetAltraForm;// <- Ipotesi di Nomorelogic
published
// bla bla
procedure OnClickButtonCheChiamaLaProcedureCheMiInteressaRichiamareEssendoUnRicicloneDelCodice(sender : TObject);
// bla bla
End;
//bla bla
implementation
Uses
Unit1; //<- Ipotesi di Narciso?
type
procedure TForm2.OnClickButtonCheChiamaLaProcedureCheMiInteressaRichiamareEssendoUnRicicloneDelCodice(sender : TObject);
begin
if assigned(FAltraForm) then //<- Importante questo controllo, in genere per evitare di cadere sulle dimenticate assegnazioni.
FAltraForm.QuellaCheMiInteressaRichiamareEssendoUnRicicloneDelCodice;
Form1.QuellaCheMiInteressaRichiamareEssendoUnRicicloneDelCodice;
end;
{Nell'ipotesi di nomore serve controllare il ciclo di vita degli oggetti. Devi "registrare" l'ultilizzatore come "ascoltatore". In questo modo puoi evitare di diventare matto a capire se Form1 è ancora "viva o meno" da fuoi. Questo servono RemoveFreeNotification e FreeNotification. Questi metodi sono gentilmente offerti da TComponent}
procedure TForm2.SetAltraForm(const aValue : TForm1);
begin
if assigned(FAltraForm) then
FAltraForm.removeFreeNotification(self);
FAltraForm := aValue;
if assigned(FAltraForm) then
FAltraForm.freeNotification(self);
end;
Stilgar