quarta-feira, 30 de setembro de 2009

Zoom de ecrã em apresentações (revisitado)

Num post anterior eu apresentei-vos uma ferramenta que uso com frequência nas minhas apresentações, o ZoomIt. Também já vos falei das minhas aventuras e desventuras com o meu computador nas férias passadas. Quem me conhece sabe que embora eu seja um grande entusiastas destas "coisas dos computadores" a verdade é que demoro algum tempo a aderir aos últimos gritos na área. Enquanto estiver satisfeito com o que tenho dificilmente enveredo por novas andanças.

A última vez que isto me aconteceu, passaram 3 anos e perdi o contacto maravilhoso com o Windows Vista. Quer isto dizer que... sim ;) é verdade estou a usar o Windows 7. Até me sinto mais jovem e tudo! Mas vamos ao que interessa.

O Windows 7 vem de raiz com uma pequena ferramenta que permite fazer zoom do ecrã que é fantástica para fazer apresentações (em especial quando se trata de mostrar código em salas relativamente grandes). Bem sei que os SO concorrentes já o fazem à décadas, mas quando se de copiar, ... há que copiar bem! Bom e já agora ficam os atalhos para a sua utilizar. Para abrir a aplicação "tecla windows" e "tecla +", para ampliar "tecla windows" e "tecla +" e para diminuir: "tecla windows" + "tecla +".


Abraços.

sábado, 26 de setembro de 2009

Passagem de valores entre Forms em aplicações Windows em C#

Colocaram-me a questão de como passar valores entre janelas numa aplicação Windows em C#. Como trabalho substancialmente para a web não soube responder imediatamente, mas uma pesquisa no Google fez-me chegar rapidamente a uma solução. Este é um daquele tipo de coisas que pode ter muitas soluções, é caso para se aplicar o velho ditado "Cada cabeça, sua sentença"!

A solução que apresento é tão válida como outra qualquer, desde que responda à questão/problema inicial: "Como passar valores entre forms?".

Sendo que todos os forms são objectos e observando que o construtor é fundamental para o arranque do form (já que é ele quem invoca o método InitializeComponent() definido na parte Designer.cs dos forms, podemos usar precisamente o construtor para passar valores de um form para o outro.

Vamos "esmiuçar" (Gatos, gatos... o que vocês andam a fazer à sociedade portuguesa!) isto com mais cuidado. Vou criar uma Windows Application em C# com 2 forms com as designações por omissão dadas pelo Visual Studio (Form1 e Form2). Cada um destes Forms correspondem a uma classe que o VS subdivide em 2 partes, uma parte gerida pelo próprio ide (o ficheiro Form1.Designer.cs) e a outra parte que habitualmente usamos para tratar os eventos do form.


O Form1 vai conter uma caixa de texto e um botão que ao ser premido passará o valor escrito na caixa de texto para o Form2. Portanto o Form1 irá conter 2 controlos o textBox1 e o button1, o Form2 conterá apenas um label, o label1.

No Form2 vamos fazer o overload do construtor (uma característica importante da POO, que pode ser traduzido pela propriedade de podermos ter numa mesma classe diversos métodos com o mesmo nome, mas desde que cada uma das versões tenha uma lista de parâmetros diferente), por forma a passar como parâmetro o form1.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

public Form2(Form1 frm): this()
{
label1.Text = frm.txt1.Text;
}
}
}



Desta forma, ao instanciarmos um objecto de Form2 podemos opcionalmente indicar que queremos passar para esse objecto um objecto da class Form1.

Agora podemos através do objecto frm na classe Form2 percorrer os controlos de Form1 ou então podemos tornar o objecto textBox1 do form1 como público! Podemos fazer isso facilmente trocando o acesso no ficheiro Form1.Designer.cs de privado para público Acrescentando uma propriedade pública ao Form1 correspondente ao controlo textBox1 (este método é mais seguro, já que não se alteram partes do código gerados pelo Visual Studio):


Agora no Form2 aceder à textBox1 do form1 é mais simples que descascar uma banana!




public Form2(Form1 frm): this()
{
label1.Text = frm.txt1.Text;
}



Agora já só falta associar ao evento click no form1 a abertura do form2:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2(this);
f2.Show();
}
}
}



O espectacular resultado final é este:


Um abraço e boas programações!

sexta-feira, 18 de setembro de 2009

Descobri a API Google Visualizations e quase chorei!

