lunedì 21 ottobre 2013

Aggiornamento Quiz 1.9.7

Un altro aggiornamento per Quiz, la mia app Android, riguarda un bug fix per l'impostazione della lingua al download del programma, l'ottimizzazione dei quiz in lingua inglese (grazie alla collaborazione di Alexander companyconverter.com ) e l'aggiunta di nuovi sfondi.
A breve saranno disponibili anche 1000 quiz in lingua olandese, sempre grazie alla collaborazione di Alexander.
A presto!

mercoledì 9 ottobre 2013

Grafici in .Net con il DataVisualization Charting

Dalla versione 4.0 del framework .Net è disponibile un ottimo componente per disegnare grafici, ad esempio, in una pagina aspx.
Per la versione 3.5 invece bisogna scaricarlo dal sito Microsoft. Mi riferisco al componente DataVisualization.Charting che è possibile referenziare in Vistual Studio.
Visual Studio Chart

Di seguito è rappresentato un esempio di come raffigurare dei dati in un grafico a torta.
Grafico a torta

Parametri nel Web.Config
<?xml version="1.0"?>
<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" >
          <assemblies>
            <add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          </assemblies>
        </compilation>
      <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
        <controls>
          <add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting" assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        </controls>
      </pages>
      <httpHandlers>
        <add path="ChartImg.axd" verb="GET,HEAD,POST"
          type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"  />
      </httpHandlers>
    </system.web>
  <system.webServer>
    <handlers>
      <remove name="ChartImageHandler" />
      <add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD,POST"
       path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"  />
    </handlers>
  </system.webServer>
  <appSettings>
    <add key="ChartImageHandler" value="storage=memory;timeout=20;" />
  </appSettings>
</configuration>

Componente Chart nella pagina .aspx
<asp:CHART id="Chart1"  runat="server" Palette="BrightPastel" BackColor="#D3DFF0" Height="330px" 
        Width="530px" BorderlineDashStyle="Solid" BackGradientStyle="TopBottom" BorderWidth="2" 
        BorderColor="26, 59, 105" IsSoftShadows="False" ImageLocation="~/TempImages/ChartPic_#SEQ(300,3)">
        <Titles><asp:Title Alignment="TopRight" Text="CARS" Font="Microsoft Sans Serif, 8pt, style=Bold"></asp:Title></Titles>
      <legends>
       <asp:Legend TitleFont="Microsoft Sans Serif, 8pt, style=Bold" BackColor="Transparent" IsEquallySpacedItems="True" Font="Trebuchet MS, 8pt, style=Bold" IsTextAutoFit="False" Name="Default"></asp:Legend>
      </legends>
      <borderskin SkinStyle="Emboss"></borderskin>
      <series>
       <asp:Series ChartArea="Area1" XValueType="Double" Name="Series1" ChartType="Pie" Font="Trebuchet MS, 8.25pt, style=Bold" 
                CustomProperties="DoughnutRadius=25, PieDrawingStyle=Concave, CollectedLabel=Other, MinimumRelativePieSize=20, CollectedSliceExploded=true" 
                MarkerStyle="Circle" BorderColor="64, 64, 64, 64" Color="180, 65, 140, 240" YValueType="Double" Label="#PERCENT{P1}">
         
       </asp:Series>
      </series>
      <chartareas>
       <asp:ChartArea Name="Area1" BorderColor="64, 64, 64, 64" BackSecondaryColor="Transparent"
                    BackColor="Transparent" ShadowColor="Transparent" BackGradientStyle="TopBottom">
        <axisy2>
         <MajorGrid Enabled="False" />
         <MajorTickMark Enabled="False" />
        </axisy2>
        <axisx2>
         <MajorGrid Enabled="False" />
         <MajorTickMark Enabled="False" />
        </axisx2>
        <area3dstyle PointGapDepth="900" Rotation="162" IsRightAngleAxes="False" WallWidth="25" IsClustered="False" />
        <axisy LineColor="64, 64, 64, 64">
         <LabelStyle Font="Trebuchet MS, 8.25pt, style=Bold" />
         <MajorGrid LineColor="64, 64, 64, 64" Enabled="False" />
         <MajorTickMark Enabled="False" />
        </axisy>
        <axisx LineColor="64, 64, 64, 64">
         <LabelStyle Font="Trebuchet MS, 8.25pt, style=Bold" />
         <MajorGrid LineColor="64, 64, 64, 64" Enabled="False" />
         <MajorTickMark Enabled="False" />
        </axisx>
       </asp:ChartArea>
      </chartareas>
     </asp:CHART>

Codice nel file .cs
public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                PopulateChart();
        }

        protected void PopulateChart()
        {
            long car1 = 10; long car2 = 20; long car3 = 30;

            DataPoint dp1 = new DataPoint();
            dp1.SetValueY(car1);
            dp1.LegendText = "BMW";

            DataPoint dp2 = new DataPoint();
            dp2.SetValueY(car2);
            dp2.LegendText = "Ford";

            DataPoint dp3 = new DataPoint();
            dp3.SetValueY(car3);
            dp3.LegendText = "Volvo";


            this.Chart1.Series["Series1"].Points.Insert(0, dp1);
            this.Chart1.Series["Series1"].Points.Insert(1, dp2);
            this.Chart1.Series["Series1"].Points.Insert(2, dp3);
        }
    }

lunedì 30 settembre 2013

Insert e select data da php con JSON in Android

Con poche righe di codice, da un'app Android è possibile catture dai dati da una pagina php (che punta magari su di un database) oppure postarli e inserirli in un database da una php.
In questo esempio è utilizzato l'oggetto JSON.

