Newsgroup: it.comp.lang.delphi
Titolo: Perchè non funziona

Deve essere una stupidaggine, ma non funziona e non riesco a vedere perchè. 
Si tratta di una frame che metto nel form a designtime e di cui devo 
intercettare un evento. Il codice è più o meno il seguente:
Nella FRAME:
private
    property OnButtonClick: TNotifyEvent read FOnButtonClick write 
FOnButtonClick;
public
    property OnButtonClick: TNotifyEvent read FOnButtonClick write 
FOnButtonClick;
implementation
procedure TFrameEntry.EntryDescriButtonClick(Sender: TObject);
begin
   EntryDescri.Clear;
   EntryDescri.SetFocus;
end;
 
Nel FORM:
Dichiaro la frame negli uses e nel Create ho messo:
  FrameEntry1.EntryDescri.OnButtonClick:= OnButtonClick;
 
Mi dà errore perchè non riconosce l' OnButtonClick che ho assegnato a 
FrameEntry1.EntryDescri.OnButtonClick. 
 

 Mi dà errore 
 
Come dice Cruciani, siamo al top.
....ancora con i post da utente finale....?  Maro' che palle....!
 
A.

 Mi dà errore
 
Come dice Cruciani, siamo al top.
....ancora con i post da utente finale....?  Maro' che palle....!
A.
Non so come fai a sentire Cruciani..
Comunque, non so cosa dire più di quello che ho già detto. Quello che non 
funziona è che la frame definisce alcuni eventi relativi ad alcuni 
componenti edits e quando nel form che ospita la frame tento di associarli 
usando il nome della property public del frame questo nome non è 
riconosciuto. Ripeto qui sotto l'istruzione che dà errore:
  FrameEntry1.EntryDescri.OnButtonClick:= OnButtonClick;
dove FrameEntry1 è il nome della mia frame nel mainForm, EntryDescri è 
l'edit con bottone nel frame. OnButtonClick è il nome che ho dato nella 
frame alla property, che ripeto qui sotto:
property OnButtonClick: TNotifyEvent read FOnButtonClick write 
FOnButtonClick;
 
L'errore di compilazione è 'undeclared identifier'.. 
 

 L'errore di compilazione è 'undeclared identifier'..
 
Ah, quindi qualcosa in più c'era, giusto?
 
Mi chiedo quindi:
 
KE KAZ CI VOLEVA A DIRLO PRIMA INVECE DI ASPETTARE CHE IL PRIMO FESSO TI FACESSE LA DOMANDA DIRETTA??
 
A.

 Comunque, non so cosa dire più di quello che ho già detto.
 
Qui non siamo al mercato del pesce, dove ti basta dire che puzza e tutti
capiscono cosa significa.
Qui se un codice non compila, devi riportare per esteso l'errore che
ottieni e aggiungere il codice responsabile.
 
-- 
Morde

 capiscono cosa significa.
 
Fixed! +1
 
A.

 I FRAME SI CREANO E SI PIAZZANO SUI FORM A RUNTIME.
 
Datti una calmata ed evita di scrivere stronzate. Che i frame si *debbano* creare a runtime e` una tua personalissima elucubrazione che non ha nessun riscontro reale.
 
 

> Che i frame si *debbano* creare a runtime e` una tua personalissima elucubrazione che non ha nessun riscontro reale.
 
Uno è libero di utilizzarli come meglio crede ma secondo me qui Alberto Salvati ha ragione e ha dato un consiglio corretto a mio parere.
 
Anni fa ho avuto a che fare anche io con i frame a designe time e mi ricordo che ho avuto dei problemi ad utilizzarli così non per ultimo quello che se fai una modifica al frame originale poi mi è toccato andarli a togliere e rimettere in tutte le form dove li avevo infilati.
 
...da allora creo i frame a runtime e non ho mai più avuto problemi ...anzi ...li utilizzo molto.
 
