Riporto un articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/creare-screen-saver-con-vbnet.asp
Figura 1
Introduzione
Inoltre il nostro Salva Schermo farà uso di una finestra delle opzioni, per impostare alcuni parametri, tra i quali, avremo la possibilità di impostare la velocità per il cambiamento della posizione, impostare un immagine e il colore di sfondo.
Creazione della classe Opzioni
Si apra Visual Studio 2005 e si crea un nuovo progetto di tipo Windows Application, scelto il linguaggio di proprio interesse (VB.Net o C#) verrà creato un nuovo progetto, con una form.
Si aggiunge al progetto una classe, tale classe ha il compito di gestire le informazioni riguardante il salva schermo, le opzioni che si potranno modificare nella finestra delle proprietà dello schermo, in particolare nel tab screen saver.
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.
VB.Net
Imports System.Xml.Serialization
Imports System.Xml
Imports System.IO
''' <summary>
''' Classe serializzata
''' </summary>
''' <remarks></remarks>
<Serializable()> Public Class Opzioni
#Region "Campi"
Private m_Velocita As String = "Media" 'Alta - Media - Bassa
Private m_Sfondo As String = "Blue" 'Colore sfondo
Private m_FileImmagine As String = Environment.CurrentDirectory & "\sfondo.jpg"
Private PercorsoOpzioni As String = Environment.CurrentDirectory & "\SalvaSchermoOpzioni.opt"
#End Region
#Region "Proprietà"
''' <summary>
''' Proprietà pr la gestione delle velocità di esecuzione dello spostamento nello schermo
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Velocita() As String
Get
Return m_Velocita
End Get
Set(ByVal value As String)
m_Velocita = value
End Set
End Property
''' <summary>
''' Colore di sfondo
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Colore_Sfondo() As String
Get
Return m_Sfondo
End Get
Set(ByVal value As String)
m_Sfondo = value
End Set
End Property
''' <summary>
''' Percorso e nome del file immagine che verrà visualizzato
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Property Immagine() As String
Get
Return m_FileImmagine
End Get
Set(ByVal value As String)
m_FileImmagine = value
End Set
End Property
#End Region
#Region "Funzioni"
Public Function FileOpzioniEsistente() As Boolean
Dim fileOpz As New System.IO.FileInfo(PercorsoOpzioni)
Return fileOpz.Exists()
End Function
Public Sub CaricaOpzioni()
Dim MyOpzioni As New Opzioni()
' Verifico che il file esista
If MyOpzioni.FileOpzioniEsistente() Then
' Oggetto di tipo serializzato
Dim mySerializer As New XmlSerializer(GetType(Opzioni))
' Leggo il file xml .opt
Dim TextReader As New StreamReader(PercorsoOpzioni)
' Oggetto xml per la lettura delle opzoni
Dim XmlReader As New Xml.XmlTextReader(TextReader)
' Verifico che il formato è conforme
If mySerializer.CanDeserialize(XmlReader) Then
' Deserializzo oggetto
MyOpzioni = CType(mySerializer.Deserialize(XmlReader), Opzioni)
Else
' Salvo il file opzioni
MyOpzioni.SalvaOpzioni()
End If
' Chiudo gli oggetti.
XmlReader.Close()
TextReader.Close()
' Imposto i vari valori
Me.Velocita = MyOpzioni.Velocita
Me.Colore_Sfondo = MyOpzioni.Colore_Sfondo
Me.Immagine = MyOpzioni.Immagine
End If
End Sub
Public Sub SalvaOpzioni()
' oggetto per la scrittura dei dati
Dim myWriter As New System.IO.StreamWriter(PercorsoOpzioni)
'oggetto serializzato
Dim myXmlSerializer As New XmlSerializer(Me.GetType())
'Serializzo l'oggetto
myXmlSerializer.Serialize(myWriter, Me)
myWriter.Close()
End Sub
#End Region
End Class
C#
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
using System.Xml;
using System.IO;
namespace WinSalvaSchermoCS
{
[Serializable]
public class Opzioni
{
#region Campi
private string m_Velocita = "MEDIA"; // Alta - Media - Bassa
private string m_Sfondo = "BLUE"; //Colore sfondo
private string m_FileImmagine = Environment.CurrentDirectory + "\\sfondo.jpg";
private string PercorsoOpzioni = Environment.CurrentDirectory + "\\SalvaSchermoOpzioni.opt";
#endregion
#region Proprietà
public string Immagine
{
get { return m_FileImmagine; }
set { m_FileImmagine = value; }
}
public string Colore_Sfondo
{
get { return m_Sfondo; }
set { m_Sfondo = value; }
}
public string Velocita
{
get { return m_Velocita; }
set { m_Velocita = value; }
}
#endregion
#region Funzioni
public bool FileOpzioniEsistente()
{
FileInfo fileOpz = new FileInfo(PercorsoOpzioni);
return fileOpz.Exists ;
}
public void CaricaOpzioni()
{
Opzioni MyOpzioni = new Opzioni();
// Verifico che il file esista
if (MyOpzioni.FileOpzioniEsistente())
{
//Oggetto di tipo serializzato
XmlSerializer mySerializer = new XmlSerializer( typeof(WinSalvaSchermoCS.Opzioni));
// Leggo il file xml .opt
StreamReader TextReader = new StreamReader(PercorsoOpzioni);
// Oggetto xml per la lettura delle opzoni
System.Xml.XmlTextReader XmlReader = new System.Xml.XmlTextReader(TextReader);
// Verifico che il formato è conforme
if (mySerializer.CanDeserialize(XmlReader))
{// Deserializzo oggetto
MyOpzioni = (Opzioni)(mySerializer.Deserialize(XmlReader));
}
else
{
// Salvo il file opzioni
MyOpzioni.SalvaOpzioni();
}
// Chiudo gli oggetti.
XmlReader.Close();
TextReader.Close();
// Imposto i vari valori
this.Velocita = MyOpzioni.Velocita;
this.Colore_Sfondo = MyOpzioni.Colore_Sfondo;
this.Immagine = MyOpzioni.Immagine;
}
}
public void SalvaOpzioni()
{
// oggetto per la scrittura dei dati
StreamWriter myWriter = new StreamWriter(PercorsoOpzioni);
//oggetto serializzato
XmlSerializer myXmlSerializer = new XmlSerializer(this.GetType());
//Serializzo l'oggetto
myXmlSerializer.Serialize(myWriter, this);
myWriter.Close();
}
#endregion
}
}
VB.Net
Me.Close()
C#
this.Close();
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;
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;
}
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
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();
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();
}
}
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;
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();
}
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();
}
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;
}
Nessun commento:
Posta un commento