Richiesta di dati ad una JSP:
public ArrayList<Map<String,String>> selectNameSurname(){
	ArrayList<Map<String,String>> listaDb = new ArrayList<Map<String,String>>();
	
	InputStream is = null;
	StringBuilder sb=null;
	String result=null;
	try{   
		HttpClient httpclient = new DefaultHttpClient();
		HttpPost httppost = new HttpPost("http://wwwwww/data.php");//link
		HttpResponse response = httpclient.execute(httppost);
		HttpEntity entity = response.getEntity();
		is = entity.getContent();
		
		
	}catch(Exception e){       
		//something here
	}
	
  //convert response to string
	try{
		BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
		sb = new StringBuilder();
		sb.append(reader.readLine() + "\n");
		String line="0";
	  
		while ((line = reader.readLine()) != null) {
			sb.append(line + "\n");
		}
		 
		is.close();
		result=sb.toString();
		 
	}catch(Exception e){
		//something here
	}
	
	String name;
	String surname;
	JSONArray jArray;
	
	try{
		jArray = new JSONArray(result);
		JSONObject json_data=null;
		int j=0;
		for(int i=0;i<jArray.length();i++){
			Map<String,String> dataDb = new HashMap<String,String>();
				json_data = jArray.getJSONObject(i);
				
				name=json_data.getString("name");
				surname=json_data.getString("surname");
				++j;
				dataDb.put(POSITION, ""+j);
				dataDb.put(ONLINE_NAME, name);
				dataDb.put(ONLINE_SCORE, surname);

				listaDb.add(dataDb);
		}
	}catch(JSONException e1){
	   
	}catch (ParseException e1){
	  
	}
	return listaDb;
}

Codice nella jsp:
	
$SQL ="SELECT name, surname FROM t_player";
$result = mysql_query($SQL);



while ( $db_field = mysql_fetch_assoc($result) ) {
	$output[]=$db_field;
}
print(json_encode($output));


Post e inserimento dati:
public void insertPlayer(Player player){
	InputStream is = null;
   
	try{   
		HttpClient httpclient = new DefaultHttpClient();
		ArrayList<namevaluepair> nameValuePairs = new ArrayList<namevaluepair>(7);
		nameValuePairs.add(new BasicNameValuePair("name",player.getName()));
		nameValuePairs.add(new BasicNameValuePair("surname",player.getSurname()));

		HttpPost httppost = new HttpPost("http://wwwwww/insert.php"); //link
		httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
		HttpResponse response = httpclient.execute(httppost);
		HttpEntity entity = response.getEntity();
		is = entity.getContent();
		String responseBody =convertStreamToString(is);
		
	}catch(Exception e){       
	}
}

Codice nella jsp:
$SQL = "insert into t_player ( name_player, surname_player) values ('".$_POST['name']."','".$_POST['surname']."')";	

venerdì 27 settembre 2013

Quiz v. 1.9.6

Aggiornamento per Quiz, la mia app su Android.
Nella classifica online è possibile visualizzare i punteggi di ogni giocatore per ogni categoria dei 3 quiz (italiano, spagnolo, inglese) cliccando sul nome del giocatore.
Questo è possibile solamente se il giocatore ha selezionato l'autorizzazione nella schermata delle preferenze. In questo modo oltre ad inviare il punteggio totale, invierà anche tutti gli altri punteggi.
Di seguito una schermata di esempio:

mercoledì 18 settembre 2013

Testo tutto maiuscolo o solo le iniziali e contare caratteri in Visual Basic 6

Con queste poche righe di codice è possibile portare il testo digitato nella prima casella di testo automaticamente tutto in maiuscolo, solamente le iniziali delle parole in maiuscolo (visibile nella seconda casella di testo) e contare il numero di caratteri, compresi gli spazi, nella terza casella di testo.
Il risultato in figura.

Private Sub Text1_Change()
Text3.Text = StrConv(Text1.Text, vbProperCase)
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub

Private Sub Text2_Change()
Label1.Caption = "Char: " & Len(Text2.Text)
End Sub

martedì 3 settembre 2013

Controllo Listbox in Visual Basic 6 e associazione elementi

In questo esempio vengono caricate le categorie dal database Northwind di Microsoft su di una Listbox e a partire da una categoria selezionata si faranno vedere i prodotti associati in una seconda Listbox.
Prima di caricare questo codice nelle form di Visual Basic è necessario fare un riferimento al componente Microsoft ActiveX Data Objects 2.8 Library come mostrato nella figura successiva.
L'esempio in questo caso mostra come far visualizzare i dati all'evento Load della form per la prima Listbox, e successivamente all'evento "doppio click" o double-click per la seconda Listbox.

Option Explicit
Dim Conn As ADODB.Connection
Dim rsData As ADODB.Recordset
Dim msgError, strConDbAccess As String
Dim i As Integer

Private Sub Form_Load()

Call LoadDataFromDb

End Sub

Function LoadDataFromDb()
On Error GoTo errorDB
DoEvents

'stringa di connessione al db NWIND
strConDbAccess = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & "c:\NWIND.MDB"

Set Conn = New ADODB.Connection
With Conn
.CommandTimeout = 20
.CursorLocation = adUseClient
.Open strConDbAccess
End With

Set rsData = New ADODB.Recordset
rsData.CursorLocation = adUseServer
rsData.Open "SELECT * FROM Categories ORDER BY CategoryName;", _
Conn, adOpenKeyset, adLockOptimistic, adCmdText

'caricamento dati
For i = 0 To rsData.RecordCount - 1
List1.AddItem (rsData!CategoryName)
rsData.MoveNext
Next i

rsData.Close
Set rsData = Nothing

'chiusura db
Conn.Close
Set Conn = Nothing

Exit Function
errorDB:
msgError = "Errore DataBase" & Chr(13) & _
"Numero Errore: " & Err.Number & " Descrizione: " & Err.Description
MsgBox msgError, vbCritical + vbOKOnly
End Function


Private Sub List1_DblClick()
On Error GoTo errorDB
DoEvents
List2.Clear

Set Conn = New ADODB.Connection
With Conn
.CommandTimeout = 20
.CursorLocation = adUseClient
.Open strConDbAccess
End With

Set rsData = New ADODB.Recordset
rsData.CursorLocation = adUseServer
rsData.Open "SELECT Products.ProductName FROM Products inner join Categories " & _
"on Categories.Categoryid=Products.CategoryId where " & _
"Categories.CategoryName='" & List1.Text & "' ORDER BY ProductName;", _
Conn, adOpenKeyset, adLockOptimistic, adCmdText

'caricamento dati su seconda lista
For i = 0 To rsData.RecordCount - 1
List2.AddItem (rsData!ProductName)
rsData.MoveNext
Next i

