Windows Forms http://blogs.ugidotnet.org/Crad/category/Windows Forms.aspx Windows Forms it-IT Marco De Sanctis Subtext Version 2.6.0.0 Volete organizzare tutti i Technorati Tags in pochi minuti? http://blogs.ugidotnet.org/Crad/archive/2007/09/26/volete-organizzare-tutti-i-technorati-tags-in-pochi-minuti.aspx <p>Bene, allora la nuova versione di Blog Manager (il nome è uno schifo, lo so) fa per voi! <a href="http://blogs.ugidotnet.org/Crad/archive/2007/09/13/un-semplice-tool-per-gestire-le-categorie-sul-blog.aspx">Qualche post fa</a>, se ricordate, vi ho raccontato di un piccolo tool realizzato dal sottoscritto che, grazie ad un'interfaccia simil-Explorer, consente di riorganizzare velocemente tutte le categorie del blog facendo uso dei <a href="http://www.xmlrpc.com/metaWeblogApi">MetaWeblog API</a>.</p> <p>Mi è sembrato così comodo che, dopo essere stato lì a compiacermi come un fesso (e senza cambiare le categorie), mi son detto: "ma perchè non fare lo stesso anche per i <a href="http://technorati.com/tag/">Technorati Tags</a>, che <a href="http://blogs.ugidotnet.org/piyo/archive/2007/08/14/87813.aspx">son così pallosi da inserire nei post vecchi</a> che ne sono sprovvisti? In questo modo potrei sfoggiare una rigogliosa Tag Cloud e il mondo sarebbe finalmente mio!!"</p> <p>Da questo vero e proprio documento dei requisiti, ho partorito la versione 1.1, che offre uno stupendo e alquanto esplicativo Tab</p> <p><a href="http://www.marcodesanctis.it/images/Blog/VoleteorganizzaretuttiiTechnoratiTagsinp_10A4/image013.png" atomicselection="true"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="179" src="http://www.marcodesanctis.it/images/Blog/VoleteorganizzaretuttiiTechnoratiTagsinp_10A4/image012.png" width="240" border="0" /></a> </p> <p>Come funziona? Selezioniamo nella toolbar il numero di post da scaricare e poi click sul pulsante Download.</p> <p><a href="http://www.marcodesanctis.it/images/Blog/VoleteorganizzaretuttiiTechnoratiTagsinp_10A4/image0_thumb22.png" atomicselection="true"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="61" src="http://www.marcodesanctis.it/images/Blog/VoleteorganizzaretuttiiTechnoratiTagsinp_10A4/image0_thumb21.png" width="240" border="0" /></a> </p> <p>A quel punto, grazie ad una serie di Regex, tutti i tag contenuti nei post scaricati verranno elencati nella CheckedListBox in basso, mentre i post appariranno nella ListView a destra, con tanto di Tooltip con il contenuto.</p> <p><a href="http://www.marcodesanctis.it/images/Blog/VoleteorganizzaretuttiiTechnoratiTagsinp_10A4/image042.png" atomicselection="true"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" src="http://www.marcodesanctis.it/images/Blog/VoleteorganizzaretuttiiTechnoratiTagsinp_10A4/image041.png" width="240" border="0" /></a> </p> <p>Ora basta selezionare un po' di post, e spuntare i checkbox relativi ai tag desiderati e poi premere il button Salva sulla Toolbar in alto.</p> <p><strong>Attenzione! </strong>A differenza delle categorie, la funzione dei Technorati Tags lavora per forza di cose tramite regex, perchè devono essere estratte dal body del post; pertanto potrebbe esserci un certo margine di errore nel match del pattern utilizzato. Io l'ho provato in diversi casi e lo stesso ha fatto il bravo <a href="http://blogs.ugidotnet.org/piyo/">Simone</a> <a href="http://codeclimber.net.nz/">Chiaretta</a> che mi ha dato una mano con i test, e non abbiamo evidenziato problemi. Sarebbe comunque opportuno effettuare un backup dei post per sicurezza. Per chi, come me, ha un blog su uno spazio condiviso e non ha accesso al database, ci sono due alternative</p> <ol> <li>Se si utilizza Subtext, esportare i post su BlogML tramite l'apposita funzione nella sezione Admin; </li><li> Utilizzare le funzionalità di Backup e Restore (quest'ultimo spero di no <img alt="smile_teeth" src="http://spaces.live.com/rte/emoticons/smile_teeth.gif" />) che si trovano in Blog Manager nel menu Tools.</li></ol> <p>Ovviamente, <a href="http://blogs.ugidotnet.org/Crad/archive/2007/09/13/un-semplice-tool-per-gestire-le-categorie-sul-blog.aspx">come per la volta precedente</a>, vale la seguente regola ferrea:</p> <blockquote> <p><em><font color="#ff0000">Questo software è rilasciato gratuitamente "AS IS". L'autore (cioé il sottoscritto) non è in alcun modo tenuto a fornire assistenza né tantomeno potrà essere ritenuto responsabile per eventuali problemi inerenti il suo utilizzo. In altre parole, se vi si sminkia (questa volta con la "K") totalmente il blog o il sistema operativo, se un hacker accede al vostro conto in banca, ecc.ecc., non bussate alla mia porta!</font></em></p></blockquote> <p><font color="#400040">E chi non è d'accordo, eviti di utilizzarlo. Cosa manca? Ah sì, i link: <a href="http://www.marcodesanctis.it/public/BlogManagerSolution.rar">qui per i sorgenti</a> (rigorosamente Visual Studio 2008 ma su .NET 2.0) e <a href="http://www.marcodesanctis.it/public/BlogManager.rar">qui l'eseguibile</a>.</font></p> <p><font color="#400040">Ogni feedback è prezioso come un litro di birra ghiacciata nel deserto.</font></p> <p><font color="#400040">Ciao <img alt="smile_wink" src="http://spaces.live.com/rte/emoticons/smile_wink.gif" /></font></p> <div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:d5e8f891-3f12-4ceb-9c74-689584ba6836" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati tags: <a href="http://technorati.com/tags/Tools" rel="tag">Tools</a>, <a href="http://technorati.com/tags/Blog%20Commander" rel="tag">Blog Commander</a></div><img src="http://blogs.ugidotnet.org/Crad/aggbug/88536.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2007/09/26/volete-organizzare-tutti-i-technorati-tags-in-pochi-minuti.aspx Wed, 26 Sep 2007 02:12:21 GMT http://blogs.ugidotnet.org/Crad/archive/2007/09/26/volete-organizzare-tutti-i-technorati-tags-in-pochi-minuti.aspx#feedback 4 http://blogs.ugidotnet.org/Crad/comments/commentRss/88536.aspx Cosa sarebbe il mondo senza NHDomainMapper? http://blogs.ugidotnet.org/Crad/archive/2006/10/05/50015.aspx <p>Avvertenza: questo è un post autocelebrativo, <a href="http://blogs.ugidotnet.org/janky">Janky</a> mi ha pagato profumatamente per scriverlo, quindi se vi farà venire il diabete prendetevela con lui.</p> <p><a href="http://www.microsoft.com/italy/windows/windowsvista/default.aspx">Windows Vista</a> è quasi in RTM? Avete provato <a href="http://msdn.microsoft.com/vstudio/future/default.aspx">Orcas</a> per la prima volta? <a href="http://www.microsoft.com/office/preview/default.mspx">Office 2007</a> lo usate già da un po'? Vi piace <a href="http://www.igordamiani.it/pagine/happysign.php">HappySign</a> di <a href="http://blogs.ugidotnet.org/idamiani/">Igor</a>? STICA!!! Siete il nulla: sta per arrivare <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=NHDomainMapper">NHibernate Domain Mapper</a> rel.0.1 alpha codename <strong>SUPERTANGA!!</strong></p> <p>Ora, visto che un rilascio ufficiale non c'è ancora stato, purtroppo credo che difficilmente che ci sia qualcuno, oltre me e il bravo Sudano, in possesso di queste fantasmagoriche righe di codice C#. Tanto per dare un'ulteriore sferzata alla vostra rosicata (ma dove?? <img alt="smile_teeth" src="http://spaces.live.com/rte/emoticons/smile_teeth.gif">), vi sparo anche uno screenshot, così...&nbsp;tanto per gradire:</p> <p><a href="http://www.marcodesanctis.it/images/Blog/CosasarebbeilmondosenzaNHDomainMapper_703/image03.png" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="176" src="http://www.marcodesanctis.it/images/Blog/CosasarebbeilmondosenzaNHDomainMapper_703/image02.png" width="240" border="0"></a> </p> <p>Per le 2 o 3 persone che ancora non sanno di cosa stiamo parlando, beh... si tratta di un tool in grado di generare file di mapping per <a href="http://www.nhibernate.org">NHibernate</a> partendo dal domain model della nostra applicazione, quindi niente generazione automatica delle classi in base allo schema del DB (che, se vogliamo, serve veramente a poco...)</p> <p>Maggiori informazioni le potete trovare tramite questa <a href="http://www.marcodesanctis.it/public/NHDomainMapper-English.pdf">white paper</a> che abbiamo preparato, in vista del rilascio di una early build che dovrebbe essere a disposizione di tutti entro il prossimo weekend, vita sociale permettendo, ci vuole anche quella ogni tanto... Chi volesse scaricarla, può visitare la pagina ufficiale del nostro progetto.</p> <p>P.s. Igor, non prendertela per la frase su HappySign, ovviamente si scherza, anzi... mi piace molto il lavoro che hai realizzato.</p> <p>P.p.s. <a href="http://www.mediaset.it/brand/italia1/la_pupa_e_il_secchione/schedaprogramma_1818.shtml">La pupa e il secchione</a> è il programma dell'anno, e la versione Hot del mercoledì è imperdibile quasi come&nbsp;NHibernate Domain Mapper codename SUPERTANGA.</p><img src="http://blogs.ugidotnet.org/Crad/aggbug/50015.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2006/10/05/50015.aspx Thu, 05 Oct 2006 01:29:00 GMT http://blogs.ugidotnet.org/Crad/archive/2006/10/05/50015.aspx#feedback 6 http://blogs.ugidotnet.org/Crad/comments/commentRss/50015.aspx A proposito del DataBinding nelle WinForms http://blogs.ugidotnet.org/Crad/archive/2006/09/01/47126.aspx <FONT face=Verdana size=2> <P>Prendo spunto dal <A title="" href="http://blogs.ugidotnet.org/corrado/archive/2006/09/01/47118.aspx" target="" name="">recente&nbsp;post</A> di <A title="" href="http://blogs.ugidotnet.org/corrado/" target="" name="">Corrado</A> per dire che anche nelle Winforms è possibile utilizzare il databinding in senso "lato", ossia per impostare interazioni tra gli oggetti di una form piuttosto che per visualizzare informazioni provenienti da una fonte dati.</P> <P>Sappiamo benissimo che .NET&nbsp;ogni oggetto è utilizzabile come sorgente dati, quindi perché non utilizzare un Control come DataSource? Create una winform con una CheckBox e una ComboBox, poi, nel costruttore, scrivete:</P> <DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro"><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">public&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">Form1()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Binding&nbsp;b&nbsp;=&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">new&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">Binding("Enabled",&nbsp;checkBox1,&nbsp;"Checked");<BR>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">this</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">.comboBox1.DataBindings.Add(b);<BR>}<BR></DIV></SPAN> <P>Indovinate un po' cosa accade... <IMG height=19 src="http://www.imhoproject.org/files/occhiolino.gif" width=19 align=absMiddle border=0> </FONT><FONT face=Verdana size=2></FONT></P></FONT> <P><FONT face=Verdana size=2><A href="http://imhoproject.org/"><FONT face=Verdana size=1>powered by IMHO 1.3</FONT></A></P></FONT><!-- Powered by IMHO 1.3 (IT) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --> <img src="http://blogs.ugidotnet.org/Crad/aggbug/47126.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2006/09/01/47126.aspx Fri, 01 Sep 2006 12:20:00 GMT http://blogs.ugidotnet.org/Crad/archive/2006/09/01/47126.aspx#feedback 5 http://blogs.ugidotnet.org/Crad/comments/commentRss/47126.aspx Caricamento di un oggetto Image da file http://blogs.ugidotnet.org/Crad/archive/2006/08/09/46016.aspx <FONT face=Verdana size=2> <P>La creazione di un oggetto di tipo Image da un file nasconde una piccola insidia. Consideriamo il seguente snippet di codice:</P> <DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro"><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">Image&nbsp;myImage&nbsp;=&nbsp;Image.FromFile("filename.jpg")<BR></DIV></SPAN> </FONT> <FONT face=Verdana size=2><P>Ciò che accade dietro le quinte è che nel field</P> <DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro"><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">internal&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">IntPtr&nbsp;nativeImage<BR></DIV></SPAN> <P>viene memorizzato un handler al file <EM>filename.jpg</EM>, che rimane aperto finché non si richiama il metodo Dispose() di myImage. Il problema è che, ovviamente, il file risulta bloccato e il sistema ha una risorsa impegnata; inoltre, se dimentichiamo di effettuare la Dispose, questa situazione perdura fino a che non viene effettuato un GarbageCollecting o, al peggio, fino alla chiusura dell'applicazione.</P> <P>Come ovviare? Personalmente, quando devo caricare un'immagine da file, faccio così:</P> <DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro"><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">Image&nbsp;myImage;<BR></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">using&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">(Image&nbsp;img&nbsp;=&nbsp;Image.FromFile("filename.jpg")<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;myImage&nbsp;=&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">new&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">Bitmap(img);<BR>}<BR></DIV></SPAN> <P>Il costruttore dell'oggetto Bitmap, infatti, carica l'immagine e la salva sull'oggetto stesso utilizzando GDI+; da Reflector:</P> <DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro"><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">public&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">Bitmap(Image&nbsp;original,&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">int&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">width,&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">int&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">height)&nbsp;:&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">this</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">(width,&nbsp;height)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">using&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">(Graphics&nbsp;graphics1&nbsp;=&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">null</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graphics1&nbsp;=&nbsp;Graphics.FromImage(</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">this</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graphics1.Clear(Color.Transparent);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graphics1.DrawImage(original,&nbsp;0,&nbsp;0,&nbsp;width,&nbsp;height);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR></DIV></SPAN> <P>In questo modo non facciamo altro che applicare la best practice che consiglia di tenere impiegata una risorsa esterna per il minor tempo possibile.</P> <P>Ciao <IMG height=19 src="http://www.imhoproject.org/files/occhiolino.gif" width=19 align=absMiddle border=0></P> <P><A href="http://imhoproject.org/"><FONT face=Verdana size=1>powered by IMHO 1.3</FONT></A></P></FONT><!-- Powered by IMHO 1.3 (EN) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --> <img src="http://blogs.ugidotnet.org/Crad/aggbug/46016.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2006/08/09/46016.aspx Wed, 09 Aug 2006 14:25:00 GMT http://blogs.ugidotnet.org/Crad/archive/2006/08/09/46016.aspx#feedback 2 http://blogs.ugidotnet.org/Crad/comments/commentRss/46016.aspx Problemi con BindingSource a design time http://blogs.ugidotnet.org/Crad/archive/2006/08/06/45935.aspx <FONT face=Verdana size=2> <P>Oggi ho avuto una brutta sorpresa: lavorando con VS2005 ad un progetto WinForms, mi sono trovato nell'assoluta impossibilità di impostare il DataBinding da designer: ogni volta che provavo ad impostare la proprietà DataSource di un qualsiasi BindingSource, VS2005 sollevava una NullReferenceException, mostrava una bella message box con su scritto "Reference not set to an instance of an object" e buonanotte al secchio.</P> <P>Pistolando un po' qua e là, alla fine sono riuscito a venirne a capo: si tratta di un problema che si verifica quando si cambia il naming delle classi, quando cioé i file Xml contraddistinti dall'estensione <EM>.datasource</EM> non sono più allineati con le classi del nostro progetto. Per accorgersene, basta aprire la finestra delle DataSource e alcune di esse dovrebbero presentare un bel punto esclamativo nell'icona a fianco. Per risolvere il problema è sufficiente aggiornare manualmente l'xml o eliminare i file e poi rigenerarli.</P> </FONT> <FONT face=Verdana size=2><P><A href="http://imhoproject.org/"><FONT face=Verdana size=1>powered by IMHO 1.3</FONT></A></P></FONT><!-- Powered by IMHO 1.3 (EN) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --> <img src="http://blogs.ugidotnet.org/Crad/aggbug/45935.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2006/08/06/45935.aspx Sun, 06 Aug 2006 16:29:00 GMT http://blogs.ugidotnet.org/Crad/archive/2006/08/06/45935.aspx#feedback http://blogs.ugidotnet.org/Crad/comments/commentRss/45935.aspx A scuola di Drag'n Drop http://blogs.ugidotnet.org/Crad/archive/2006/08/05/45914.aspx Un semplice esempio di come implementare il Drag'n Drop nelle nostre Windows Forms C.p.l.<img src="http://blogs.ugidotnet.org/Crad/aggbug/45914.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2006/08/05/45914.aspx Sat, 05 Aug 2006 15:09:00 GMT http://blogs.ugidotnet.org/Crad/archive/2006/08/05/45914.aspx#feedback 2 http://blogs.ugidotnet.org/Crad/comments/commentRss/45914.aspx Wow, mi hanno moderato l'articolone su CodeProject! http://blogs.ugidotnet.org/Crad/archive/2006/05/12/40562.aspx <FONT face=Verdana size=2> <P>Oggi mi è arrivata una mail che mi annunciava che <A title="" href="http://www.codeproject.com/cs/miscctrl/CradsActions.asp" target="" name="">l'articolo</A> sulle <A title="" href="http://blogs.ugidotnet.org/crad/articles/38329.aspx" target="" name="">Crad's Actions</A> che ho pubblicato su <A title="" href="http://www.codeproject.com/" target="" name="">CodeProject</A> è stato moderato e non è più una <EM>unedited reader contribution</EM>.</P> <P>Questa sì che è una soddisfazione, considerando che è lì da meno di un mese e che molti articoli attendono il lavoro dell'editor da parecchio tempo in più! L'unico rammarico è che, d'ora in poi, non posso più modificarne il testo a piacimento, dato che ciò che invierò dovrà essere validato prima di andare online; peccato, perché proprio in questo weekend avrei voluto rilasciare un aggiornamento per correggere un paio di piccoli bug<IMG height=19 src="http://www.imhoproject.org/files/deluso.gif" width=19 align=absMiddle border=0>, vorrà dire che li pubblicherò in anteprima su UGI! <IMG height=19 src="http://www.imhoproject.org/files/occhiolino.gif" width=19 align=absMiddle border=0></P> </FONT> <FONT face=Verdana size=2><P><A href="http://imhoproject.org/"><FONT face=Verdana size=1>powered by IMHO 1.3</FONT></A></P></FONT><!-- Powered by IMHO 1.3 (EN) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --> <img src="http://blogs.ugidotnet.org/Crad/aggbug/40562.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2006/05/12/40562.aspx Fri, 12 May 2006 01:56:00 GMT http://blogs.ugidotnet.org/Crad/archive/2006/05/12/40562.aspx#feedback 1 http://blogs.ugidotnet.org/Crad/comments/commentRss/40562.aspx E le Actions se ne vanno su CodeProject http://blogs.ugidotnet.org/Crad/archive/2006/04/24/39280.aspx <FONT face=Verdana size=2> <P>Nei giorni scorsi ho ricevuto un feedback da un ceco (nel senso che abita in Repubblica Ceca <IMG height=19 src="http://www.imhoproject.org/files/risate.gif" width=19 align=absMiddle border=0>) che aveva scovato <A title="Crad's Actions" href="http://blogs.ugidotnet.org/crad/articles/38329.aspx" target="" name="">la mia piccola libreria</A> per puro caso, dicendo che secondo lui avrei dovuto metterla in un posto che le garantisse una maggiore visibiltà.</P> <P>Io e il mio inglese maccheronico ci siam messi al lavoro e ho partorito <A title="Crad's Actions on CodeProject" href="http://www.codeproject.com/useritems/CradsActions.asp" target="" name="">un articoletto</A> per <A title=CodeProject href="http://www.codeproject.com/" target="" name="">CodeProject</A>. Che dire, ricevere i primi rating positivi è una soddisfazione grandissima! Ora spero anche in qualche feedback in modo da poter evolvere il lavoro sin qui svolto.</P> </FONT> <FONT face=Verdana size=2><P><A href="http://imhoproject.org/"><FONT face=Verdana size=1>powered by IMHO 1.3</FONT></A></P></FONT><!-- Powered by IMHO 1.3 (EN) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --> <img src="http://blogs.ugidotnet.org/Crad/aggbug/39280.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2006/04/24/39280.aspx Mon, 24 Apr 2006 10:11:00 GMT http://blogs.ugidotnet.org/Crad/archive/2006/04/24/39280.aspx#feedback 1 http://blogs.ugidotnet.org/Crad/comments/commentRss/39280.aspx Attenti alla propriet&#224; DesignMode http://blogs.ugidotnet.org/Crad/archive/2006/04/23/39263.aspx <FONT face=Verdana size=2> <P>Chi sviluppa componenti con supporto al designer di VisualStudio, sicuramente si è trovato ad utilizzare la proprietà <A title=System.ComponentModel.Component.DesignMode href="http://msdn2.microsoft.com/en-US/library/system.componentmodel.component.designmode(VS.80).aspx" target="" name="">DesignMode</A> per verificare se il codice sia in esecuzione nel contesto del designer o a runtime.</P> <P>Bene, avevo un problema che mi ha portato ad indagare su come funzioni internamente questa proprietà. <A title=Reflector href="http://www.aisto.com/roeder/dotnet/" target="" name="">Reflector</A> alla mano ho scoperto che, in un <A title=System.ComponentModel.Component href="http://msdn2.microsoft.com/en-US/library/system.componentmodel.component.aspx" target="" name="">Component</A>...</P> <DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro"><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">protected&nbsp;bool&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">DesignMode<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">get<BR>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISite&nbsp;site1&nbsp;=&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">this</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">.site;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">if&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">(site1&nbsp;!=&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">null</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">return&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">site1.DesignMode;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">return&nbsp;false</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR></DIV></SPAN> </FONT> <FONT face=Verdana size=2><P>Ora... premesso che, se utilizziamo VisualStudio, a design time il field <EM>site</EM> è un'istanza di <EM>System.ComponentModel.Design.DesignerHost.Site</EM> e che quel <EM>site1.DesignMode</EM> ritorna sempre <EM>true</EM>, c'è da fare un'importante considerazione: <STRONG>durante l'esecuzione del costruttore del Component, DesignMode è SEMPRE false</STRONG>, perché il corrispondente Site non è stato ancora assegnato.</P> <P>Inutile dire che ci ho sbattuto il muso poche ore fa <IMG height=19 src="http://www.imhoproject.org/files/risate.gif" width=19 align=absMiddle border=0>, ma senza averlo fatto magari non sarei venuto a conoscenza di questa sfumatura!</P> <P><A href="http://imhoproject.org/"><FONT face=Verdana size=1>powered by IMHO 1.3</FONT></A></P></FONT><!-- Powered by IMHO 1.3 (EN) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --> <img src="http://blogs.ugidotnet.org/Crad/aggbug/39263.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2006/04/23/39263.aspx Sun, 23 Apr 2006 11:48:00 GMT http://blogs.ugidotnet.org/Crad/archive/2006/04/23/39263.aspx#feedback http://blogs.ugidotnet.org/Crad/comments/commentRss/39263.aspx SetCompatibleTextRenderingDefault: cusa l'&#232;? http://blogs.ugidotnet.org/Crad/archive/2006/04/19/38998.aspx <FONT face=Verdana size=2> <P>Sicuramente tutti voi avrete notato che, nel template utilizzato da&nbsp;VS2005 per il metodo main dei nostri progetti windows forms, c'è una riga che recita</FONT></P> <P><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">Application.SetCompatibleTextRenderingDefault(</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">false</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">);<BR></SPAN> </P> <FONT face=Verdana size=2><P>Di cosa si tratta? L'ho scoperto ieri sera, cercando di utilizzare anche in C# la classe <A title=WindowsFormsApplicationBase href="http://msdn2.microsoft.com/en-us/library/microsoft.visualbasic.applicationservices.windowsformsapplicationbase(VS.80).aspx" target="" name="">WindowsFormsApplicationBase</A>: è una nuova feature delle classi&nbsp;che ereditano da Control del Fx 2.0 e consiste nella capacità di utilizzare GDI piuttosto che GDI+ per il rendering del testo.</P> <P>Come mai? Beh, GDI+ ha la peculiarità di avere API estremamente semplici da utilizzare, ma il buon vecchio GDI offre parecchi vantaggi, per esempio:</P> <UL> <LI>Il look dell'applicazione è più consistente con le varie altre dialogs del sistema operativo</LI> <LI>C'è un migliore supporto per la localizzazione e per il rendering dei caratteri unicode</LI> <LI>Il rendering è molto più veloce e può sfruttare anche l'accelerazione hardware</LI></UL> <P>Per avvalersene bisogna, per l'appunto, invocare il metodo sopra citato con il parametro "false". Ultima nota, per chi sviluppa custom controls o utilizza l'OwnerDrawing: quando ci si trova a dover effettuare il rendering di un testo, in luogo dei metodi MeasureString e il DrawString dell'oggetto <A title=System.Drawing.Graphics href="http://msdn2.microsoft.com/en-US/library/system.drawing.graphics(VS.80).aspx" target="" name="">Graphics</A>, bisogna utilizzare gli analoghi <A title=MeasureText href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.textrenderer.measuretext(VS.80).aspx" target="" name="">MeasureText</A> e <A title=DrawText href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.textrenderer.drawtext(VS.80).aspx" target="" name="">DrawText</A> della classe <A title=System.Windows.Forms.TextRenderer href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.textrenderer(VS.80).aspx" target="" name="">TextRenderer</A>.</P> <P>Altre info&nbsp;si trovano&nbsp;a <A title="" href="http://blogs.msdn.com/jfoscoding/archive/2005/10/13/480632.aspx" target="" name="">questo link</A> e a <A title="" href="http://blogs.msdn.com/michkap/archive/2005/06/27/432986.aspx" target="" name="">quest'altro</A>.</P> <P><A href="http://imhoproject.org/"><FONT face=Verdana size=1>powered by IMHO 1.3</FONT></A></P></FONT><!-- Powered by IMHO 1.3 (EN) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --> <img src="http://blogs.ugidotnet.org/Crad/aggbug/38998.aspx" width="1" height="1" /> Marco De Sanctis http://blogs.ugidotnet.org/Crad/archive/2006/04/19/38998.aspx Wed, 19 Apr 2006 14:19:00 GMT http://blogs.ugidotnet.org/Crad/archive/2006/04/19/38998.aspx#feedback 1 http://blogs.ugidotnet.org/Crad/comments/commentRss/38998.aspx