sábado, 20 de febrero de 2010

UserControls transparentes en WinForms

Aunque esto es pan comido en WPF, en WinForms las transparencias son algo confusas y no hay builtins correctamente diseñados para trabajar con ellas.

Si agregamos un Label sobre una PictureBox y ponemos la propiedad BackColor del Label como transparente… simplemente nada sucede…

image

Una solución a esto es crear nuestro propio control TransparentLabel que herede de Label el código sería algo así.

Public Class TransparentLabel

    Inherits Control

 Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams

        Get

            'Creamos una instancia de create params

            'a partir de la base y cambiamos su propiedad

            'ExStyle a nulo

            Dim params As CreateParams = MyBase.CreateParams

            params.ExStyle = &H20

            Return params

        End Get

    End Property

 Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs)

        'MyBase.OnPaintBackground(pevent)

        'Con esto anulamos el evento de Paint Background

    End Sub

 Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)

        'Creamos una brocha del color de la fuente original y dibujamos sólo

        'el texto...

        Dim newBrush As SolidBrush = New SolidBrush(ForeColor)

        e.Graphics.DrawString(Text, Font, newBrush, -1, 0)

    End Sub

End Class

Y listo, ya tenemos nuestro propio label transparente.

Pero que pasa cuando tenemos un UserContol sobre la imagen, aunque usemos nuestro TransparentLabel en él, no funcionara ni aún poniendo el fondo del UC como Transparent…

image

Así que hay que modificar el user control así.

Public Class UserControl1

     Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams

        Get

            Dim params As CreateParams = MyBase.CreateParams

            params.ExStyle = &H20

            Return params

        End Get

    End Property

Protected Overrides Sub OnPaintBackground(ByVal e As System.Windows.Forms.PaintEventArgs)

        'MyBase.OnPaintBackground(e)

    End Sub

 End Class

Y finalmente tenemos ambas cosas, un TransparentLabel y un User Control Transparente también.

image

Esta vez el código en VB porque hay menos ejemplos de VB de esto en la web.

Saludos!

miércoles, 17 de febrero de 2010

Sabiduría de Yahoo Parte 2

Esta bella comunidad sigue iluminando los senderos oscuros de la humanidad, en esta la era de la información.

#1 ¿y puedo estar . con mi periodo aun enbarazada?

image

Hay Cindy, pues con esa ortografía puedes terminar hasta con SIDA por tontuela…le creíste que no pasaba nada jajaja

#2 ¿Existe esa persona verdadera que sea capaz de decir que me ama?

image

Don Daniel, ya se ve usted medio grandecito para pensar en eso, esas niñas que ve en Internet no lo quieren y si sigue usando su tarjeta de crédito para verlas se va a deprimir más.

#3 En que afecta a los pajaros si las vivoras de cascabel se extinguieran?

image

Lo preocupante sobre los pájaros no es la extinción de la víboras, sino lo que le pasaría a muchos pájaros de extinguirse las zorras…

#4 Ví una cucaracha blanca, existe?

image

Paquita vio una vez una rata de dos patas, Silvio Rodríguez veía unicornios, hasta los de risa en vacaciones veían elefantes rosas, una cucaracha blanca? why not! yo me pregunto esta gente nunca habrá escuchado hablar de una pagina que se llama mmm, empieza con w….pero no es muy conocida…mmm wikipedia creo se llama ¬¬

# 5 ¿que es lo peor te a pasado en toda tu vida?

image 

Bueno, si me preguntas a mi pues estoy entre la decapitación de una tía, haber quedado huérfano a los 2 meses, cuando me dejaron en Siberia un mes sin cobijas o quizá Yahoo answers!

Pero bueno quizá yo no he vivido mucho y mi comodina vida urbana a sido poco comparado con estas terribles experiencias…

image

Pobre Nelia, debió sufrir mucho, así como si fuera de película, espeluznante.

image

Esto si está cruel, mira que tener tele nueva y que se te descomponga, que hizo después? como pudo seguir viviendo así? sólo lo confortaba la promesa de la venida de nuestra señora la garantía… =’(

image

Y ps esta muchacha lo peor que le pasó fue no entender las preguntas de Yahoo Answers, esto arroja un IQ de 12, apenas superior al de la cucaracha blanca, aparte de ser emo, mentira pues que Dios no castiga dos veces =’(

Ya me deprimí con estas cosas tan tristes, adiós.

Saludos

martes, 16 de febrero de 2010

Por si me muero…

Ps ya faltan menos de dos años para que se acabe el mundo, pero si me carga el payaso antes ahí les encargo el siguiente epitafio.

programador

Saludos!

viernes, 23 de octubre de 2009

Mi primer día con Windows 7

Hoy se entregó oficialmente al mercado el nuevo Windows 7 del que se han hablado tantas cosas y que parece por fin arreglar todos los inconvenientes que tenía Vista…Hoy a sido mi primer día usando Windows 7, aquí les dejo las cosas para las que me alcanzó el primer día y que ya sin duda me hacen ver que me harán tener una mejor experiencia que con Vista.

Performance: Aunque tampoco es algo milagroso si se siente mas “ligero” que Vista se ven menos esos interminables cursores de espera y ya no piensa tanto para hacer las cosas…al menos eso parece primera Vista.

Calculadora: Puede parecer algo menor, pero creo que ya era tiempo de que Microsoft le hiciera justicia a está tan popular utilería… entre las cosas nuevas es que tiene dos tipos nuevos (programmer y estadística) además del estándar y científica así como una sección de historial y un track de las operaciones que has realizado para llegar a un resultado

 image

Paint: Otro que se mejoró con todo y su Ribbon a la Office 07…image

La TaskBar:

image 

Lo nuevo aquí es que puedes hacerle un “pin” que es como  agregar un tipo menú de acceso rápido, bastante útil, además de que aparece un pop-up con las instancias de esa misma aplicación.

Los backgrounds intercambiables: Ahora puedes crear un tema que contiene una serie de imágenes que pueden ir cambiando aleatoriamente cada determinado tiempo y así tener un tipo de slideshow en el desktop.

Los jumplist:

image

En el menu de inicio ahora además de tener las aplicaciones favoritas cerca podemos poner el cursos sobre esas flechas y ver la lista de los archivos mas recientes que han sido manipulados por ese programa en particular… (Disculpen esa rola de la emo de Avril Lavigne era la primera en la lista del media center).

Resource Monitor: Fue esta utilería lo que más disfrute de Vista y en 7 hace de nuevo su aparición con algunas mejoras, especialmente en la sección de memoria donde se muestra gráficamente el estado de la RAM.

image

Y también la sección de Networking, donde podemos revisar las conexiones TCP así como los puertos que están escuchando y saber específicamente que programas están utilizando recursos de Red…este resource monitor es de hecho también mi antivirus ñ_ñ

image

Snipping Tool: Otra utilería que faltaba y que le viene bien al Win 7 es está que te permite capturar pantallas y aunque hay varias mejores en el mercado, la que se incluye con este OS está bastante decente.

image

Y pues esto es lo más destacado que encontré en las primeras horas de uso con Win 7, esperemos a ver que otras monerías encontramos.

Nota: Yo lo instalé como Upgrade a Vista y funciona muy bien, ninguna de mis aplicaciones dejo de funcionar, ningún driver, no hubo problemas de compatibilidad, a pesar de que marcaba un warning con iTunes no pasó nada.

Saludos!

jueves, 8 de octubre de 2009

Polymorphism for dummies


(aka: Polimorfismo pa los pasguatones)
No deja de sorprenderme las cosas que los reclutadores o head hunters les preguntan en entrevistas a candidatos para desarrolladores senior en Java o .NET.

Ya van varias veces que me toca reírme de experiencias de amigos que fueron cuestionados sobre cosas tan básicas como “Qué es herencia?”, “Permite C# herencia múltiple…y Java?”, “Una clase sealed se puede heredar?”… Todas estas cosas son preguntas que un candidato a ese puesto debería considerar sencillas y casi rayar en lo grosero.

Sin embargo hay varios amigos que los han agarrado en curva con la pregunta “Cómo defines tú el polimorfismo?” y siendo uno de los pilares de la OOP es elemental entenderlo. Sin embargo aunque muchos entienden como usarlo, la definición se torna complicada aún para los “expertos”.
He aquí pues una breve reseña del polimorfismo narrada en “mexicano” para los que les de flojera entender lo que encuentran en Google o que simplemente encuentran los textos y ejemplos muy aburridos y difíciles.

Así lo dijo Wikipedia
In computer science, polymorphism is a programming language feature that allows
values of different data types to be handled using a uniform interface. The
concept of parametric polymorphism applies to both data types and functions. A
function that can evaluate to or be applied to values of different types is
known as a polymorphic function. A data type that can appear to be of a
generalized type (e.g., a list with elements of arbitrary type) is designated
polymorphic data type like the generalized type from which such specializations
are made.

Parece muy largo para una definición…así que sigamos buscando algo más sencillo

Ven los pajaritos que están en la imagen de arriba (sin albur), bueno pues ahí está el ejemplo más claro de polimorfismo y que la naturaleza nos deja apreciar gratis. Es fácil darse cuenta que las tres aves son de la misma especie, sin embargo sus colores y plumaje varia un poco esto los hace diferentes unos de otros, eso es el polimorfismo.

Tenemos una clase base Humano que será abstracta, en nuestro ejemplo esto significa que todas aquellas acciones que puede hacer un humano pueden ser redefinidas por sus clases concretas, es decir los tipos de humanos que definamos, en el ejemplo serán 2 clases de humanos: Hombre y Mujer

Hay una publicidad de cerveza muy buena que usaré como ejemplo.

Este será nuestro método HaveSex


Este otro es el GoToBathroomWhileParty



Y por ultimo el HaveDrink




Esta es la definición de nuestra clase base.

using System;
using System.Collections.Generic;
using System.Text;

namespace Polymorphism
{
public abstract class Human
{
public abstract void HaveSex();
public abstract void GoToBathroomWhileParty();
public abstract void HaveDrink();
}
}


Hombres y mujeres hacemos las mismas cosas pero vean como lo hace un hombre


using System;
using System.Collections.Generic;
using System.Text;

namespace Polymorphism
{
class Man : Human
{
public override void HaveSex()
{
DrinkBeer();
GetGirl();
GetBed();
}

public override void GoToBathroomWhileParty()
{
DrinkBeer();
FindBathroom();
TakeALeak();
}



public override void HaveDrink()
{
JustGoGetIt();
}
}
}


…Y como lo hace una mujer


using System;
using System.Collections.Generic;
using System.Text;

namespace Polymorphism
{
class Women:Human
{
public override void HaveSex()
{
SexRating howGoodisHe;
FindADrink();
FindABoy();
howGoodisHe = FindBed();
switch (howGoodisHe)
{
case SexRating.Gentleman:
GetRomanticDate();
WaitRing();
GetMarried();
HaveAFamily();
break;
case SexRating.Heartbreaker:
HaveAnIceCream();
break;
case SexRating.JustSex:
WaitForCall();
FindItWasJustSex();
HaveAnIceCream();
break;
}
}

public override void GoToBathroomWhileParty()
{
Boolean isEnoughPaper = false;
FindADrink();
WaitsASit(new TimeSpan(0,10,0)); //Ten minutes!
TalkSillyThingWithFriend(new TimeSpan(0, 5, 0)); // Five minutes!
if (isEnoughPaper)
CleanYourSit();
else
DontEvenTouchTheSit();
WaitYourSillyFriend();

}

public override void HaveDrink()
{
Boolean HasBeenThreeHours= false;
while (!HasBeenThreeHours)
{
TryToGetDressed();
}
ChooseADrink();
}

enum SexRating
{
Gentleman,
Heartbreaker,
JustSex
}


}
}


Esto es un claro ejemplo de polimorfismo, ambos géneros hacemos lo mismo, pero vaya que hay “implementaciones” complicadas.

Dicho esto podemos decir del polimorfismo:

Es la capacidad de una clase concreta para renegar de la voluntad de su clase abstracta padre y hacer las cosas como se le pegue la gana.


Ya por último me atrevo a medio recomendar esto, un ejemplo grotesco…pero eficaz y cuando aprendes a programar a los 17, este tipo de ejemplos sin duda ayudan bastante.


Saludos!