04
mar
2010

Il faut passer la propriété DrawMode de la ListBox à OwnerDrawFixed et ajouter le code suivant dans l'événement OnDraw :

private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    e.DrawBackground();
    e.DrawFocusRectangle();
 
    ListBox lb = sender as ListBox;    
 
    // Calcule les dimensions du texte
    SizeF stringSize = new SizeF();
    stringSize = e.Graphics.MeasureString(lb.Items[e.Index].ToString(), e.Font);
 
    e.Graphics.DrawString(
        lb.Items[e.Index].ToString(), 
        e.Font, 
        new SolidBrush(e.ForeColor), 
        new PointF(e.Bounds.Right - stringSize.Width, e.Bounds.Y)
    );            
}

Si ça peut faire gagner 5 minutes à quelqu'un...

Libellés :

27
feb
2010

L'approche recommandée pour stocker une chaine de connexion à une base de données est d'utiliser le fichier de configuration du programme (app.config). Mais cela entraine un problème au niveau de la sécurité des données. En effet, le mot de passe utilisé pour la connexion à la base se retrouve en clair dans le fichier XML.

Pour pallier à ce problème, il est possible de crypter la section connectionStrings en suivant les instructions détaillées sur cet article de MSDN.

Libellés : ,

08
feb
2010

Lorsque je parcoure le code du Zend Framework, je vois souvent des conditions écrites sous cette forme :

if (0 == $argc) {
  // ...
}
Libellés :

13
jan
2010

Jusqu'ici on ne pouvait stocker sur Google Documents que certains types de fichiers (.doc, .xls, .pdf...). Google vient d'annoncer qu'on pourra bientôt uploader n'importe quel type de document et qu'on disposera gratuitement d'un espace de 1 Go. Le Go supplémentaire sera facturé 0.25 $ et on pourra lancer une recherche sur les documents stockés dans cet espace.

Libellés : ,

09
jan
2010

Une petite astuce pour tester un contrôleur qui génère du PDF. Pour s'assurer que c'est bien du PDF qui est envoyé, on peut utiliser Zend_Pdf qui est capable de charger un document existant :

$this->dispatch('/moncontrolleur/1/pdf');
$this->assertResponseCode(200);
$this->assertHeaderContains('Content-type', 'application/pdf');
$pdf = Zend_Pdf::parse($this->getResponse()->getBody());
$this->assertEquals('MonProgramme', $pdf->properties['Creator']);

Si le PDF n'est pas correct, Zend_Pdf lancera une exception : Zend_Pdf_Exception: File is not a PDF. On peut également vérifier les propriétés du PDF et le nombre de pages. Par contre, on ne peut pas accéder au contenu du PDF pour vérifier le texte qu'il contient.


08
jan
2010

Ah les arrondis ! On pourrait penser que c'est très simple mais comme souvent le diable se cache dans les détails.

Prenons par exemple la méthode round de PHP. Elle nous propose 4 types d'arrondi :

// Arrondi vers l'infini (méthode par défaut: PHP_ROUND_HALF_UP)
echo round(1.244, 2) . "\n"; // Affiche 1.24
echo round(1.246, 2) . "\n"; // Affiche 1.25
echo round(1.245, 2) . "\n"; // Affiche 1.25
echo round(-1.245, 2) . "\n"; // Affiche -1.25
 
// Arrondi vers zéro
echo round(1.245, 2, PHP_ROUND_HALF_DOWN) . "\n"; // Affiche 1.24
echo round(-1.245, 2, PHP_ROUND_HALF_DOWN) . "\n"; // Affiche -1.24
 
// Arrondi bancaire (arrondi au nombre pair le plus proche)
echo round(1.245, 2, PHP_ROUND_HALF_EVEN) . "\n"; // Affiche 1.24
echo round(1.235, 2, PHP_ROUND_HALF_EVEN) . "\n"; // Affiche 1.24
 
// Arrondi au nombre impair le plus proche
echo round(1.245, 2, PHP_ROUND_HALF_ODD) . "\n"; // Affiche 1.25
echo round(1.235, 2, PHP_ROUND_HALF_ODD) . "\n"; // Affiche 1.23
Libellés : ,

30
dec
2009

Google Closure dispose d'une classe bien pratique nommée goog.i18n.NumberFormat qui permet de formater des nombres.

Formatage de monnaie

goog.require("goog.i18n.NumberFormat");
goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_fr_FR;
var fmt = new goog.i18n.NumberFormat(
  goog.i18n.NumberFormatSymbols.CURRENCY_PATTERN
);
alert(fmt.format(1243.567)); // Affiche 1 243,56 €
Libellés : ,

04
dec
2009

Je viens de tomber sur un méchant bogue dans mon application. Il est du à une subtilité dans les formats ISO proposés par Zend_Date.

Le problème se situe au niveau des années. Zend_Date propose deux formats différents : yyyy et YYYY. Le premier, celui avec les y en minuscules fournit le résultat auquel on peut s'attendre, alors que le deuxième renvoie l'année dans lequel se situe la semaine !

Libellés : , ,

13
nov
2009

goog.require

Cette fonction est à la base du système de paquets de Google Closure. D'une façon similaire à la fonction require_once de PHP, elle permet d'inclure les dépendances. Techniquement parlant, elle charge les scripts nécessaires en ajoutant des balises SCRIPT. Le problème c'est que le chargement de ces scripts se fait de façon asynchrone.

Libellés : ,