richiesta sfondo scrivania airgunsitaly

Ritrovo per passare un po' di tempo insieme, chiacchierando su vari argomenti.
Potete fare gli auguri ai vostri amici iscritti per compleanni, festività ecc...

Moderatore: Carlo5

Messaggio
Autore
Avatar utente
Sid
Maestro di tiro
Maestro di tiro
Messaggi: 1553
Iscritto il: martedì 4 gennaio 2011, 22:30
13
Età: 45

Re: richiesta sfondo scrivania airgunsitaly

#17 Messaggio da Sid »

Beh qua andiamo sul complicato.... e possibile, ma ci vuole veramente un esperto per capire questo.....
:sweating:


Form1:
FormBorderStyle=None
Size=200;200
Text=Orologio

PictureBox:
Name:PBClock
BackgroundImage=Orologio.My.Resources.Orologio_Rosso
Dock=Fill

Il codice che segue può essere copiato e incollato nell'ordine in cui appare quà perché l'applicazione funzioni correttamente.

Public Class Form1

'coordinate dei punti che individuano le lancette
Dim puntoSecondi1 As Point
Dim puntoSecondi2 As Point

Dim puntoMinuti1 As Point
Dim puntoMinuti2 As Point

Dim puntoOre1 As Point
Dim puntoOre2 As Point

'coordinate della form
Dim posX As Integer
Dim posY As Integer

Dim penna As New Pen(Color.Black, 3)

'incremento necessario per spostare la lancetta delle ore di 6° ogni 12 minuti
'praticamente la lancetta delle ore deve percorrere lo spazio di 5 minuti in un'ora
Dim inc As Integer = 0

Tutte e tre le lancette verranno ridisegnate secondo per secondo.
Quella dei secondi vedrà cambiare la sua posizione ogni singola volta, mentre quella dei minuti si modificherà 1 volta ogni 60 secondi.
Discorso a parte va fatto per la lancetta delle ore che deve spostarsi sul quadrante non 1 volta all'ora, bensi in questo lasso di tempo, deve percorrere lo spazio di 5 minuti esattamente in 60 minuti. Infatti in ogni orologio analogico l'indicatore delle ore si muove molto lentamente e, per fare un esempio, alle 08:05 sta in una posizione diversa rispetto alle 08:50, più vicina al numero 8 nel primo caso, più prossima al numero 9 nel secondo. Praticamente la lancetta delle ore deve coprire l'ampiezza di 6° ogni 12 minuti. La variabile inc serve a questo scopo.

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Dim finalShape As Region
Dim shapePath As Drawing2D.GraphicsPath

'intervallo di 1 secondo
Timer1.Interval = 1000
Timer1.Enabled = True

'i terminali delle lancette saranno triangolari
penna.EndCap = Drawing2D.LineCap.Triangle