rsData.Close
Set rsData = Nothing

'chiusura db
Conn.Close
Set Conn = Nothing

Exit Sub
errorDB:
msgError = "Errore DataBase" & Chr(13) & _
"Numero Errore: " & Err.Number & " Descrizione: " & Err.Description
MsgBox msgError, vbCritical + vbOKOnly
End Sub

Riferimento in VB6

Struttura form

Risultato

sabato 24 agosto 2013

Aggiornamento app Quiz 1.9.5

Aggiornamento per Quiz nell'android market con un inserimento di 210 nuovi quiz italiani in varie categorie (da ora 150 domande per ogni categoria), aggiunte e migliorate alcune risposte, risolto bug nelle soluzioni (le risposte nella categoria informatica venivano duplicate), migliorato l'aiuto per la risposta esatta, aumentato il punteggio massimo a 1.000.000.000!

martedì 20 agosto 2013

Ordinamento ascendente e decrescente su griglia in c#

Un pochino laborioso, ma con questo esempio si può creare un "sorting" su un qualsiasi campo di una GridView con c#.
Selezionando con il mouse la freccia "up" o "down" vicino al campo da ordinare, tutti i campi della griglia si ordinano automaticamente.
La griglia è il componente classico GridView utilizzato in una pagina aspx con Visual Studio 2010 framework 4.0 (ma si trova anche con il 3.5).
Di seguito il codice della pagina aspx e il codice da integrare nel file .cs
(Da non dimenticare di reperire le immagini delle frecce "up" e "down").

<%@ Page Title="Home page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
OnPageIndexChanging="GridView1_PageIndexChanging" OnSorting="GridView1_Sorting" 
OnRowCreated="GridView1_RowCreated"
AllowSorting="True" DataKeyNames="id" AllowPaging="True" PageSize="15" 
PageIndex="0" PagerSettings-Mode="NumericFirstLast"
PagerSettings-FirstPageText="Prima" PagerSettings-LastPageText="Ultima" 
EmptyDataText="No data available."
>
<Columns>
<asp:TemplateField HeaderText="id" ItemStyle-Width="50" SortExpression="id">
<ItemStyle HorizontalAlign="left"/>
<ItemTemplate>
<%# Eval("id")%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="description" ItemStyle-Width="150" SortExpression="description">
<ItemStyle HorizontalAlign="left"/>
<ItemTemplate>
<%# Eval("description")%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Content>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
CaricaGridView("id", SortDirection.Ascending);
}

protected DataTable dataTable()
{
DataTable dt = new DataTable();
dt = new DataTable("dt");
dt.Columns.Add(new DataColumn("id", typeof(string)));
dt.Columns.Add(new DataColumn("description", typeof(string)));
DataRow dataRow = dt.NewRow();
dataRow = dt.NewRow();
dataRow["id"] = "1";
dataRow["description"] = "ALFAROMEO";
dt.Rows.Add(dataRow);
dataRow = dt.NewRow();
dataRow["id"] = "2";
dataRow["description"] = "FORD";
dt.Rows.Add(dataRow);
dataRow = dt.NewRow();
dataRow["id"] = "3";
dataRow["description"] = "VOLVO";
dt.Rows.Add(dataRow);

return dt;
}


protected void CaricaGridView(string sortString, SortDirection sortDirection)
{
DataView dataView = null;
try
{
dataView = new DataView(dataTable());
if (sortDirection.Equals(SortDirection.Ascending))
dataView.Sort = sortString + " " + "ASC";
else
dataView.Sort = sortString + " " + "DESC";

GridView1.DataSource = dataView;
GridView1.DataBind();
}
catch (Exception ex)
{

}
finally
{
if (dataView != null)
dataView.Dispose();
}
}

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{

GridView1.PageIndex = e.NewPageIndex;

DataView dataView = null;
try
{
dataView = new DataView(dataTable());
String SortExpDirection = Convert.ToString(ViewState["SortExpression"]);
if (SortExpDirection == "")
SortExpDirection = "Id";
if (Convert.ToString(ViewState["SortDirection"]).Equals(""))
ViewState["SortDirection"] = "DESC";
SortExpDirection += " " + ViewState["SortDirection"];
dataView.Sort = SortExpDirection;
GridView1.DataSource = dataView;
GridView1.DataBind();
}
catch (Exception ex)
{

}
finally
{
if (dataView != null)
dataView.Dispose();
}
}

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
if (ViewState["SortExpression"] != null)
{
String sortDirection = Convert.ToString(ViewState["SortDirection"]);
String sortExpression = Convert.ToString(ViewState["SortExpression"]);
if (sortExpression == e.SortExpression)
{
ViewState["SortDirection"] = ChangeDirection(sortDirection);
}
else
{
ViewState["SortExpression"] = e.SortExpression;
ViewState["SortDirection"] = "ASC";
}
}
else
{
ViewState["SortExpression"] = e.SortExpression;
ViewState["SortDirection"] = "ASC";
}
DataView dataView = null;
try
{
dataView = new DataView(dataTable());
String SortExpDirection = Convert.ToString(ViewState["SortExpression"]);
SortExpDirection += " " + ViewState["SortDirection"];
dataView.Sort = SortExpDirection;
GridView1.DataSource = dataView;
GridView1.DataBind();
}
catch (Exception ex)
{

}
finally
{
if (dataView != null)
dataView.Dispose();
}
}

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
try
{
if (e.Row.RowType == DataControlRowType.Header)
{
string NomeColonna;
for (int i = 0; i < 4; i++)
{
// Recupero il controllo che sta nella cella dell'header
//che è un LinkButton
LinkButton LinkButtonOrdinamento = (LinkButton)e.Row.Cells[i].Controls[0];
NomeColonna = LinkButtonOrdinamento.Text;

//Creo il controllo ImageButton
ImageButton ImageButtonOrdinamento = new ImageButton();
ImageButtonOrdinamento.CommandName = LinkButtonOrdinamento.CommandName;
string commandArgument = LinkButtonOrdinamento.CommandArgument;
ImageButtonOrdinamento.CommandArgument = commandArgument;
ImageButtonOrdinamento.ToolTip = "Ordina per " + NomeColonna;
ImageButtonOrdinamento.Width = (Unit)10;

//stabilisco l'immagine da visualizzare
ImageButtonOrdinamento.ImageUrl = "~/images/sort_up_blank.png";
if (ViewState["SortExpression"] != null)
{
String sortExpression = Convert.ToString(ViewState["SortExpression"]);
if (LinkButtonOrdinamento.CommandArgument == sortExpression)
{
if (Convert.ToString(ViewState["SortDirection"]) == "DESC")
{
ImageButtonOrdinamento.ImageUrl = "~/images/sort_down.png";
}
else
{
ImageButtonOrdinamento.ImageUrl = "~/images/sort_up.png";
}
}
}
ImageButtonOrdinamento.Width = Unit.Pixel(16);
ImageButtonOrdinamento.Height = Unit.Pixel(16);
//Creo il controllo Label
Label labelNomeColonna = new Label();
labelNomeColonna.Text = NomeColonna + " ";
Table tableOrd = new Table();

TableRow tableRowOrd = new TableRow();
TableCell tableCell0 = new TableCell();
tableCell0.Controls.Add(labelNomeColonna);
tableRowOrd.Cells.Add(tableCell0);
TableCell tableCell1 = new TableCell();
tableCell1.Controls.Add(ImageButtonOrdinamento);
tableRowOrd.Cells.Add(tableCell1);
tableOrd.Rows.Add(tableRowOrd);

//cancello il controllo linkbutton dalla cella
e.Row.Cells[i].Controls.Remove(LinkButtonOrdinamento);

//Aggiungo il nuovo controllo
e.Row.Cells[i].Controls.Add(tableOrd);

}
}
}
catch (Exception ex)
{

}
}
public static String ChangeDirection(String oldDirection)
{
String newDirection = "";
switch (oldDirection)
{
case "ASC":
newDirection = "DESC";
break;
default:
newDirection = "ASC";
break;
}
return newDirection;
}
}

