Archive for the ‘Programmazione’ category

Mattinata dedicata a WP7 (Windows Phone 7)

July 15th, 2010

Stamattina avevo tutta l’intenzione di installare i tools di sviluppo per WP7 per cominciare a vedere le novità (e ce ne sono tantissime) ma soprattutto per iniziare a sviluppare qualcosa di interessante per device mobile di prossima generazione.
Grazie ad Alessandro Scardova che alla cena di ieri sera mi ha fatto venir la voglia, ora su tutte le mie stazioni di lavoro c’è quanto richiesto per lo sviluppo su WP7

Expression Blend 4  WP7 Dev Tools

 Come già detto nel blog di Alessandro nel post inerente alla Beta di WP7 Dev Tools vi ricordo anche io che è disponibile il download a questa pagina
Buon divertimento! ;)

Cancellazione progetti su TFS

July 15th, 2010

se siete dei gran “combinacasini” come me e avete l’esigenza di eliminare i progetti che avete inserito su TFS, potete seguire questa semplice guida che vi permetterà di ripulire il tutto!

Good luck

Programming the Task Bar in Windows 7 with WPF 4

June 30th, 2010

Interessantissimo articolo scritto da Alessandro Del Sole su come programmare la TaskBar in W7 con WPF.
Qui la prima parte
Qui la seconda

Complimenti Alessandro ;)

Auto-Implemented Properties on VB.Net 2010

June 29th, 2010

Era ora che per noi, popolo di questo meraviglioso mondo che è il VB, si semplificassero le cose con le Auto-Implemented Properties. A riguardo vi linko questo video su BE IT realizzato da Alessando Del Sole (che di accettare la mia richiesta su Facebook non ne vuole sapere :P )

Tranquillo Alessando, comprerò lo stesso il tuo libro (dovrebbe arrivarmi a breve)

Windows 7 RTM: prime impressioni e qualche problema

August 9th, 2009

Week-End interamente dedicato all’istallazione di Windows 7 RTM su tutte le workstation e portatili di casa. Come già appurato nelle precedenti versioni beta e la RC Windows 7 è un sistema molto più stabile e molto meno esigente di risorse. Questo si traduce in una maggiore velocità di utilizzo e piacevolezza nello spostarsi tra un’applicazione e l’altra.

windows7

Fin qui nessun problema tranne quando non mi sono imbattuto in qualche problema abbastanza serio per chi, come me, sviluppa anche applicazioni per Windows Mobile:

Eseguendo Cellular Emulator sul mio portatile (sul quale ho installato il sistema X64) mi vedo venir fuori questo errore:

imageGirando sul forum MSDN vedo che l’emulatore non è supportato dal sistema operativo in questione!!! ARGHHHHH!!!!!
Bene, dopo la breve incazzatura decido di mettere su la “WINDOWS XP MODE” che permette di virtualizzare Windows XP su Windows 7 in tempi rapidissimi ma nel momento in cui lancio la macchina virtuale:

imageil problema è dovuto al fatto che sulla mia macchina non è possibile attivare lato bios la virtualizzazione hardware e Windows Virtual Pc non può farne a meno!!
Risultato: sul mio portatile sarò costretto ad installare Windows 7 32 bit o crearmi una macchina virtuale con  VMWare :(

Aggiungere colore di sfondo alla DateTimePicker

March 31st, 2009

Di Default la classe DateTimePicker non ha il metodo BackColor. Qualora dovessere diventare indispensabile nei vostri progetti ecco la classe che lo implementa:

Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.Windows.Forms
 
Public Class ExtendedDateTimePicker
    Inherits DateTimePicker
 
    Private m_BackBrush As SolidBrush
 
    < _
        Browsable(True), _
        DesignerSerializationVisibility( _
            DesignerSerializationVisibility.Visible _
        ) _
    > _
    Public Overrides Property BackColor() As Color
        Get
            Return MyBase.BackColor
        End Get
        Set(ByVal Value As Color)
            If Not m_BackBrush Is Nothing Then
                m_BackBrush.Dispose()
            End If
            MyBase.BackColor = Value
            m_BackBrush = New SolidBrush(Me.BackColor)
            Me.Invalidate()
        End Set
    End Property
 
    Protected Overrides Sub WndProc(ByRef m As Message)
        Const WM_ERASEBKGND As Int32 = &H14
        If m.Msg = WM_ERASEBKGND Then
            Dim g As Graphics = Graphics.FromHdc(m.WParam)
            If m_BackBrush Is Nothing Then
                m_BackBrush = New SolidBrush(Me.BackColor)
            End If
            g.FillRectangle(m_BackBrush, Me.ClientRectangle)
            g.Dispose()
        Else
            MyBase.WndProc(m)
        End If
    End Sub
 
    Protected Overloads Overrides Sub Dispose( _
        ByVal disposing As Boolean _
    )
        If disposing AndAlso Not m_BackBrush Is Nothing Then
            m_BackBrush.Dispose()
        End If
        MyBase.Dispose(disposing)
    End Sub
End Class

Un solo piccolissimo problema: non funziona con lo style di Windows Vista.

Developing Microsoft Micro Framework…

October 27th, 2008

E’ partita una nuova avventura in questo mondo tutto da scoprire e, spero, ricco di soddisfazioni. Ultimanente mi sono un tantino “fossilizzato” nelle solite routine lavorative  di progettazione/sviluppo di applicazioni Web/Client.
Qualche giorno fa, parlando con mio fratello di proggetti vari in essere con la sua azienda SystemDesign, è venuta fuori l’idea di poter utilizzare della tecnologia Microsoft anche per lo sviluppo/gestione/controllo di microcontrollori per applicazioni in campo domotico (e non solo).

Bene è così che abbimo deciso di farci questo regalo:

Il Freescale i.MXS Development Kit che permette di sviluppare firmware per microcontrollori in linguaggio C# oltre che ad applicazioni per la piattaforma Windows Vista™ SideShow™. Non vi nego che sono ansiosissimo di tornare a casa stasera per poter metter mano su questo gioiellino costato non poco!

Di seguito qualche caratteristica tecnica:

  • i.MXS applications processor, based on the powerful ARM920T™ core
  • Clock source crystal: 32 kilohertz
  • Powered by USB bus voltage or external power adaptor
  • Multi-ICE debug support connector
  • I2C and SSI bus connector for connection to external audio CODEC SMbus interface
  • 32-megabyte (MB) SDRAM device
  • One 8-megabyte (MB) Burst Flash memory device
  • One RS232 transceiver (configured for DCE) supporting on-chip UART1 port
  • 1 UART port at CMOS level for expansion
  • On-Chip USB 1.1 interface
  • On-board 2.5 inch LCD with back-light and QVGA resolution
  • 11 separated GPIO for key-button input
  • LED indicator for power

Vi terrò informati sugli sviluppi ma sono sicuro che presto ci saranno novità carine che posterò sul mio blog

Stay tuned ;)

