Il linguaggio di programmazione Delphi
 

Perchè non funziona

Stark 26 Mar 2017 20:41
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.
Alberto Salvati 27 Mar 2017 08:57
Comincia con il descrivere che errori ci sono qua sotto:

> private
> property OnButtonClick: TNotifyEvent read FOnButtonClick write
> FOnButtonClick;
> public
> property OnButtonClick: TNotifyEvent read FOnButtonClick write


> Dichiaro la frame negli uses e nel Create ho messo:

Cosa vuol dire? Come e quando crei il frame?

> Mi dà errore

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

A.
Stark 27 Mar 2017 15:35
"Alberto Salvati" ha scritto nel messaggio
news:2085a42e-a973-4620-a533-e9992f5e4677@googlegroups.com...

Comincia con il descrivere che errori ci sono qua sotto:

> private
> property OnButtonClick: TNotifyEvent read FOnButtonClick write
> FOnButtonClick;
> public
> property OnButtonClick: TNotifyEvent read FOnButtonClick write
Non ne vedo di errori ..

> Dichiaro la frame negli uses e nel Create ho messo:
Cosa vuol dire? Come e quando crei il frame?
Ma l'ho detto. L'ho messo nel form a designtime (dalla palette, FRame, dove
c'è la lista delle frames del progetto).

> 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'..
Alberto Salvati 27 Mar 2017 16:12
> Non ne vedo di errori ..

..quindi, a te sembra normale avere 2 volte la definizione di una STESSA
property, ma con 2 diversi livelli di visibilità...?


> Ma l'ho detto. L'ho messo nel form a designtime

MALE.
MOLTO MALE.
E' SBAGLIATO.
NON SI FA.
EQUIVALE A DARSI BOTTE SUI ******* CON UNA FOGLIA DI FICO D'INDIA.
I FRAME SI CREANO E SI PIAZZANO SUI FORM A RUNTIME.

> Non so come fai a sentire Cruciani..


A parte che ascolto anche Barisoni, sicuramente meglio Cruciani di tanti tanti
altri...
Almeno lui è COERENTE E NON SI NASCONDE DIETRO AD UN DITO.
Riguardo poi le telefonate che riceve, ammetto di sperare che siano preparate.
Se fossero VERE, siamo pù rovinati di ciò che credevo..


> Comunque, non so cosa dire più di quello che ho già detto.

Uno sviluppatore non può scrivere su un ng/forum di sviluppatori "ho un errore"
senza spiegare in modo COMPRENSIBILE il tipo di errore.
Altrimenti, ci cerchimao tutti una insegnante di sostegno (BONA,
possibilmente...) e torniamo alle elementari o in istituto di Don Orione o
similare ad ascoltare ra***** maria.


> 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.
Morde 27 Mar 2017 16:23
On 27.03.2017 15:35, Stark wrote:
> 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
Alberto Salvati 27 Mar 2017 16:36
> Qui non siamo al mercato del pesce, dove ti basta dire che puzza e tutti
> capiscono cosa significa.

Fixed! +1

A.
4ndre4 27 Mar 2017 20:30
On Monday, 27 March 2017 15:12:09 UTC+1, Alberto Salvati wrote:

[...]
> 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.
Alberto 28 Mar 2017 08:02
> 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
Stark 28 Mar 2017 12:50
"Morde" ha scritto nel messaggio news:obb790$16v1$1@gioia.aioe.org...

On 27.03.2017 15:35, Stark wrote:
> 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
--
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ì
Alberto Salvati 28 Mar 2017 14:31
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.
Stark 28 Mar 2017 15:51
"Alberto Salvati" ha scritto nel messaggio
news:1e30ebc3-ae96-4a09-92ee-9d8737145a85@googlegroups.com...
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.
---
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.
Alberto Salvati 28 Mar 2017 16:30
1) ke kakkio è EntryDescri?

2) a cosa serve la property OnButtonClick?
Da fuori non la usi e manco da dentro...




A.
Stark 28 Mar 2017 16:58
"Alberto Salvati" ha scritto nel messaggio
news:c6a61e7e-66f3-41a0-99ee-eef790b7e1bb@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.
Alberto Salvati 28 Mar 2017 17:06
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.
Stark 28 Mar 2017 17:19
"Alberto Salvati" ha scritto nel messaggio
news:2c9eb9bc-04dc-446f-b4a7-660efe50b6e6@googlegroups.com...
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.
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 *****oga catturando
l'evento OnButtonClick dal form.
Luigi Siciliano 28 Mar 2017 17:28
Il 26/03/2017 20.41, Stark ha scritto:
>
> Nel FORM:
> Dichiaro la frame negli uses e nel Create ho messo:
> FrameEntry1.EntryDescri.OnButtonClick:= OnButtonClick;
>

Prova con:
FrameEntry1.EntryDescri.OnButtonClick:= FrameEntry1.EntryDescriButtonClick;

ma, se capisco bene, dovresti poterlo fare anche a design time.

Ciao.
Alberto Salvati 28 Mar 2017 17:30
> E' evidente che non ci capiamo.

Almeno abbiamo capito di non aver capito.


> La usa il form che ospita la
> 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 ******* bestiale.
La forma corretta dovrebbe essere questa:


FrameEntry1.EntryDescri.OnButtonClick:= FrameEntry1.OnButtonClick;

che ovviamente, ma non per tutti,è una *****ata.

A.
Stark 28 Mar 2017 19:39
"Alberto Salvati" ha scritto nel messaggio
news:09d08d35-d823-4540-ad62-f312b8dc3378@googlegroups.com...
> E' evidente che non ci capiamo.
Almeno abbiamo capito di non aver capito.
> La usa il form che ospita la
> 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 ******* bestiale.
La forma corretta dovrebbe essere questa:
FrameEntry1.EntryDescri.OnButtonClick:= FrameEntry1.OnButtonClick;
che ovviamente, ma non per tutti,è una *****ata.
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
Stark 28 Mar 2017 20:54
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 ...
4ndre4 28 Mar 2017 21:19
On Tuesday, 28 March 2017 07:02:55 UTC+1, Alberto wrote:

[...]
> 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.
4ndre4 28 Mar 2017 21:23
On Tuesday, 28 March 2017 19:54:57 UTC+1, Stark wrote:

[...]
> Grazie mille comunque Alberto per aver cercato in tutti i modi di capire
> cosa volevo fare ...

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

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio di programmazione Delphi | Tutti i gruppi | it.comp.lang.delphi | Notizie e discussioni delphi | Delphi Mobile | Servizio di consultazione news.