Ordinamento

giovedì 8 agosto 2013

Migliorare e incrementare traffico al blog gratuitamente

Una delle tante soluzioni gratuite per incrementare del traffico sul proprio blog, e quindi farsi conoscere meglio,
e magari incrementare traffico su app per Android o Iphone o comunque per smartphone sempre che qualcuno le abbia online sui vari market,
è quella di inserire il proprio blog su portali che non richiedono registrazioni come ad esempio:
pingler.com
pingomatic.com
pingoat.com
feedshark.com
androidappsgallery.com
apps400.com
androidappsreview.com
mobileappsgallery.com
androidtapp.com
scrubtheweb.com

Se ne trovano molti altri per promuovere il proprio blog, ma spesso viene richiesta una registrazione (spesso gratuita ma con una piccola perdita di tempo per il solito inserimento dati).
Per particolari accorgimenti o studio di traffico o parole chiave da utlizzare al meglio, arrivano sempre in aiuto le risorse Google all'indirizzo http://www.google.com/webmasters loggandosi con il proprio account Google e gestendo il proprio sito di interesse.

Lascio questo spazio aperto per chi vuole inserirne degli altri, magari ne nascono di nuovi, ma sempre ed esclusivamente gratuiti e senza alcuna registrazione.

venerdì 2 agosto 2013

Caricamento dati da MS Excel in Visual Basic 6

Con queste poche righe di codice è possibile leggere dei dati su di un file MS Excel e portarli in un oggetto list di Visual Basic.
Si crea una form tramite progetto "Exe" con un oggetto list chiamato List1, nel menu a tendina del progetto si fa riferimento all'oggetto MS Excel, e si integrano queste righe al caricamento della form.
Di seguito il sorgente e screenshot:

Private Sub Form_Load()
Dim objXls As Excel.Application
Dim wb As Workbook
Dim ws As Worksheet
Dim varValue As Variant
Dim i As Integer

Set objXls = New Excel.Application
Set wb = objXls.Workbooks.Open("C:\Documents and Settings\admin\Desktop\car\car.xls")
Set ws = wb.Worksheets("CAR")

For i = 2 To 11
varValue = ws.Cells(i, 1) & " " & ws.Cells(i, 2)
List1.AddItem (varValue)
Next

wb.Close
objXls.Quit
Set ws = Nothing
Set wb = Nothing
Set objXls = Nothing
End Sub

Form di esempio con una lista


Riferimento dell'oggetto Excel


Dati su foglio Excel


Record sulla lista

martedì 30 luglio 2013

Esempio di una select case in sql

Anche in sql è possibile utilizzare la clausola 'select case' come in altri linguaggi di programmazione.
Molto utile in fase di inserimento di dati in tabelle da altre tabelle o anche semplicemente per output di query.
Qui di seguito un esempio (test su MYSQL e MS SqlServer) che parte da una interrogazione sulla tabella 'car' e quando vengono trovati i codici 'A1' e 'A2' sono sostituiti con delle descrizioni.

Tabella car:
ID, CODE
-- ----
1, 'A1'
2, 'A2'
3, 'A3'
Sql:
select
case code
when 'A1' then 'FERRARI'
when 'A2' then 'LAMBORGHINI'
else code
end
from car
Output:
'FERRARI'
'LAMBORGHINI'
'A3'

sabato 27 luglio 2013

Nuova classifica online per Free Word

E' disponibile online e su questo blog nella pagina delle app, la classifica dei 100 migliori giocatori di Free Word nel mondo.
Presto verrà migliorata e arricchita con altre informazioni.

mercoledì 24 luglio 2013

Nuova classifica online per Quiz

E' disponibile online e su questo blog nella pagina delle app, la classifica dei 100 migliori giocatori di Quiz nel mondo.
Presto verrà migliorata e arricchita con altre informazioni.

giovedì 18 luglio 2013

Creazione dll in Visual Basic 6