Diagrams on Sql Server 2005

September 17th, 2008

Ad una nuova installazione di Sql Server e quando faccio l’attach di un DB proveniente da Sql 2000 ho sempre il solito errore nel momento in cui cerco di aprire i diagrammi:
“Database diagram support objects cannot be installed because this database does not have a valid owner. To continue, first use the Files page of the Database Properties dialog box or the ALTER AUTHORIZATION statement to set the database owner to a valid login, then add the database diagram support objects.”

Vi posto il codice da eseguire per ovviare a questo fastidioso problema che non viene via nemmeno impostando la compatibilità su Sql 2005 nelle option del DB

use [master] EXEC sp_dbcmptlevel 'TuoDatabase', '90';
go
ALTER AUTHORIZATION ON DATABASE::TuoDatabase TO tuoLogin
go
use [TuoDatabase]
go
EXECUTE AS USER = N'dbo' REVERT
go
 
Spero vi sia utile ;) 

Crystal Reports e passaggio di parametri a report e sottoreport

April 23rd, 2008

Con il seguente codice avrete la possibilità di gestire l’autenticazione del report principale e di tutti i sottoreport da esso richiamati, oltre alla possibilità di passare eventuali parametri impostati nel report (nell’esempio vengono letti da quarystring, ma potrebbero benissimo essere parametri di session…). Il mio problema era proprio quello di settare i parametri di connessione dei singoli sottoreport. E’ la funzione “SetDBLogonForSubreports” che svolge questo compito.

Spero possa esservi di aiuto: (prerequisiti: Visual Studio 2005 e CrystalReports)

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports System.IO

Partial Class _Default
    Inherits System.Web.UI.Page
    Private MyReport As ReportDocument
    Private Sub ConfigureCrystalReports()

        'carico il report
        MyReport = New ReportDocument()
        Dim reportPath As String = Server.MapPath("TuoReportMaster.rpt")
        MyReport.Load(reportPath)

        'passo i parametri di connessione al report
        Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()

        'parametri presenti nel webconfig
        myConnectionInfo.DatabaseName =
        System.Configuration.ConfigurationManager.AppSettings("Database")
        myConnectionInfo.UserID =
        System.Configuration.ConfigurationManager.AppSettings("UserName")
        myConnectionInfo.Password =
        System.Configuration.ConfigurationManager.AppSettings("Password")
        myConnectionInfo.ServerName =
        System.Configuration.ConfigurationManager.AppSettings("Server")

        'autentico il mio report principale
        SetDBLogonForReport(myConnectionInfo, MyReport)

        'autentico tutti i sottoreport richiamati dal report principale
        SetDBLogonForSubreports(myConnectionInfo, MyReport)

        'passo eventuali parametri al report principale
        Dim paramFields As New ParameterFields()
        Dim discreteVal As New ParameterDiscreteValue()
        Dim parametro1 As New ParameterField()
        Dim parametro2 As New ParameterField()

        'passo il primo parametro
        parametro1.ParameterFieldName = "@Parametro1DelReport"
        discreteVal = New ParameterDiscreteValue()
        discreteVal.Value = Request.QueryString("Parametro1")
        'in questo caso leggo da una querysting
        MyReport.SetParameterValue("@Parametro1DelReport", discreteVal.Value)

        'passo il secondo parametro
        parametro2.ParameterFieldName = "@Parametro2DelReport"
        discreteVal = New ParameterDiscreteValue()
        discreteVal.Value = Request.QueryString("Parametro1")
        'secondo parametro anche passato in querysting
        MyReport.SetParameterValue("@Parametro1DelReport", discreteVal.Value)
    End Sub

    Private Sub SetDBLogonForReport(ByVal myConnectionInfo
                    As ConnectionInfo, ByVal myReportDocument As ReportDocument)
        'subroutine che setta i parametri di connessione del report principale
        Dim myTables As Tables = myReportDocument.Database.Table
        Dim myTable As CrystalDecisions.CrystalReports.Engine.Table
        For Each myTable In myTables
            Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
            myTableLogonInfo.ConnectionInfo = myConnectionInfo
            myTable.ApplyLogOnInfo(myTableLogonInfo)
        Next
    End Sub

    Private Sub SetDBLogonForSubreports(ByVal myConnectionInfo
                    As ConnectionInfo, ByVal myReportDocument As ReportDocument)
        'subroutine che setta i parametri di connessione di
        'tutti i sottoreport richiamati dal report principale
        Dim mySections As Sections = myReportDocument.ReportDefinition.Sections
        Dim mySection As Section
        For Each mySection In mySections
            Dim myReportObjects As ReportObjects = mySection.ReportObjects
            Dim myReportObject As ReportObject
            For Each myReportObject In myReportObjects
                If myReportObject.Kind = ReportObjectKind.SubreportObject Then
                    Dim mySubreportObject As SubreportObject =
                    CType(myReportObject, SubreportObject)
                    Dim subReportDocument As ReportDocument =
                    mySubreportObject.OpenSubreport mySubreportObject.SubreportName)
                    SetDBLogonForReport(myConnectionInfo, subReportDocument)
                End If
            Next
        Next
    End Sub

    Protected Sub Page_Load(ByVal sender As Object,
                                ByVal e As System.EventArgs) Handles Me.Load

        'richiamo i parametri di configurzione
        ConfigureCrystalReports()

        'esporto il report in pdf
        Dim oStream As New MemoryStream ' // using System.IO
        oStream = MyReport.ExportToStream
                        (CrystalDecisions.Shared.ExportFormatType.PortableDocFormat)
        Response.Clear()
        Response.Buffer = True
        Response.ContentType = "application/pdf"
        Response.BinaryWrite(oStream.ToArray())
        Response.End()
    End Sub

End Class

Se tutto è stato impostato correttamente dovreste vedere il vostro bel pdf saltare fuori :)

Modificare a Runtime l’impostazione della connectionString

April 19th, 2008

In questi giorni mi sono dedicato interamente allo sviluppo di un’applicazione client ed avevo l’esigenza di modificare continuamente da form la connessione al Database (sqlServer). Immaginate quanto sia seccante ogni volta andare nell’ app.config e cambiare ogni volta i parametri. Beh..ecco un trucchetto che potrebbe esservi utile per fare una cosa del genere a Runtime:

Ovviamente non abbiamo accesso in scrittura all’app.config quindi la prima cosa da fare è crearci una Property all’interno del namespace My in questo modo:

Public WriteOnly Property RunTimeConnectionString() As String
    Set(ByVal value As String)
        My.Settings("MiaConnectionString") = value
    End Set
End Property

Bene..ora nell’evento MySettings_PropertyChanged (cioè alla modifica delle nostre impostazioni) testiamo la connessione (non è obbligatorio ma facciamolo per evitare che l’applicazione vada in crash Tongue out

Private Sub MySettings_PropertyChanged(ByVal sender As Object, ByVal e As
	 	System.ComponentModel.PropertyChangedEventArgs) Handles Me.PropertyChanged
    Dim connection As New SqlClient.SqlConnection
    connection.ConnectionString = My.Settings("MiaConnectionString")
    Try
        connection.Open()
    Catch ex As Exception
        MsgBox("Errore di connessione al Database. Verificare la connessione",
		MsgBoxStyle.Critical, "Connessione")
    Finally
        connection.Close()
    End Try
End Sub

Ok..ci siamo quasi. Ora creiamoci una bella form dove inserire i dati relativi alla nostra connessione al Database. Creiamo qualcosa di simile:

dbsettings

Ora non ci resta che salvare le impostazioni relative alla nostra connessione mediante la chiamata alla nostra Property creata in precedenza in questo modo:

My.Settings.RunTimeConnectionString = "Data Source=" & ServerTxt.Text & ";Initial Catalog=
				" & dbTxt.Text & ";Persist Security Info=True;
				User ID=" & userTxt.Text & "; Password=" & passTxt.Text

Le informazioni relative nostra conenssione sono state aggiornate!!! Open-mouthed