Questo sito utilizza cookies
solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi
l'informativa sui cookies
.
Accesso in corso...
Username:
Password:
oppure
Username o password invalidi
Forum
Sorgenti
C
C++
Managed C++
Visual Basic .NET
Visual Basic
Visual C++
Java
C#
Perl
Qbasic
Delphi
Python
Prolog
Lua
Scheme
Cobol
LabVIEW
Ruby
ASP
PHP/MySQL
x86 Assembly
MIPS Assembly
Pascal
Fortran
Bash
Gml
Javascript
Programmi
Animazioni
Desktop
Esempi
Giochi
Grafica e Fotografia
Insegnamento e hobby
Internet
Lavoro e finanza
Matematica e fisica
Moduli e librerie
Musica
Networking
Scripts
Sicurezza
System Tweak
Utility
Web authoring
Guide
Visual Basic .NET
Pascal
HTML
SDL
Typescript
VBScript
Batch scripting
GWBasic
Licenze Software
Recensioni
Manuali
Software
Tutorials
Linguaggi
ASP
C
C#
C++
Delphi
Java
Pascal
Perl
PHP
Prolog
Python
Ruby
Ruby On Rails
Scheme
Visual Basic
Google
Hardware
Informatica
Internet
iPhone
Masterizzare
CD
DVD
Files Immagine
Mp3 e Audio
Sicurezza e OS
Sistemi operativi
Linux
Windows
Video Digitale
Lezioni
Programmazione
Ruby
iOS
Tecnologie
Multi Touch
Project Zone
Che cos'è?
Progetti più attivi
Editor mappe
Analisi testi
Parole
FILDER
2048
2D Mappy
RTDownloadCounter
SSBackUp
Estrazione
Codificatore
pSIMPLETRON
ErrorReporter.NET
Web Escape
Napoleon
Mini Cad
Tutti i progetti
Utility
News nel tuo sito
Blog
Compilatori
Masterizzare
Siti amici
Pubblica un sorgente
Programmare
Come imparare a programmare
Come diventare un buon programmatore
Community
Chi Siamo?
Membri
Dev Team
Join Us
Libreria
Premio Stallman
I Top 10
Medagliere
Mascotte
Foto raduni
Assumici
Scrivici
supportaci
Forum
-
Pascal
- programmazione ad eventi
Ocentral
(Normal User)
Pro
Messaggi:
86
Iscritto:
25/12/2009
Postato alle
15:17
Giovedì, 04/03/2010
scusate ma in pascal è possibie la programmazione ad eventi come quella di lazarus?
se si come?
grazie
TheKaneB
(
Member
)
Guru^2
Messaggi:
1792
Iscritto:
26/06/2009
Postato alle
10:49
Venerdì, 05/03/2010
la programmazione ad eventi è una tecnica che puoi implementare in qualsiasi linguaggio di programmazione semidecente.
La tecnica di base consiste nello strutturare il programma in (almeno) 3 componenti distinti:
- Listener
- Dispatcher
- Handlers
Volendo, non è nemmeno necessario farli girare su thread diversi. Vediamo come funziona (in pseudocodice):
Codice sorgente - presumibilmente VB.NET
==
Listener
==
mainloop
(
)
:
-
loop
-
foreach
(
evento in listaEventi
)
do
-
if
evento
-
>occurred
(
)
-
dispatcher
-
>raise
(
evento
)
-
next
-
dispatcher
-
>process
(
)
//
se siamo su thread separati, questo comando non serve
-
repeat
register
(
evento
)
:
-
if
evento
not
in listaEventi
-
listaEventi
-
>add
(
evento
)
==
Dispatcher
==
raise
(
evento
)
:
-
handler
=
evento
-
>handler
-
scheduler
-
>add
(
handler
)
process
(
)
:
//
se siamo su thread separati, inserire in un
loop
infinito questi comandi
-
foreach
(
job in scheduler
)
do
-
job
-
>doWork
(
)
-
scheduler
-
>remove
(
job
)
-
next
==
Handler
==
//
Creo e impacchetto le informazioni necessarie per gestire l
'evento
main
(
)
:
-
new
evento
//
NOTA:
"this"
potrebbe essere un record, una classe, o una struct
//
l
'importante è poter memorizzare dei puntatori a funzione nei suoi membri
//
PS: In un linguaggio OOP si può ottenere lo stesso risultato ereditando da una classe
//
Handler virtuale ed implementando i metodi doWork
(
)
e occurred
(
)
, anzichè storare
//
dei puntatori a funzione
-
evento
-
>handler
=
this
-
evento
-
>doWork
=
this
-
>someFunction
-
evento
-
>occurred
=
this
-
>eventOccurredChecker
-
listener
-
>register
(
evento
)
-
listener
-
>mainloop
(
)
//
se usiamo thread diversi, questo
loop
dovrà girare su un thread apposito, lo stesso vale per il
"process"
del dispatcher
//
Il gestore vero e proprio
someFunction
(
)
:
-
MessageBox
(
"Chupa"
)
//
funzione booleana che controlla se l
'evento si è verificato
eventOccurredChecker
(
)
:
-
if
mouse
-
>isOver
(
button1
)
AND
mouse
-
>leftClicked
-
return
TRUE
-
else
-
return
FALSE
That's all folks...
Ultima modifica effettuata da
TheKaneB
il 05/03/2010 alle 11:00
Ocentral
(Normal User)
Pro
Messaggi:
86
Iscritto:
25/12/2009
Postato alle
21:00
Venerdì, 05/03/2010
La ringrazio