Un semplice esempio di come creare una libreria dll e referenziarla in un progetto di Visual Basic 6.
Si apre l'ambiente vb6, si seleziona "DLL ActiveX" e si scrivono ad esempio due metodi che fanno ritornare il colore di un'auto.
Una volta scritto il codice e compilata la dll si apre di nuovo l'ambiente vb6 e si seleziona un nuovo progetto "EXE Standard".
Si referenzia la dll nel menu a tendina del progetto, e ad esempio si creano due pulsanti e due textbox su di una form.
Si scrivono queste poche righe di codice e si esegue il programma. Sostanzialmente non si fa altro che creare l'oggetto "Car", e chiamare uno dei due metodi quando servono, cosicchè la variabile dichiarata nella dll può assumere questo o quel valore.
In questo caso se si preme il primo pulsante avrò scelto un'auto verde, se premo il secondo pulsante avrò scelto un'auto rossa.
Di seguito le figure d'aiuto:
Creazione progetto dll
Creeazione progetto dll
Scrittura codice sulla dll
Scrittura codice sulla dll
Compilazione dll
compilazione dll
Creazione progetto Exe
Creazione progetto exe
Riferimento dll
Riferimento dll
Scrittura codice sul progetto Exe
Scrittura codice sul progetto exe
Compilazione ed esecuzione programma
Compilazione ed esecuzione del programma

domenica 14 luglio 2013

App android disponibili anche su SlideMe.org

Il market Android non è disponibile in tutte le nazioni del mondo, e non sempre sui device gli utenti scelgono di impostare l'account di Google; quindi ho pensato di muovermi su altri canali.
Uno di questi mi è piaciuto e ho deciso di uploadare le mie app.
Eccole qui su Slideme.org

martedì 9 luglio 2013

Aggiornamenti per le app Quiz e Free Word

Disponibili sul market android due nuovi aggiornamenti per le app Quiz e Free Word.
Entrambi riguardano piccole ottimizzazioni per layout e per il codice al loro interno.
Le trovate sempre qui

martedì 2 luglio 2013

Nuovo Blog su Trekking e Montagne

Da oggi apro il mio nuovo blog mg1975mountain.blogspot.it/ per non invadere troppo con messaggi fuori dal tema principale che rimane la programmazione.
Comincia a caricarsi un pochino troppo di argomenti e si potrebbe creare confusione nelle ricerche.
Tutti i post sul tema montagne e trekking saranno quindi presenti sul nuovo sito.
Ciao e buona navigazione!

Clausola Option Explicit in VB6

Questo tipo di clausola in visual basic non è nient altro che una forzatura di dichiarazioni di variabili.
Vale a dire che se inserita all'inizio di un modulo o comunque nel progetto, tutte le variabili devono essere dichiarate.
Per un certo verso è meglio così nessuna variabile è lasciata al caso e nello stesso tempo viene velocizzata la loro localizzazione.
Nelle figure successive ecco come vb genera un errore se viene inserita questa clausola e non viene dichiarata una variabile.

Generazione errore se omessa una dichiarazione:


Codice corretto:

domenica 23 giugno 2013

Free Word sul market Android

Appena uscita un'altra mia app sul market Android: Free Word
Un semplice gioco dove l'obiettivo è trovare e scrivere la parola mostrata a video.
Punteggio massimo 1.000.000, classifica online e bonus per incrementare più velocemente il punteggio.
Scaricate e mi raccomando un buon feedback!

Buon divertimento!

mercoledì 19 giugno 2013

Quiz versione 1.9.2

Da poco online la nuova versione della mia app Quiz.
Un nuovo server ospiterà il punteggio e la classifica online, non sono stati persi i punteggi precedentemente inseriti.
Semplicemente cliccando sul pulsante "invia" e scrivendo un nome è possibile inviare il proprio punteggio su di un server online e quindi confrontarsi con altri avversari.
Il secondo aggiornamento è l'ottimizzazione sul layout delle statistiche, ora per molti device vengono visualizzate in maniera corretta.
Grazie a tutti coloro che la scaricano e la utilizzano; spero veramente possa essere d'aiuto!
BUON QUIZ!

sabato 1 giugno 2013

Pulsante "mi piace" Facebook nel proprio sito o blog

Come posso inserire il pulsante "mi piace" nel mio sito?
Semplice, basta andare su questo link, configurare lo stile tramite il configurator, premere il pulsante "get code" in basso e copiare e incollare le parti di codice ottenute dove si vuole che compaia il pulsante di facebook sul proprio sito (ovviamente la seconda parte identifica il pulsante).

sabato 18 maggio 2013

Scroll con la rotellina del mouse in Visual Basic 6

Su internet ci sono diversi link che permettono di risolvere l'ormai noto problema dello scroll nelle pagine con la rotellina del mouse in ambiente Visual Basic 6.
Sostanzialmente viene scaricato un eseguibile, si estraggono dei file su di una directory, si esegue una registrazione di una dll, si aggiorna il registro di configurazione e infine si aggiunge in VB6 il caricamento della dll allo startup dell'ambiente.
Ecco come fare e cosa scaricare direttamente dal sito Microsoft.

sabato 27 aprile 2013

Step da seguire per creare un app in Android

Come creare un app per Android? E' una domanda che spesso mi è stata rivolta; semplice, ecco una piccola guida formato smart con immagini per creare una nuova app su android.

