La classe avrà tre proprietà di tipo testo, una per la gestione del percorso e nome del file immagine, una per il colore dello sfondo della form e l’latra per la gestione della velocità del cambiamento della posizione dell’immagine.
Creazione della finestra opzioni
Dopo aver creato la classe che permette la gestione delle opzioni, non ci resta che creare una finestra, nella quale sarà possibile impostare i parametri del nostro salva schermo.
La finestra è composta da una casella combinata per impostare la velocità dello spostamento dell’immagine nello schermo, un controllo di tipo option button per impostare il colore di sfondo (rosso, verde e blu) una casella di testo ed un pulsante per la selezione dell’immagine, ed un controllo pciturebox, che avrà il compito di visualizzare l’anteprima dell’immagine.
Nella figura 2 è mostrata l’impostazione di tale finestra.
Figura2
Il pulsante annulla, avrà il compito di chiudere la finestra.
Di seguito si riporta il frammento di codice di tale pulsante
VB.Net
Me.Close()
C#
this.Close();
Nell’evento load della form, verranno caricati i dati salvati in precedenza.
Tramite il metodo caricaopzioni, della classe opzioni, verrà valorizzato l’oggetto opzioni, con i dati rilevati dal file di configurazione.
Dopo tale operazione, verranno valorizzati i vari controlli posti sulla form.
Di seguito si riporta il frammento di codice da inserire nell’evento load.
VB.Net
'Carico i dati
Dim fileOpzioni As New Opzioni()
fileOpzioni.CaricaOpzioni()
'imposto il colore
Select Case fileOpzioni.Colore_Sfondo.ToUpper()
Case "BLU"
rdbBlu.Checked = True
Case "VERDE"
RdbVerde.Checked = True
Case "ROSSO"
rdbRosso.Checked = True
End Select
'Imposto la velocità
cmbVelocita.Text = fileOpzioni.Velocita
'Percorso foto
txtNomeFile.Text = fileOpzioni.Immagine
If fileOpzioni.Immagine.Trim() <> "" Then
PictureBox1.ImageLocation = fileOpzioni.Immagine
End If
C#
//Carico i dati
Opzioni fileOpzioni = new Opzioni();
fileOpzioni.CaricaOpzioni();
//imposto il colore
switch (fileOpzioni.Colore_Sfondo.ToUpper())
{
case "BLU":
rdbBlu.Checked = true;
break;
case "VERDE":
RdbVerde.Checked = true;
break;
case "ROSSO":
rdbRosso.Checked = true;
break;
}
//Imposto la velocità
cmbVelocita.Text = fileOpzioni.Velocita;
//Percorso foto
txtNomeFile.Text = fileOpzioni.Immagine;
if (fileOpzioni.Immagine.Trim() != "")
PictureBox1.ImageLocation = fileOpzioni.Immagine;
Il pulsante con il testo dei tre puntini “…” permette di visualizzare una finestra di dialogo per la selezione dell’immagine (jpg o gif).
Impostando la proprietà RestoreDirectory a true permetterà di mantenere le informazioni rilevate, in questo modo, quando andremo a salvare il file di configurazione, le modifiche verranno apportate altrimenti, se impostato a false, nessuna modifica verrà effettuata.
Dopo aver selezionato il file immagine, verrà riportato nella casella di testo il percorso e nome del file immagine, mentre nel controllo picturebox verrà visualizzata l’immagine.
Di seguito si riporta il frammento di codice delle suddette operazioni.
VB.Net
'Carico nella casella di testo il nome ed il percorso del file
Dim dlgFile As New OpenFileDialog()
dlgFile.Filter = "*.Jpg|*.Jpg|*.gif|*.gif|*.bmp|*.bmp"
dlgFile.Title = "Selezionare il file immagine che si vuole impostare come immagine di salvaschermo"
dlgFile.RestoreDirectory = True
If dlgFile.ShowDialog() = Windows.Forms.DialogResult.OK Then
txtNomeFile.Text = dlgFile.FileName
PictureBox1.ImageLocation = txtNomeFile.Text
End If
C#
//Carico nella casella di testo il nome ed il percorso del file
OpenFileDialog dlgFile = new OpenFileDialog();
dlgFile.Filter = "*.Jpg|*.Jpg|*.gif|*.gif|*.bmp|*.bmp";
dlgFile.Title = "Selezionare il file immagine che si vuole impostare come immagine di salvaschermo";
dlgFile.RestoreDirectory = true;
if (dlgFile.ShowDialog() == DialogResult.OK)
{
txtNomeFile.Text = dlgFile.FileName;
PictureBox1.ImageLocation = txtNomeFile.Text;
}
Per concludere le operazioni su questa form(opzioni), non ci resta che scrivere il codice per il pulsante ok, il quale dovrà salvare le impostazioni per il nostro salva schermo. Tramite il metodo SalvaOpzioni, salveremo i valori impostati nelle varie proprietà (colore_sfondo, velocità ed immagine) nel file di configurazione.
Il codice dev’essere simile a quello riportato qui di seguito.
VB.Net
Dim FileOpzioni As New Opzioni()
If rdbBlu.Checked = True Then
FileOpzioni.Colore_Sfondo = "BLU"
ElseIf RdbVerde.Checked = True Then
FileOpzioni.Colore_Sfondo = "VERDE"
Else
FileOpzioni.Colore_Sfondo = "ROSSO"
End If
PictureBox1.ImageLocation = ""
FileOpzioni.Velocita = cmbVelocita.Text
FileOpzioni.Immagine = txtNomeFile.Text
FileOpzioni.SalvaOpzioni()
Me.Close()
C#
Opzioni FileOpzioni = new Opzioni();
if (rdbBlu.Checked == true)
FileOpzioni.Colore_Sfondo = "Blu";
else if (RdbVerde.Checked == true)
FileOpzioni.Colore_Sfondo = "Verde";
else
FileOpzioni.Colore_Sfondo = "Rosso";
PictureBox1.ImageLocation = "";
FileOpzioni.Velocita = cmbVelocita.Text;
FileOpzioni.Immagine = txtNomeFile.Text;
FileOpzioni.SalvaOpzioni();
this.Close();
Creazione della finestra Screen Saver
A questo punto non ci resta che scrivere la finestra per il nostro screen saver. La form, del salvaschermo, avrà impostato la proprietà FormBorderStyle in none, mentre la proprietà TopMost sarà impostato a true, e la proprietà WindowState a maximized.
Fatto ciò inseriamo nella form un controllo picturebox, il quale visualizza la nostra immagine, rilevandola nel nostro file di opzioni, ed un controllo per la gestione del tempo, ossia un timer.
Dichiariamo a livello di form le variabili per la gestione della grafica, per il posizionamento del controllo picturebox e per la gestione del mouse.
Di seguito si riporta la dichiarazone di tali campi.
VB.Net
' oggetto per la grafica
Private m_Graphics As Graphics
'Oggetto per le opzioni
Private m_Opzioni As New Opzioni()
' per la prima impostazione
Private m_Attivo As Boolean = False
'verifico lo spostamento del mouse
Private m_MousePosizione As Point
'oggetto per cambiare di volta in volta le coordinate
Private m_Random As New Random()
C#
// oggetto per la grafica
private Graphics m_Graphics;
//Oggetto per le opzioni
private Opzioni m_Opzioni = new Opzioni();
// per la prima impostazione quando si avvia lo screnn saver
private bool m_Attivo = false;
// verifico lo spostamento del mouse
private Point m_MousePosizione;
//oggetto per cambiare di volta in volta le coordinate
private Random m_Random = new Random();
Il nostro programma, sarà avviato tramite un opportuno metodo, questa funzione denominata main, avrà il compito di accettare un argomento, in base al parametro passato, verrà visualizzata o la finestra del salva schermo oppure quelle delle opzioni.
Infatti la finestra delle proprietà dello schermo di Windows, per avviare un salvaschermo, passa degli argomenti, la c sta per opzioni, mentre la s sta per salva schermo, mentre la p, permette l'anteprima del salva schermo.
Di seguito si riporta il frammento di codice di tale operazioni.
VB.Net
' Programma di avvio - startup del progetto
<STAThread()> Shared Sub Main(ByVal args As String())
' Verifico l'argomento che viene passato /c = opzioni /s screnn saver /p da anteprima
If args.Length > 0 Then
'Anteprima
If args(0).ToLower = "/p" Then
' da personalizzare anteprima quando viene selezionato dalla finestra screnne saver il nome.
Application.Exit()
End If
'finestra delle opzioni
If args(0).ToLower.Trim().Substring(0, 2) = "/c" Then
Dim FrmOpzioni As New FrmOpzioni()
FrmOpzioni.ShowDialog()
Application.Exit()
End If
' avvio lo screen saver
If args(0).ToLower = "/s" Then
Dim ScreenForm As New Form1()
ScreenForm.ShowDialog()
Application.Exit()
End If
Else
'in caso di doppio click
Dim ScreenForm As New Form1()
ScreenForm.ShowDialog()
Application.Exit()
End If
End Sub
C#
[STAThread]
static void Main(string[] args)
{
// Verifico l'argomento che viene passato /c = opzioni /s screnn saver /p da anteprima
if (args.Length > 0)
{
//Anteprima
if (args[0].ToLower() == "/p")
{
// da personalizzare anteprima quando viene selezionato dalla finestra screnne saver il nome.
Application.Exit();
}
//finestra delle opzioni
if (args[0].ToLower().Trim().Substring(0, 2) == "/c")
{
FrmOpzioni FrmOpzioni = new FrmOpzioni();
FrmOpzioni.ShowDialog();
Application.Exit();
}
// avvio lo screen saver
if (args[0].ToLower() == "/s")
{
Form1 ScreenForm = new Form1();
ScreenForm.ShowDialog();
Application.Exit();
}
}
else
{
//in caso di doppio click
Form1 ScreenForm = new Form1();
ScreenForm.ShowDialog();
Application.Exit();
}
}
Nell’evento load della finestra per visualizzare il screen saver, verrà creato un oggetto di tipo opzioni, che tramite il metodo carica dati, imposta la form con i parametri impostati. Verrà impostato la velocità di spostamento dell’immagine, l’immagine da visualizzare ed il colore dello sfondo della form.
Inoltre verrà avviato il timer.
Di seguito si riporta il codice delle suddette operazoni.
VB.Net
'oggetto per la creazione grafica
Me.m_Graphics = Me.CreateGraphics()
'rilevo le opzioni
m_Opzioni.CaricaOpzioni()
PictureBox1.ImageLocation = m_Opzioni.Immagine
'imposto il tempo
Select Case m_Opzioni.Velocita.ToUpper()
Case "VELOCE"
tmrAggiornamento.Interval = 1000
Case "MEDIA"
tmrAggiornamento.Interval = 500
Case "LENTA"
tmrAggiornamento.Interval = 200
End Select
'rilevo il colore di sfondo
Select Case m_Opzioni.Colore_Sfondo.ToUpper()
Case "BLU"
Me.BackColor = Color.Blue
Case "VERDE"
Me.BackColor = Color.Green
Case "ROSSO"
Me.BackColor = Color.Red
End Select
'Abilito il timer
tmrAggiornamento.Enabled = True
C#
//oggetto per la creazione grafica
this.m_Graphics = this.CreateGraphics();
//rilevo le opzioni
m_Opzioni.CaricaOpzioni();
PictureBox1.ImageLocation = m_Opzioni.Immagine;
//imposto il tempo
switch (m_Opzioni.Velocita.ToUpper())
{
case "VELOCE":
tmrAggiornamento.Interval = 1000;
break;
case "MEDIA":
tmrAggiornamento.Interval = 500;
break;
case "LENTA":
tmrAggiornamento.Interval = 200;
break;
}
//rilevo il colore di sfondo
switch (m_Opzioni.Colore_Sfondo.ToUpper())
{
case "BLU":
this.BackColor = Color.Blue;
break;
case "VERDE":
this.BackColor = Color.Green;
break;
case "ROSSO":
this.BackColor = Color.Red;
break;
}
//Abilito il timer
tmrAggiornamento.Enabled = true;
Nell’evento tick del controllo timer verrà richiamata la funzione Visualizzare, che avrà il compito di visualizzare l'immagine, con le impostazioni effettuate.
Di seguito si riporta il codice dell’evento tick del controllo timer.
VB.Net
Private Sub tmrAggiornamento_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrAggiornamento.Tick
Visualizza()
End Sub
C#
private void tmrAggiornamento_Tick(object sender, EventArgs e)
{
Visualizza();
}
Quando si sposta il mouse oppure si digita un suo pulsante, occorre chiudere il nostro applicativo, tramite gli eventi mousemove e mouse down della nostra form, possiamo controllare tale situazione per chiudere il programma.
Di seguito si riporta il frammento di codice per l’evento mousemove
VB.Net
Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
If Not m_Attivo Then
Me.m_MousePosizione = New Point(e.X, e.Y)
m_Attivo = True
Else
If Math.Abs(e.X - Me.m_MousePosizione.X) > 10 Or _
Math.Abs(e.Y - Me.m_MousePosizione.Y) > 10 Then
'Esco dal programma
Application.Exit()
End If
End If
End Sub
C#
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (!m_Attivo)
{
this.m_MousePosizione = new Point(e.X, e.Y);
m_Attivo = true;
}
else
{
if (Math.Abs(e.X - this.m_MousePosizione.X) > 10 && Math.Abs(e.Y - this.m_MousePosizione.Y) > 10)
{
//Esco dal programma
Application.Exit();
}
}
}
Mentre qui di seguito si riporta il frammento di codice per l’evento MouseDown
VB.Net
Private Sub Form1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
Application.Exit()
End Sub
C#
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
Application.Exit();
}
La funzione visualizza, avrà il compito di impostare le coordinate, o meglio la posizione della picturebox in varie parti dello schermo. Tramite la classe random, impostiamo un numero causale relativo alle coordinate.
Di seguito si riporta lo script per la funzione Visualizza.
VB.Net
Private Sub Visualizza()
' Dimensione della form
Dim maxX As Integer = Me.Width
Dim maxY As Integer = Me.Height
' Coordinate random dinamiche
Dim x1, x2, y1, y2 As Integer
'Genero il numero delle coordinate
x1 = m_Random.Next(0, maxX)
x2 = m_Random.Next(0, maxX)
y1 = m_Random.Next(0, maxY)
y2 = m_Random.Next(0, maxY)
'imposto le coordinate
If y1 < 500 Then y1 = 400
PictureBox1.Top = y1 - PictureBox1.Height
If x1 < 400 Then x1 = 400
PictureBox1.Left = x1 - PictureBox1.Width
End Sub
C#
private void Visualizza()
{
//Dimensione della form
Int32 maxX = this.Width;
Int32 maxY = this.Height;
// Coordinate random dinamiche
Int32 x1, x2, y1, y2;
//Genero il numero delle coordinate
x1 = m_Random.Next(0, maxX);
x2 = m_Random.Next(0, maxX);
y1 = m_Random.Next(0, maxY);
y2 = m_Random.Next(0, maxY);
//imposto le coordinate
if (y1 < 500)
y1 = 400;
PictureBox1.Top = y1 - PictureBox1.Height;
if (x1 < 400)
x1 = 400;
PictureBox1.Left = x1 - PictureBox1.Width;
}
Impostazioni e test del nostro salva schermo.
A questo punto non ci resta che testare il nostro salva schermo, compiliamo in modalità realese, se volete fare il debug, lasciate modalità debug.
Nelle proprietà del progetto, impostate il progetto di avvio, con il metodo main. Inoltre per il linguaggio VB.Net, impostate per la scheda “compile” compilazione, La voce implicit conversion e late binding call could fail at run time a none.
Mentre nella finestra assembly information (tramite il pulsante con la scritta "Assembly Information") spuntate il checkbox quello relativo a make assembly com-visible.
Dopo aver compilato il progetto, rinominate il file exe in .scr e copiatelo nella cartella C:\WINDOWS\system32 (qualora il sistema operativo è installato in tale unità).
Aprire la finestra delle proprietà dello schermo, nel tab Screen Saver, selezionate dall’elenco dei salva schermo, il vostro salva schermo appena creato, digitate il pulsante prova, per verificare le corrette impostazioni.
Conclusioni:
In questo articolo si è visto come creare un semplice salva schermo, che visualizza un immagine in diverse posizione dello schermo. Questo articolo ha fornito al lettore le basi per la creazione di un salva schermo, naturalmente si può ampliare, migliorare con effetti avanzati.
Tramite la parola download è possibile scaricare il file di esempio utilizzato in questo articolo.
Download