..per cui quello che dice Alberto è un consiglio corretto dato per esperienza ...suppongo
 
...magari lo dice alla sua maniera ...ma è giusto.
 
...poi uno è libero di fare ciò che vuole. Non a tutti piace il gelato al pistacchio o alla nocciola.
 
Alberto

 
 
"Morde"  ha scritto nel messaggio news:obb790$16v1$1...@gioia.aioe.org...

--
Ma nel primo messaggio l'ho fatto. Ho esposto il codice (quello relativo 
alla situazione di errore). Ho riportato l'errore ('undeclared idetifier').
Non capisco proprio tutti questi rimproveri, mentre capisco meglio che 
nessuno mi ha dato un suggerimento, perchè immagino che non sia facile con 
pochi elementi.
Una cosa non ho detto. Che la unit del frame l'ho spostata in un 'altra 
cartella (salvandola in quest'altra cartella), poi ho visto che nel progetto 
sembrava rimasta dov'era, l'ho rimessa dov'era.. Non so se questo ha 
rilevanza, non credo..
In quanto a inserire a runtime la frame, capisco e condivido il consiglio, 
ma in questo caso metterla a designtime mi consentiva di visualizzare meglio 
tutto il form dal punto di vista estetico e quindi alla fine l'ho lasciata 
così 
 

Ma il problema della doppia dichiarazione della property l'hai risolto o no?
 
Poi, visto che sottolinei che nessuno ha dato info utili sul tuo problema, ti accontento:
 
quella cosa che non trova esiste o no?
 
A.

"Alberto Salvati"  ha scritto nel messaggio 
news:1e30ebc3-ae96-4a09...@googlegroups.com...

---
Mi devo scusare, ma nel primo messaggio dove ho copiato alcune istruzioni ho 
fatto l'errato copia incolla. Le istruzioni giuste incluse nel mio frame 
sono le seguenti:
private
    FOnButtonClick: TNotifyEvent;
public
    property OnButtonClick: TNotifyEvent read FOnButtonClick write 
FOnButtonClick;
 
Nel form:
  FrameEntry1.EntryDescri.OnButtonClick:= OnButtonClick;
 
e l'errore che ricevo in compilazione è 'undeclared identifier: 
OnButtonClick'
 
Nel frame c'è questo TJvComboEdit con un evento OnButtonClick che io vorrei 
fosse eseguito quando nel form clicco sul bottone.
 
 

1) ke kakkio è EntryDescri?
 
2) a cosa serve la property OnButtonClick? 
Da fuori non la usi e manco da dentro...
 
 
 
 
A.

"Alberto Salvati"  ha scritto nel messaggio 
news:c6a61e7e-66f3-41a0...@googlegroups.com...
1) ke kakkio è EntryDescri?
EntryDescri è il nome dell'edit (di tipo TJvCombo) nel frame
 
2) a cosa serve la property OnButtonClick?
Da fuori non la usi e manco da dentro...
 
OnButtonClick è un evento dell'edit nel frame:
 
procedure TFrameEntry.EntryDescriButtonClick(Sender: TObject);
begin
   EntryDescri.Clear;
   EntryDescri.SetFocus;
end;
 
Il click sul bottone dell'edit deve cancellarne il contenuto e predisporre 
il cursore alla immissione.
Non capisco perchè il form non riconosce la property OnButtonClick che è 
pubblica e che secondo me dovrebbe collegare all'evento del frame. Forse non 
è il modo corretto di farla conoscere al form?
Quando nel form digito la istruzione 
<FrameEntry1.EntryDescri.OnButtonClick.....> delphi mi suggerisce il 
completamento, segno che FrameEntry1 è conosciuto... Evidentemente c'è 
qualcosa che mi sfugge.
 
 
 
 
A. 
 

si...ok..ma la property OnButtonClick dcihiarata nella public del frame CHI KAZ LA USA??
Dal tuo codice la property sta la e non viene mai usata.
 
 
A.