1) download e installazione dell'ambiente (eclipse + sdk) che ormai si puo' trovare a questo link
http://developer.android.com/sdk/installing/bundle.html (fino a qualche tempo fa dovevi installarti eclipse più plugin e configurazioni varie)
2) ad esempio estrarre il contenuto dallo zip sotto c:\
3) eseguire eclipse (volendo si puo' modificare il file ini portando la ram a 512)
4) con android sdk manager selezionare il pacchetto o i pacchetti da utilizzare per creare il progetto, procedere con il download e l'installazione
5) creare un nuovo device come emulatore tramite il Android Virtuale Device Manager
6) creare il nuovo progetto e utilizzare le stesse Api del device impostato sull'emulatore
7) far partire l'emulatore
8) eseguire il progetto sull'emulatore (ad esempio tasto destro sul progetto "run as" e "android application")
9) se si ha un device android basta collegarlo via usb, attendere qualche secondo ed eseguire il punto 8 scegliendo poi il device nella finestra che appare (ricordarsi di abilitare il device/telefonino all'installazione di app non ufficiali ed eventualmente abilitarlo al debug)

Da non dimenticare: se si vuole sviluppare un nuovo progetto o importarne uno gia creato con api che utilizzano banner, è necessario disporre il device con le api che accettino i banner, altrimenti non sarà possibile eseguire l'applicazione sul device.
Ad esempio se la l'applicazione è con banner e sdk 4.2.2 utilizzerò come target la "google api level 17"

Apertura del manager


Selezione del pacchetto da utilizzare


Creazione del nuovo progetto con Eclipse


Nuovo progetto test


Deploy dell app sul device

giovedì 25 aprile 2013

Aggiornamento MyBookstore

Aggiornata MyBookstore sul market di Android.

Di seguito gli aggiornamenti:
- possibilità di acquisire più dati con lo scan sul codice ISBN del libro; una volta partita l'applicazione premere su "Scan ISBN" e indirizzare la fotocamera del telefono sul codice del libro; il programma interroga il servizio di Google per caricare alcuni dati;
- inserite più proprietà del libro;
- rivisto il layout e spostati i banner in basso allo schermo.

martedì 16 aprile 2013

Lettura contenuto di un file da carattere a carattere in java

Con queste poche righe è possibile leggere il contenuto di un file dalla posizione di un carattere ad un altra; può ad esempio essere utile quando riceviamo un errore in un punto di un file xml e non possiamo ottenere altri tipi di errore.

public class main {

 public static void main(String[] args) {
  try {  
   FileInputStream fstream1 = new FileInputStream("c:\\test.txt");
   DataInputStream in1 = new DataInputStream(fstream1);
   try {    
    Writer writer = new StringWriter();      
    char[] buffer = new char[10024];   //esempio dimensione buffer

    Reader reader = new BufferedReader(new InputStreamReader(in1));    
    int n; 
    int fromChar=9; //esempio dal carattere 9
    int toChar=11; //esempio leggo 2 caratteri
    while ((n = reader.read(buffer)) != -1)
     writer.write(buffer, 0, n);   
    System.out.print("testo intero: "+writer.toString()+"\n");
    System.out.print("testo trovato: "+writer.toString().substring(fromChar,toChar));
   }catch(Exception e){
    System.out.print("errore lettura: "+e.getMessage());
   }
   finally{
    in1.close();
   }

  }catch(Exception e){
    System.out.print("errore: "+e.getMessage());
  } 
 }
}

venerdì 12 aprile 2013

Upload di un file con java servlet da una jsp

L'esempio mostra come inviare un file ad una servlet premendo un pulsante su di una form e salvarlo su una directory.
Il test risulta valido già dalla jdk 1.4.2
Ad esempio con Eclipse si crea un nuovo progetto web, si imposta il file xml secondo i parametri elencati qui sotto, si crea una form sulla index.jsp e infine si crea una nuova classe servlet.


web.xml e index.jsp
<?xml version="1.0" ?>
<web-app>
<display-name>nameproject</display-name>
<servlet>
<servlet-name>SaveFileUpload</servlet-name>
<servlet-class>namePackage.SaveFileUpload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SaveFileUpload</servlet-name>
<url-pattern>/SaveFileUpload</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


<form method="post" name="form2" action="SaveFileUpload" enctype="multipart/form-data">
Select file:<input type="file" name="file_upload" />
<input class="submit1" name="btn_sub" value="Upload" type="submit" />
</form>

class SaveFileUpload
public class SaveFileUpload extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
saveFile(request, response, "GET");
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
saveFile(request, response, "POST");
}

public void saveFile(HttpServletRequest request,
HttpServletResponse response, String methodGetPost)

ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
List fileItemsList=null;
try {
fileItemsList = servletFileUpload.parseRequest(request);
} catch (FileUploadException e1) {
errorServlet=true;
e1.printStackTrace();
}

FileItem fileItem = null;

Iterator it = fileItemsList.iterator();

String fileName = "";
while (it.hasNext()){
fileItem = (FileItem)it.next();

if(fileItem.getFieldName().equals("file_upload"))
{
String pathFile="";
Init init = new Init();
pathFile = "c:\\"; //example
pathFile = pathFile + request.getSession().getAttribute("user");
File dir = new File(pathFile);
if (!dir.exists()) dir.mkdirs();



fileName = fileItem.getName();
if (fileItem.getSize() > 0){
fileName = FilenameUtils.getName(fileName);
}

File saveTo = new File(dir, fileName);
try {
fileItem.write(saveTo);
}catch(Exception e){
e.printStackTrace();
}
response.setContentType("text/html");

PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title></title>");
out.println("</head>");
out.println("<body>");
out.println("File salvato correttamente.");
out.println("</form>");
out.println("</body>");
out.println("</html>");
}
}
}
}

lunedì 1 aprile 2013

Rimuovere link da apertura nuova scheda o tab in Firefox

Alla fine ce l'ho fatta, sono riuscito a rimuovere maledetti link che si aprivano quando selezionavo una nuova scheda o tab in firefox.
Come fare? Digitare nella barra degli indirizzi: about:config
Quindi trovare la voce: keyword.url
rimuovere il maledetto link e modificarlo ad esempio con http://www.google.com/search?ie=UTF-8&oe...&gfns=1&q=
Controllare bene con il cerca, che non ci siano altri link nelle varie keyword, altrimenti elimnarli o sostituirli con altri valori.

venerdì 15 febbraio 2013

Caricamento dati da db in una ListView in Android

Popolare una ListView con dei dati presenti nel db MySql di android? Semplice, basta portare i dati in una lista tipizzata e agganciare un SimpleAdapter alla ListView in questo modo.
Il progetto consiste in due classi e due layout (uno per la main e ListView, uno per la riga di testo).