Num dos meus últimos projectos precisei de representar grandes quantidades de dados numa forma gráfica (que aliás é como deve ser!). Depois de muito procurar e de infindáveis tentativas falhadas, ora porque o resultado não presta, ora porque não funcionava no IE, ora porque isto, ora porque aquilo, acabei por me render à livraria de John Glazebrook, a Open Flash Chart, mas confesso que não obstante a livraria ter muita qualidade o resultado não me deixou satisfeito, porque me obrigava a fazer muitas coisas para obter resultados, ainda que bonitos, no mínimo considero-os pouco funcionais.

Foi neste estado de ansiedade e insatisfação que me encontrei de novo à procura de novas soluções e encontrei finalmente a Google Visualization API. Eu sei que por vezes pode parecer que eu exagero na animosidade com que falo das coisas, mas esta API é de facto um verdadeiro colosso! É extraordinária a simplicidade com que se conseguem desenhar gráficos fabulosos e mais excepcional é a forma ridiculamente simples de o conseguir.

Fica mais um link para os exemplos disponibilizados... vejam e babem!

domingo, 6 de setembro de 2009

Thunderbird e Google Calendar os meus novos melhores amigos!

O meu computador morreu nestas férias. Foram 3 anos de boa convivência e, embora tenha reclamado dele desde o primeiro dia, a verdade é que este HP DV4000 é uma máquina de guerra. Vai certamente deixar saudades, ou quiçá encontrar novas funcionalidades... a avaria foi ao nível da mother board, mas é possível que ainda a consiga consertar. Bom, o que é certo é que eu não consigo viver sem um computador devidamente kitado com o software certo, por isso já estou a teclar num novo Toshiba. Trata-se de uma máquina de arquitectura muito recente mas entrada de gama. Optei por este propositadamente para ver o que consigo fazer com uma máquina destas. Até ver... muito! Mas chega de conversa vamos ao que realmente interessa.

Sou dependente. Dependo do meu email e agenda como da água para viver! A passagem dos meus contactos e configurações diversas no Outlook foi um autentico desastre. Reparem, eu tinha backups de toda a informação no formato proprietário (?!) da Microsoft, mas não me serviu de nada porque o novo Live Mail não gostou dos PST do Outlook 2003. Resolvi experimentar o Thunderbird. Confesso que as minhas experiências no passado com ele não foram as melhores, mas desta vez estava determinado. Depois de uns dias a tentar importar dados para o Live Mail sem sucesso, se dúvidas houvessem estavam dissipadas. 

A importação de dados no Thunderbird também não foi pacífica, mas o perfil de utilizador no Thunderbird é ridiculamente simples de partilhar. Basta copiar a informação de uma pasta de uma máquina para outra! Num dia de sorte lá consegui fazer o meu velho HP funcionar por uns minutos, instalei um Thunderbird portable e importei os dados de emails locais, contactos e agenda. Depois já na máquina nova bastou-me copiar os dados do perfil "et voilá"! Só isto já me fez render ao Thunderbird, mas havia mais uns truques na manga. 

Eis que descobri que é possível sincronizar a agenda do Thunderbird com o Google Calendar - ouro sobre azul. Agora posso aceder ao meu calendário na nuvem ou em casa no conforto do meu Thunderbird.

Só mais uma nota, se tivermos vários sistemas operativos, porque o Thunderbird está disponível para vários SO, podemos partilhar o perfil do Thunderbird e usá-lo nos vários SO. Isto é notável! Há no entanto uma ressalva, o Linux não se dá bem com partições NTFS, pelo que o ideal é criar uma partição FAT32 e colocar aí o perfil de utilizador do Thunderbird, para que possamos usá-lo em qualquer SO!


terça-feira, 1 de setembro de 2009

A importância da prototipagem

Em todos os projectos em que nos envolvemos devemos ter o cuidado de os documentar cuidadosamente. O desenvolvimento de sistemas de informação não é excepção. Eu diria até que um projecto de SI é bem sucedido se tiver um bom dossier de documentação.

Há imensas metodologias e tecnologias que ajudam a suportar as necessidades de documentação de projectos de SI. o artigo anexo apresenta algumas soluções interessantes para o desenho de protótipos de interfaces que podem ser muito úteis numa perpectiva mais voltada para o design dos sistemas e não tanto na engenharia dos mesmos.

http://www.onextrapixel.com/2009/07/15/the-importance-of-wireframes-in-web-design-and-9-tools-to-create-wireframes/