"Alberto Salvati"  ha scritto nel messaggio 
news:2c9eb9bc-04dc-446f...@googlegroups.com...

Non capisco. Continui a farmi la domanda a cui io credo di avere già 
risposto. E' evidente che non ci capiamo. La usa il form che ospita la 
frame. La proc associata alla property deve fare quello che ti ho detto. Se 
nel form, l'utente clicca sul bottone dell'edit la proc nel frame 
identificata da OnButtonClick dovrebbe essere eseguita per pulire l'edit e 
mettere lì il focus.
Non so cosa altro dirti per spiegarmi.
L'alternativa è che nel form io ridefinisca una procedura analoga catturando 
l'evento OnButtonClick dal form. 
 


 
Prova con:
FrameEntry1.EntryDescri.OnButtonClick:= FrameEntry1.EntryDescriButtonClick;
 
ma, se capisco bene, dovresti poterlo fare anche a design time.
 
Ciao.

 frame. La proc associata alla property deve fare quello che ti ho detto. 
 
No. Sei in errore.
 
1) la property onClick è del Frame
 
 
2) dentro il frame non la usa nessuno
 
3) da fuori, tu stai assegnando l'evento OnClick dell'editor, e stai tentando di assegnarli la onclick di cui sopra, ma quella property E' DEL FRAME NON DEL FORM.
Insomma, un casino bestiale.
La forma corretta dovrebbe essere questa:
 
 
  FrameEntry1.EntryDescri.OnButtonClick:= FrameEntry1.OnButtonClick; 
 
che ovviamente, ma non per tutti,è una cazzata.
 
A.

 frame. La proc associata alla property deve fare quello che ti ho detto.
No. Sei in errore.
1) la property onClick è del Frame
Certo che è del frame
2) dentro il frame non la usa nessuno
No, è vero, non la usa nessuno dentro il frame. Ma io credevo di poterla 
usare fuori dal frame, in modo da non essere necessario ridefinirla ogni 
volta. E' qui che sono in errore. Eppure ero convinto di averlo già fatto..
3) da fuori, tu stai assegnando l'evento OnClick dell'editor, e stai 
tentando di assegnarli la onclick di cui sopra, ma quella property E' DEL 
FRAME NON DEL FORM.
Insomma, un casino bestiale.
La forma corretta dovrebbe essere questa:
  FrameEntry1.EntryDescri.OnButtonClick:= FrameEntry1.OnButtonClick;
che ovviamente, ma non per tutti,è una cazzata.
A.
Ma questa forma funziona, lo so. Ma io continuavo a pensare  di poter 
definire dei comportamenti della frame che nelle varie istanze in cui io 
decidessi di usarla fossero già previsti dalla frame, senza reiventarli ogni 
volta e solamente stabilendo il collegamento 
 

Trovato! Per far eseguire nel form la procedura OnButtonClick prevista nel 
frame occorre inserire nell'evento del form il richiamo all'evento nel frame 
così:
 
procedure TEntryForm.FrameEntry1EntryDescriButtonClick(Sender: TObject);
begin
   FrameEntry1.EntryDescriButtonClick(Sender);
end;
 
Grazie mille comunque Alberto per aver cercato in tutti i modi di capire 
cosa volevo fare ... 
 

 Uno è libero di utilizzarli come meglio crede ma secondo me qui Alberto Salvati ha ragione e ha dato un consiglio corretto a mio parere.
 
No, non ha ragione e non e` un consiglio giusto, perche` non sta scritto da nessuna parte che i frame si DEBBANO creare a runtime. Posso citarti milioni di esempi in cui i frame sono creati a design time e funzionano benissimo. Non fate delle vostre esperienze regole generali.

 cosa volevo fare ...
 
Per la tua sanita` mentale, ti consiglio di lasciarlo perdere.