Classe MainActivity:
public class MainActivity extends Activity {
 private final static String NAME = "name";
  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        loadList();
    }

    private void loadList(){
     List<? extends Map<String,?>> listData = createItems();
     
     String[] keys = new String[]{NAME};
     int[] views = new int[]{R.id.sol_question};
     
     final SimpleAdapter simpleAdapter = new SimpleAdapter(this,listData,R.layout.custom_row,keys,views);
     
     ListView listView = (ListView) findViewById(R.id.ListView01);
  listView.setAdapter(simpleAdapter);
 }
    
    private List<? extends Map<String,?>> createItems() {
  ArrayList<Map<String,String>> lista = new ArrayList<Map<String,String>>();

  DataDbHelper dh = new DataDbHelper(MainActivity.this);
  
  lista = dh.selectAll();
  dh.closeDb();

  return lista;
 }   
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    } 
}
Classe DataDbHelper:
public class DataDbHelper {
 private static final String DATABASE_NAME = "example.db";  
 private static final int DATABASE_VERSION = 1; 
 private static final String TABLE_EXAMPLE = "tbl_example";
 private static final String FIELD_EXAMPLE_ID = "id";
 private static final String FIELD_EXAMPLE_NAME = "name";
 
 private Context context;  
 private SQLiteDatabase db;  
 private SQLiteStatement insertStmt; 
    
    public DataDbHelper(Context context) {  
       this.context = context;  
       OpenHelper openHelper = new OpenHelper(this.context); 
       this.db = openHelper.getWritableDatabase(); 
       openHelper.onUpgrade(this.db, 1, DATABASE_VERSION);
    }  

    public void closeDb(){
     if(this.db.isOpen())
      this.db.close();
    }
    
    public  ArrayList<Map<String,String>>  selectAll() {  
     ArrayList<Map<String,String>> listaDb = new ArrayList<Map<String,String>>();
     String NAME="name";
     Cursor cursor = this.db.query(TABLE_EXAMPLE, new String[] { FIELD_EXAMPLE_NAME },   
      null, null, null, null, FIELD_EXAMPLE_NAME+" asc");  
     if (cursor.moveToFirst()) {  
      do {  
       Map<String,String> dataDb = new HashMap<String,String>();
       dataDb.put(NAME,  cursor.getString(0));
       listaDb.add(dataDb);
      } while (cursor.moveToNext());  
    }  
    if (cursor != null && !cursor.isClosed()) {  
     cursor.close();  
    }  
    return listaDb;  
  }  
    

  private static class OpenHelper extends SQLiteOpenHelper {  
   OpenHelper(Context context) {  
       super(context, DATABASE_NAME, null, DATABASE_VERSION);  
   }  
 
    public void onCreate(SQLiteDatabase db) {  
       db.execSQL("CREATE TABLE " + TABLE_EXAMPLE + 
        " (" + FIELD_EXAMPLE_ID + " INTEGER PRIMARY KEY, " + FIELD_EXAMPLE_NAME + " TEXT)"); 
     }

    @Override
  public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
  }  
  }  
}

activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:background="@android:color/black"
    android:layout_height="match_parent" >
<ListView
    android:id="@+id/ListView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true" 
    android:choiceMode="none"
    android:paddingTop="1dp"
    android:textFilterEnabled="true" >
</ListView>
</RelativeLayout>
custom_row.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout android:layout_width="fill_parent"
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:id="@+id/row_container"
 android:padding="4dp"
 android:layout_height="wrap_content">
 <TableRow android:id="@+id/widget10"
  android:layout_width="wrap_content"
  android:orientation="horizontal"
  android:layout_height="wrap_content">
  <TextView android:layout_height="wrap_content"
   android:layout_width="wrap_content" 
   android:textColor="@android:color/white"
   android:textSize="12sp"
   android:id="@+id/sol_question"></TextView>
 </TableRow>
</TableLayout>



venerdì 8 febbraio 2013

Query su db in cloud con mysql-connector in Android

E' possibile utilizzare il pacchetto mysql-connector-java-5.1.13-bin.jar per eseguire query su un db in internet.
Basta integrare il jar nel progetto Android e scrivere alcune righe di codice come l'esempio qui sotto.

public ArrayList<Map<String,String>> queryExample(){
Connection con=null;   
ArrayList<Map<String,String>> listDb = new ArrayList<Map<String,String>>();
String name="";
String score="";
  
try{   
 Class.forName("com.mysql.jdbc.Driver").newInstance();   
                
}catch(Exception e){       
}  
  
try{   
            con=DriverManager.getConnection(DB_URL,DB_ID,DB_PSW);  
            Statement st=con.createStatement();   
            String sql ="SELECT name_p, score_p FROM schema.table";
            st.executeQuery(sql);  
            ResultSet rs=st.getResultSet();   
            int i=0;
            while (rs.next ()){  
             Map<String,String> dataDb = new HashMap<String,String>();
             ++i;
             name = rs.getString("name_p");
             score = String.valueOf((int)rs.getInt("score_p"));
             if(name==null) name="";
             if(score==null) score="";
             
             dataDb.put(POSITION, ""+i);
             dataDb.put(ONLINE_NAME, name);
             dataDb.put(ONLINE_SCORE, score);
       listDb.add(dataDb);
            }       
            
            rs=null;
            
        }catch(Exception e){       
        }finally{
         try {
          if(con!=null)
           con.close();
   } catch (SQLException e) {

   }
}
        
return listDb;
}

lunedì 28 gennaio 2013

Installazione di una app su telefono o sd-card

E' possibile far scegliere all'utente dove poter installare un app android scaricata dal market.
Requisiti minimi dell'app sono API Level 8 e Platform 2.2
Successivamente modificare il file AndroidManifest.xml
Di seguito un esempio, e il parametro installLocation può essere modificato.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="it.mg.android.quiz"
      android:installLocation="auto"
      android:versionCode="x.x"
      android:versionName="x">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Main" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 </application>
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="11"/>
</manifest> 

domenica 20 gennaio 2013

Hyperlink in un campo testo di una dialog con Android

In un campo testo è possibile inserire un hyperlink in diversi modi. Nell'esempio seguente vengono create due TextView in una Dialog box: nella prima il link è nella classe (volendo si può inserire nel file strings.xml e poi importarlo), nella seconda TextView il parametro 'autoLink' permette di riconoscere automaticamente un link per poi essere cliccato.

Codice java per il dialog:
final Dialog dialog = new Dialog(this);                                   
dialog.setContentView(R.layout.dialog);

