Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Orologio analogico - Perché l'ennesimo orologio?

Orologio analogico

Sommario | Admin | Forum | Bugs | Todo | Files

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 21:20
Lunedì, 12/03/2018
Fatto 5 righe di codice, posizioni l'orologio dove vuoi, con le lancette e il quadrante che vuoi, clicchi sul quadrante e: scompare tutto quello che c'è intorno, rimane sempre in primo piano e scompare dalla task bar.
Se lo riclicchi torna come era prima.


Carlo ha allegato un file: Orologio_Fotorealistico.zip (676452 bytes)
Clicca qui per scaricare il file


in programmazione tutto è permesso
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 23:33
Lunedì, 12/03/2018
Caricata ultima versione:
Scegli il quadrante, le lancette, la dimensione e la posizione. clicca sul quadrante per nascondere il form, riclicca per mostrare il form


in programmazione tutto è permesso
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:13
Martedì, 13/03/2018
Fossi in te, eliminerei tutte quelle picturebox sono inutili.
Ne basta una sola per fare tutto


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 17:20
Martedì, 13/03/2018
Testo quotato

Fossi in te, eliminerei tutte quelle picturebox sono inutili.
Ne basta una sola per fare tutto



Si, tutto era iniziato con le trasparenze, non pensavo all'orologio, con e.Graphics.DrawImage si possono disegnare le immagini in una sola picturebox.
Inoltre basta una sola immagine per ogni lancetta e con e.Graphics.RotateTransform, si può ruotare 6 gradi per 6 gradi, o addirittura fare il movimento continuo.

Non ho usato questo approcio perchè ho ancora alcuni concetti non perfettamente chiari, tipo l'invalidate, e non so cancellare la vecchia immagine senza che si veda uno sfarfallio, so che si può evitare con il double buffer e anche altri metodi, ma tra il dire e il fare....

Non da ultimo usando e.graphics quando si ridisegna l'immagine si può usare l'antialias "InterpolationMode" o "SmoothingMode" con vari livelli di qualità, che in questo progetto, da quando ho inserito lo zoom, è indispensabile.

Grazie Thejuster.

Ultima modifica effettuata da Carlo il 13/03/2018 alle 18:55


in programmazione tutto è permesso
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 19:36
Martedì, 13/03/2018
Bene, stai seguendo la strada giusta :k:

Dunque sicuramente da quel che ho capito sei un pò in confusione con il paint della picturebox.
In questo caso, posso darti delle giuste dritte che ti aiuteranno di un bel pò.
Lavoro principalmente sui componenti grafici, quindi posso darti buoni consigli.

Sapendo che vieni dal vb6, posso spiegartelo in questo modo.

Come sai il Paint del .net è basato sulle GDI di conseguenza risponde ai messaggi WM_Paint etc.

Il metodo Invalidate, non serve per ripulire la scena di disegno o aggiornarla.
Ma l'invalidate ridisegna il controllo. Quindi lo sfarfallio, anche abilitando il doppio buffer lo avrai sempre.

La soluzione è utilizzare il metodo Update o Refresh.
Io preferisco il refresh.

Il Refresh a differenza dell'update, invalida sia il controllo e ne chiama l'update di tutti i membri annessi al suo interno.
Per il disegno è più logico utilizzare il metodo update.

Come puoi risolvere?

Semplicemente in questo modo.
il controllo PictureBox, ha due immagini.
Background e Image.

Nella tua situazione io farei in questo modo.
Visto che il quadrante, è un immagine fissa che non richiede aggiornamenti,
Ti basta applicare il quadrante come backgroundimage alla picture.

Successivamente puoi agganciarti all'hwnd della picture tramite il graphics.
e disegnarci direttamente sopra.
così quando chiamerai il metodo update o refresh non dovresti avere più il fastidioso effetto dello
sfarfallio.

lo sfarfallio avviene appunto quando viene ripulita la scena ( Invalidato il controllo)
Quindi ti sconsiglio di usare il metodo invalidate.
A meno ché tu non stia realizzando un controllo completamente diverso basato su componenti IContainer etc.
a quel punto l'invalidate diventa fondamentale.

Mi sembra di avertelo già mostrato questo programmino.

http://www.pierotofy.it/pages/extras/forum/viewattachment. ...

puoi trovarlo nella ProjectZone 2DMappy
http://www.pierotofy.it/pages/projects/project.php?id=651

anche se è scritto in C# sul web esistono traduttori online che convertono codice da C# a vb.net
quindi non dovrebbe essere molto complicato capirne i procedimenti.
almeno puoi capire come vengono gestite più immagini sovrapposte senza avere lo sfarfallio.
ti consiglio di dargli un occhiata.

Anche se a guardarlo ora, necessiterebbe di tantissime migliorie.
poi si vedrà :rotfl:

Ultima modifica effettuata da Thejuster il 13/03/2018 alle 19:52


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 1:29
Mercoledì, 14/03/2018
quando mi hai segnalato 2dmappy ero all'estero e lo sono tuttora, ho un portatilino con il solo visualbasic, non ho potuto vedere il sorgente C#, al mio rientro lo guardo di sicuro, l'ho già scaricato.
La soluzione è utilizzare il metodo Update o Refresh, bene proverò.

Per ora in rete ho trovato questo, che riassume un pò tutte le cose che vorrei padroneggiare...

Considera che sto sperimentando solo nei ritagli di tempo.

Guarda nel progetto 15 il gioco.

Ciao


Carlo ha allegato un file: VB_Drawing_Demo.zip (107286 bytes)
Clicca qui per scaricare il file


in programmazione tutto è permesso
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 23:12
Giovedì, 15/03/2018
Ho pubblicato la versione 2.0.0, dell'orologio analogico fotorealistico.
6 sfondi, 2 tipi di lancette, ridimensionabile, posizionabile con form nascondibile.

Ho ascoltato i consigli di Thejuster.

Una sola PictureBox
Un .png per ogni lancetta. (risparmiato 1Mb)

Inoltre, a scelta, scorrimento fluido della lancetta dei secondi.

Usato Tranform, MatrixTransform, TranslateTransform, RotateTransform, DrawImage, Refresh, Antialias.

P.s. dopo la 1/2 giornata per capire come spostare le coordinate di riferimento per la rotazione centrata, il resto si è risolto in un'oretta, più un'altra per le rifiniture.


Carlo ha allegato un file: Orologio_FotoRealistico.zip (375251 bytes)
Clicca qui per scaricare il file


in programmazione tutto è permesso
PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo