Sunday, December 30, 2007

Pointui: interfaccia iPhone style

. Sunday, December 30, 2007
0 commenti

logo_pointui Pointui è una nuova interfaccia style iPhone per palmari che "montano" Windows Mobile.
Attualmente sono stati rilasciati degli screenshot della versione beta assieme ad un interessante video:

Fonte: blog Jason Langridge's

Read More »»

Saturday, December 29, 2007

Sql Server Tools

. Saturday, December 29, 2007
0 commenti

Una lista di vari tools sia free che commerciali, documentazione e tanto altro per Sql Server divisi per categoria sul blog di Mladen Prajdić:

  • SQL Server Management Studio Add-in's
  • Administration
  • Best practices, analysis, health and performance
  • Database Publishing to hosted servers
  • Upgrade and Migration
  • SQL Server Analysis Services
  • SQL Server Integration Services
  • SQL Server 2005 BI Development Studio (BIDS)
  • Samples
  • Non MS stuff
  • SQL and other code Formatting

Read More »»

Monday, December 24, 2007

ListItemCollection e gli Attributes

. Monday, December 24, 2007
0 commenti

I controlli in ASP.NET come per esempio DropDownList, RadioButtonList, ListBox e CheckBoxList ereditano da System.Web.UI.WebControls.ListControl, quindi espongono il contenuto attraverso una collection Items.
In generale se si vuole modificare lo stile dei vari item si fa uso della collection Attributes, peccato che in ASP.NET 1.1 tali attributi non vengano renderizzati, si tratta di un bug.
Ovviamente in ASP.NET 2.0 tale problema non si "manifesta" (è fondamentale sottolineare come sia necessario eseguire l'add ad ogni postback, questo perchè sia in Asp.Net 1.x che in 2.0 la collezione degli attributes dei ListItem contenuti nel controllo non vengono salvati nel ViewState), infatti se per esempio vogliamo modificare l'attributo background dei singoli elementi che compongono il controllo RadioButtonList(rbList) basta valorizzare la chiave style nel seguente modo:

   1: rbList.Items[0].Attributes.Add("style", "background-color:red");
   2: rbList.Items[1].Attributes.Add("style", "background-color:DeepPink");


Se vogliamo ottenere lo stesso risultato anche in ASP.NET 1.1?
Nel caso specifico una possibile soluzione è quella di creare il proprio controllo ereditando da RadioButtonList ed effetturare l'override del metodo Render:


   1: public class RadioButtonListPlus : RadioButtonList
   2: {
   3:   protected override void Render(HtmlTextWriter writer)
   4:   {
   5:     ListItemCollection items = this.Items;
   6:     if (items.Count > 0)
   7:     {
   8:       for (int i=0; i<items.Count; i++)
   9:       {
  10:         ListItem item = items[i];
  11:         //Creazione del tag span
  12:         writer.WriteBeginTag("span");
  13:         AttributeCollection attrs = item.Attributes;
  14:         foreach (string key in attrs.Keys)
  15:           //Add dello stile
  16:           writer.WriteAttribute( key, attrs[key]);
  17:         writer.Write( ">");
  18:         //Creazione del controllo radio
  19:         writer.WriteBeginTag("input");
  20:         writer.WriteAttribute( "id", this.ClientID + "_" + i.ToString());
  21:         writer.WriteAttribute("type", "radio");
  22:         writer.WriteAttribute("name", this.UniqueID);
  23:         writer.WriteAttribute("value", item.Value);
  24:         if( item.Selected)
  25:           writer.WriteAttribute("checked", "checked");
  26:         if( this.AutoPostBack)
  27:         {
  28:           RadioButton rb = new RadioButton();
  29:           rb.ID = this.ClientID + "_" + i.ToString();
  30:           writer.WriteAttribute( "onclick", Page.GetPostBackClientEvent( rb, string.Empty));
  31:         }
  32:         writer.Write( ">");
  33:         //Creazione del controllo label contenente il testo da visualizzare accanto al RadioButton
  34:         if( item.Text.Length > 0)
  35:         {
  36:           writer.Write( "<label");
  37:           writer.WriteAttribute( "for", this.ClientID + "_" + i.ToString());
  38:           writer.Write( ">");
  39:           writer.Write( item.Text);
  40:           writer.WriteEndTag( "label");
  41:         }
  42:         writer.WriteEndTag("input");
  43:         writer.WriteEndTag("span");
  44:       }
  45:     }
  46:   }
  47: }


In sostanza nel metodo Render vado a creare e manipolare l'HTML del controllo RadioButtonList, in modo da aggiungere un tag span, che fa da contenitore al controllo RadioButton e al controllo Label.
Infine nella nostra pagina aspx è necessario registrare il nuovo controllo:


   1: <%@ Register TagPrefix="cc1" Namespace="namespace" Assembly="assembly" %>

ed inserirlo nel form:


   1: <cc1:RadioButtonListPlus runat="server" id="rbListPlus">
   2:   <asp:ListItem Value="1" Selected="True">test1</asp:ListItem>
   3:   <asp:ListItem Value="2">test2</asp:ListItem>
   4: </cc1:RadioButtonListPlus>

Per chi è interessato trova un'ulteriore soluzione in questo interessante articolo in lingua inglese.

Read More »»

Thursday, December 20, 2007

Tafiti: codice sorgente

. Thursday, December 20, 2007
0 commenti

FirstUX_logo Dal blog si Giuseppe Guerrasio apprendo che è stato rilasciato sul sito delle Windows Live Quick Apps il codice sorgente di Tafiti, un'applicazione che mostra le potenzialità di Silverlight e di Windows Live Search.

Read More »»

Tuesday, December 18, 2007

Debug o Release?

. Tuesday, December 18, 2007
0 commenti

Tramite la reflection è possibile conoscere se un determinato assembly è stato compilato in modalità debug o release, andando a spulciare nella lista degli attributi:

   1: Private Function VerifyDebug() As Boolean
   2:   Dim assembly As Assembly = Reflection.Assembly.LoadFile("path assembly")
   3:   Dim attributes() As Object = assembly.GetCustomAttributes(True)
   4:   If Not (attributes Is Nothing) AndAlso (attributes.Length > 0) Then
   5:     For i As Integer = 0 To attributes.Length - 1
   6:       If (attributes(i).GetType() Is GetType(System.Diagnostics.DebuggableAttribute)) Then
   7:         Return True
   8:       End If
   9:     Next
  10:   End If
  11:   Return False
  12: End Function

Con il ciclo sugli attributi vado a verificare se è presente l'attributo DebuggableAttribute, attributo non presente se l'assembly è stato generato in modalità release.

Read More »»

Saturday, December 15, 2007

MasterPage e Url

. Saturday, December 15, 2007
0 commenti

In determinati scenari ci si può imbattare in un "particolare problema" che interessa le masterpage e gli url relativi.
In pratica se la masterpage e la pagina dei contenuti(aspx) si trovano nella stessa folder un codice come il seguente:

   1: <IMG SRC="../test/images/in1.JPG" />
funziona perfettamente.
Ma supponiamo di avere una struttura di cartelle simile a quella indicata nell'immagine qui in basso:
masterpage1 in cui la pagina dei contenuti si trova in una folder diversa da quella della masterpage, in tal caso l'immagine non viene visualizzata.
Questo perchè il browser cerca l'immagine in un cartella superiore:
http://localhost:1146/WebTestPort/folderTest/test/images/in1.JPG
Per evitare ciò si può procedere in diversi modi, il più semplice è quello di indicare un url assoluto alla risorsa:


   1: <IMG SRC="http://localhost:1146/WebTestPort/test/images/in1.JPG" />
Oppure si può sostituire il controllo HTML image con un controllo server-side:


   1: <asp:Image ID="img" runat="server" ImageUrl="../test/images/in1.JPG" />
In quest'ultimo caso interviene ASP.NET a risolvere il tutto, "rimappando" a runtime(URL rebasing).
Altro modo per risolvere il problema è l'uso di un nuovo metodo messo a disposizione dal Framework 2.0: ResolveClientUrl per restituire un url idoneo, utile al client per accedere alle risorse del server web(immagini, link ad altre pagine):


   1: <IMG src="<%= ResolveClientUrl("../test/images/in1.JPG")%>" />

Read More »»

Wednesday, December 12, 2007

I-Load per l'upload di immagini

. Wednesday, December 12, 2007
0 commenti

Dal nuovo blog/sito di Alberto Falossi son venuto a conoscenza di un ottimo controllo ASP.NET (non free) per la gestione delle immagini e dell'upload.
Il controllo I-Load della RadActive compatibile sia con la versione 1.1 che con la 2.0 del framework permette di caricare, ritagliare, ridimensionare le immagini, con funzionalità di zoom, anteprima ecc.
E' possibile fare qualche esperimento direttamente online.

Read More »»

Monday, December 10, 2007

ASPhere per i web.config

. Monday, December 10, 2007
0 commenti

ASPhere ASPhere è un tool che permette di creare e modificare i files web.config.
Rispetto all'ambiente Visual Studio, in ASPhere è possibile eseguire le modifiche o la creazione del file di configurazione sia nella classica modalità testuale ma anche in modo visuale rendendo tutto molto più semplice ed intuitivo.

Read More »»

ASP.NET 3.5: preview extensions

.
0 commenti

E' possibile scaricare una preview delle extensions per ASP.NET 3.5 che comprende:

  • Silverlight Controls for ASP.NET
  • ADO.NET Entity Framework
  • ASP.NET MVC
  • ASP.NET Dynamic Data
  • ASP.NET AJAX
  • ADO.NET Data Services

Per quanto riguarda il quickstart lo trovate qui.

Read More »»

Saturday, December 8, 2007

TIFF Multipage

. Saturday, December 8, 2007
0 commenti

Tramite alcuni metodi della classe System.Drawing.Image è possibile estrapolare/salvare le immagini contenute in un TIFF, tale formato infatti, può essre costituito da più immagini divise su più pagine.
In Vb.Net:

   1: Private Sub SaveTIFFMultipage(ByVal imageType As String, ByVal pathImageTIFF As String)
   2:   Dim file As FileInfo = New FileInfo(pathImageTIFF)
   3:   If (file.Exists) Then
   4:     Using img As System.Drawing.Image = System.Drawing.Image.FromFile(pathImageTIFF)
   5:       'Recupero il numero di pagine che costituiscono il TIFF
   6:       Dim countPages As Integer = img.GetFrameCount( _
   7:       New System.Drawing.Imaging.FrameDimension(img.FrameDimensionsList(0)))
   8:       For i As Integer = 0 To countPages - 1
   9:         img.SelectActiveFrame(New System.Drawing.Imaging.FrameDimension( _
  10:         img.FrameDimensionsList(0)), i)
  11:         Dim imageThumb As System.Drawing.Image = img.GetThumbnailImage( _
  12:         300, 300, Nothing, Nothing)
  13:         'Salvo le immagini
  14:         imageThumb.Save(String.Format("c:\{0}.{1}", _
  15:         file.Name.Replace(file.Extension, String.Empty) + i.ToString(), imageType))
  16:       Next
  17:     End Using
  18:   End If
  19: End Sub
In C#:

private void SaveTIFFMultipage(string imageType, string pathImageTIFF)
{
FileInfo file = new FileInfo( pathImageTIFF);
if( file.Exists)
{
using( System.Drawing.Image img = System.Drawing.Image.FromFile(pathImageTIFF))
{
//Recupero il numero di pagine che costituiscono il TIFF
int countPages = img.GetFrameCount(
new System.Drawing.Imaging.FrameDimension( img.FrameDimensionsList[0]));
for( int i=0; i<countPages; i++)
{
img.SelectActiveFrame(new System.Drawing.Imaging.FrameDimension(
img.FrameDimensionsList[0]), i);
System.Drawing.Image imageThumb = img.GetThumbnailImage( 300, 300, null, IntPtr.Zero);
imageThumb.Save(string.Format(@"c:\prova\{0}.{1}", file.Name.Replace(file.Extension, string.Empty) +
i.ToString(), imageType));
}
}
}
}


I due metodi fondamentali usati allo scopo di "estrapolare" le varie immagini contenute nel TIFF sono senza ombra di dubbio GetFrameCount e SelectActiveFrame.
Tramite il primo metodo GetFrameCount sappiamo il numeto totale di frame presenti nell'immagine, mentre il metodo SelectActiveFrame seleziona e rende attivo un determinato frame all’interno dell’immagine.
Nel caso specifico utilizzo anche GetThumbnailImage per ottenere  la miniatura(300X 300) dell'immagine da salvare su disco per poi visualizzarle tramite il controllo Repeater:


<asp:Repeater ID="repImage" runat="server">
<ItemTemplate>
<asp:Image ID="img" runat="server" ImageUrl='<%#DataBinder.Eval(Container.DataItem, "src")%>'/>
</ItemTemplate>
</asp:Repeater>
 

Read More »»

Wednesday, December 5, 2007

Volta technology

. Wednesday, December 5, 2007
0 commenti

logo-volta Oggi è stata presentata la tecnologia Volta che dovrebbe aiutare lo sviluppatore nella costruzione di applicazioni web multi-tier usando Visual Studio 2008 e il .Net Framework 3.5.

Read More »»

Monday, December 3, 2007

TouchPal

. Monday, December 3, 2007
0 commenti

TouchPal è un software creato dalla CooTek e permette di aver sul proprio dispositivo mobile una tastiera virtuale "simile" a quella dell'iPhone.
Tra i prerequisiti Windows Mobile 5.0/6.0 e solo per i dispositivi dotati di touch screen QVGA (320X240) o VGA (640X480).
Fino all'8 Dicembre è possibile scaricarlo gratis.

Read More »»