String link1 = "<A HREF='http://www.example.com'>example</A>";
TextView txtLink1 = (TextView) dialog.findViewById(R.id.txt_dialog_link1);
txtLink1.setText(Html.fromHtml(link1));
txtLink1.setMovementMethod(LinkMovementMethod.getInstance());

dialog.show();
dialog.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
 android:id="@+id/layout_root"          
 android:orientation="horizontal"  
 android:layout_width="fill_parent"  
 android:layout_height="fill_parent" >  
 <TableLayout android:layout_width="fill_parent"
  android:id="@+id/row_container1"
  android:background="@android:color/black"
  android:layout_height="fill_parent">
  <TableRow android:id="@+id/widget586"
      android:paddingBottom="8dp"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content">
   <TextView android:id="@+id/txt_dialog_link1"  
          android:layout_width="wrap_content" 
          android:textColor="@android:color/white"          
    android:layout_height="fill_parent"  />
  </TableRow>
  <TableRow android:id="@+id/widget587"
   android:layout_width="wrap_content"
   android:paddingBottom="8dp"
   android:layout_height="wrap_content">
   <TextView android:id="@+id/txt_dialog_link2"  
       android:textColor="@android:color/white"
       android:autoLink="web"
       android:text="http://www.example.com"
     android:layout_width="wrap_content"     
   android:layout_height="wrap_content"/>
  </TableRow>
  <TableRow android:id="@+id/widget587"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content">
   <Button 
    android:id="@+id/btn_dialog" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
   android:layout_centerHorizontal="true" 
    android:text="OK"/>
  </TableRow>
 </TableLayout>
</LinearLayout>

sabato 12 gennaio 2013

Android e il Flip tra Activity come su Iphone

Come "flippare" tra due activity con android: semplice, di seguito lascio un esempio di alcune righe da implementare in un app e organizzare il layout. Si è chiaro che su internet ce ne sono di esempi ma questo a me ha funzionato perfettamente con un sdk 4.1.1 (ossia android 2.2).
I due layout sono raccolti nell'oggetto ViewFlipper, nel onCreate aggiungere il setOnTouchListener e utilizzare il dispatchTouchEvent.
Ho utilizzato il RelativeLayout per inserire in basso i banner, ma è opzionale si può utilizzare benissimo un LinearLayout.
Aggiungere la directory "anim" sotto "res" e creare i 4 layout left_in.xml left_out.xml right_in.xml right_out.xml

Sorgente:

public class Example extends Activity{
 private ViewFlipper vf;
 private static final int SWIPE_MIN_DISTANCE = 150;
 private static final int SWIPE_THRESHOLD_VELOCITY = 200;
 
 private final GestureDetector detector = new GestureDetector(
   new MyGestureDetector());
   
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.example);
  mContext = this;
  
  vf = (ViewFlipper)findViewById(R.id.viewflipper_example);
  
  vf.setOnTouchListener(new OnTouchListener() {
         @Override
         public boolean onTouch(final View view, final MotionEvent event) {
          detector.onTouchEvent(event);
             return true;
         }
     });
  
 }

 class MyGestureDetector extends SimpleOnGestureListener {
  @Override
  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
    float velocityY) {
   try {
    if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
      && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
     vf.setInAnimation(AnimationUtils.loadAnimation(mContext,
       R.anim.left_in));
     vf.setOutAnimation(AnimationUtils.loadAnimation(mContext,
       R.anim.left_out));
     vf.showNext();
     return true;
    } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
      && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
     vf.setInAnimation(AnimationUtils.loadAnimation(mContext,
       R.anim.right_in));
     vf.setOutAnimation(AnimationUtils.loadAnimation(mContext,
       R.anim.right_out));
     vf.showPrevious();
     return true;
    }

   } catch (Exception e) {
    e.printStackTrace();
   }

   return false;
  }
 }
 
 @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        super.dispatchTouchEvent(event);
        return detector.onTouchEvent(event);
    }
}
Layout xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
 android:layout_width="fill_parent"
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_height="wrap_content"
 android:orientation="vertical">
    <RelativeLayout
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent"      
  android:orientation="vertical">
     <ViewFlipper android:id="@+id/viewflipper_example"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent">  
  <LinearLayout 
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:orientation="vertical">
   
   
  </LinearLayout>
  <LinearLayout 
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:orientation="vertical" >
  </LinearLayout>
  </ViewFlipper>
 </RelativeLayout>
</LinearLayout>

venerdì 4 gennaio 2013

Utilizzo personalizzato di jQuery UI DatePicker in ambiente .Net

Utilizzo personalizzato di jQuery UI DatePicker in ambiente .Net

Se in una form sono presenti più oggetti DatePicker è possibile associare a ciascuno diverse proprietà attribuendo diverse funzioni.
Con questo esempio rendo selezionabili nel secondo DatePicker solamente: tutti i martedì del mese (corrisponde il numero 2), dal 25 di ogni mese fino a fine mese, i primi 5 giorni del mese successivo.
Di seguito i due oggetti TextBox/datePicker e il codice javascript:
<asp:TextBox ID="txt1" runat="server" CssClass="datePicker"> </asp:TextBox>
<asp:TextBox ID="txt2" runat="server" CssClass="datePicker_custom"> </asp:TextBox>

<script type="text/javascript">

function initDatepicker() {
    var myPath = getBaseURL() + "img/icon-calendar.gif";
    var myParam = 'both';
    var date = new Date();
    var dayMonth = 25;

    $(function() {
        $(".datepicker").datepicker({
            showButtonPanel: true,
            buttonImage: myPath,
            buttonImageOnly: true,
            showOn: myParam
        });
    });

    $(function() {
        $(".datePicker_custom").datepicker({
            showButtonPanel: true,
            buttonImage: myPath,
            buttonImageOnly: true,
            showOn: myParam,

            beforeShowDay: function(date) {
                var dayEnabled = date.getDay();
                var dayRangeEnabled = date.getDate();

                if (dayEnabled == 2 || dayRangeEnabled > dayMonth || dayRangeEnabled < 6) {
                    return { 0: true }
                } else {
                    return { 0: false }
                }
            }
        });
    });
}

</script>