'il form assumerà una forma circolare come il qudrante dell'orologio: (ellipse(0,0,199,199)
shapePath = New Drawing2D.GraphicsPath()
shapePath.AddEllipse(0, 0, 199, 199)
finalShape = New Region(shapePath)
Me.Region = finalShape
shapePath.Dispose()

'calcola le coordinate dei punti in cui si trovano le lancette quando viene visualizzata la form
puntoSecondi1 = CalcolaPunto(6 * DateTime.Now.Second - 90, 70)
puntoSecondi2 = CalcolaPunto(6 * DateTime.Now.Second - 90, 6)

puntoMinuti1 = CalcolaPunto(6 * DateTime.Now.Minute - 90, 60)
puntoMinuti2 = CalcolaPunto(6 * DateTime.Now.Minute - 90, 6)

inc = DateTime.Now.Minute \ 12

puntoOre1 = CalcolaPunto(30 * DateTime.Now.Hour - 90 + inc * 6, 40)
puntoOre2 = CalcolaPunto(30 * DateTime.Now.Hour - 90 + inc * 6, 6)

End Sub

'aggiorna le coordinate dei punti secondo per secondo
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick

'calcola le coordinate dei punti in cui si trovano le lancette al trascorrere dei secondi
puntoSecondi1 = CalcolaPunto(6 * DateTime.Now.Second - 90, 70)
puntoSecondi2 = CalcolaPunto(6 * DateTime.Now.Second - 90, 6)

puntoMinuti1 = CalcolaPunto(6 * DateTime.Now.Minute - 90, 60)
puntoMinuti2 = CalcolaPunto(6 * DateTime.Now.Minute - 90, 6)

inc = DateTime.Now.Minute \ 12

puntoOre1 = CalcolaPunto(30 * DateTime.Now.Hour - 90 + inc * 6, 40)
puntoOre2 = CalcolaPunto(30 * DateTime.Now.Hour - 90 + inc * 6, 6)

PBClock.Refresh()

End Sub

'Funzione che converte in radianti l'angolo descritto da ogni lancetta e determina le coordinate dei punti
'che le rappresentano.
Private Function CalcolaPunto(ByVal angolo As Single, ByVal raggio As Integer) As Point

Dim punto As Point

'converte in radianti
angolo = CType(angolo * Math.PI / 180, Single)

'(100,100) coordinate del centro del quadrante)
punto.X = CType(raggio * Math.Cos(angolo) + 100, Integer)
punto.Y = CType(raggio * Math.Sin(angolo) + 100, Integer)

Return punto

End Function

Private Sub PBClock_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles _
PBClock.DoubleClick

Me.Close()

End Sub

Private Sub PBClock_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) _
Handles PBClock.Paint

Dim g As Graphics = e.Graphics

'lancetta dei secondi
g.DrawLine(Pens.Black, puntoSecondi2.X, puntoSecondi2.Y, puntoSecondi1.X, puntoSecondi1.Y)

'lancetta dei minuti
g.DrawLine(penna, puntoMinuti2.X, puntoMinuti2.Y, puntoMinuti1.X, puntoMinuti1.Y)

'lancetta delle ore
g.DrawLine(penna, puntoOre2.X, puntoOre2.Y, puntoOre1.X, puntoOre1.Y)

End Sub

'Sub necessaria per trascinare l'orologio lungo lo schermo con il mouse. A condizioni normali il mouse cattura la posizione dell'angolo in alto a sinistra del controllo, pertanto quando lo si trascina, anche se lo puntiamo al centro della form, il puntatore verrebbe automaticamente spostato nell'angolo Alto-Sx

Private Sub PBClock_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles PBClock.MouseMove

If e.Button = MouseButtons.Left Then

Dim mousePos As Point = Control.MousePosition
mousePos.Offset(posX, posY)
CType(sender, PictureBox).FindForm().Location = mousePos

End If

End Sub

'Cattura la posizione del mouse sulla form e la mantiene lungo tutto il trascinamento
Private Sub PBClock_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles PBClock.MouseDown

posX = -e.X
posY = -e.Y

End Sub

End Class
Per chi ci sa fare..... buon divertimento..... :laugh:
Hw 977 Depo con ottica Nikko Stirling Nighteater 6-24x56 AO AG IR FT
Gamo CFR Depo con ottica Nikko Stirling Nighteater 6-24x44 AO Mill Dot
Sono responsabile di quello che dico e non di quello che si capisce!

Immagine Immagine Immagine

Avatar utente
amedeo
Supporter
Supporter
Messaggi: 4121
Iscritto il: martedì 29 dicembre 2009, 22:50
14
Età: 70

Re: richiesta sfondo scrivania airgunsitaly

#18 Messaggio da amedeo »

... Sid ... qualcosa di più semplice e funzionale ... no? ... :cool:
viewtopic.php?t=27202#

BSA Buccaneer SE depo cal. 4,5
Vector Sentinel 8 - 32 X 50

Rispondi

Torna a “AirgunsItaly Cafè”