quinta-feira, 23 de setembro de 2004

Mostrar um DIV sobre um SELECT, impossivel?

Qualquer um que já tenha feito meia duzia de páginas web na vida com alguns recursos de DHTML já se passou por esse problema, o elemento <SELECT> fica na frente de qualquer outro elemento no Microsoft Internet Explorer. Não tem jeito, o elemento <SELECT> não entende o zIndex no engine da Microsoft!

E eu, assim como todo mundo, sabia que era impossível resolver esse problema. Então, fui ler alguns documentos na MSDN para tentar entender o problema e percebi como é confuso e ruim esse engine de páginas do Microsoft Internet Explorer. Vamos as conclusões:
  • O <SELECT> não entende o zIndex, e é o zIndex que faz o posicionamento para frente e para traz dos elementos na tela. Bem, isso todo mundo já sabe, e esse é o problema, mas é por ai que ascoisas realmente irão ficar estranhas.
  • O <IFRAME> entende o zIndex como qualquer outro elemento HTML, só que o <IFRAME> tem uma propriedade especial, que ele consegue ficar na frente do <SELECT> desde que tenha um zIndex maior que o do <SELECT>, e lembre-se que eu disse que o <SELECT> não entende o zIndex, e realmente não entende, tá na documentação, mas nesse caso, pense que ele entende :). Então nessa hora pensei: Eu tenho um cachorro, e ele se chama BINGO!!!!!!
  • Agora vem a parte mais estranha, o <IFRAME> consegue ficar na frente do <SELECT>, e o <IFRAME> entende o zIndex como todos os outros elementos, então meu amigo, olha a confusão, se você colocar um <IFRAME> sobre um <SELECT> e colocar um <DIV> sobre o <IFRAME> com um zIndex maior que todos os outros elementos, SUA <DIV> VAI FICAR NA FRENTE DO <SELECT>. Ai está a solução para um dos problemas mais bizarros da humanidade.
Eu fiz uns testes e ficou perfeito. Nunca mais vou ter problema com os malditos combos. Realmente valeu a pena todo o trabalho que eu passei pra entender primeiro, como funcionava as páginas da MSDN e depois para entender o MSHTML e descobrir que ele é pior do que eu pensava.

Nos meus testes coloquei um iframe oculto na página:
<iframe id="iFrameMenu" src="" style="visibility: hidden; position: absolute; z-index: 2;"></iframe>

Criei o como com um zIndex menor:
<select id="combo" style="z-index:1" >

O <DIV> do menu eu criei normal, só que na hora de mostrar eles na tela a jogada é colocar o <IFRAME>, na mesma posição do <DIV> com a mesma altura e larguro, e com um zIndex menor. Neste caso, o <DIV> vai esconder completamente o <IFRAME> e vai parecer que ele nem existe. Só que, se por algum motivo alheio a nossa vontade, tiver um <SELECT> no mesmo espaço onde ta o <DIV>, o <IFRAME> vai fazer com que o <SELECT> fique atraz do <DIV> que está na frente.

É enrolado, mas é isso, para entender melhor, de uma olhada nesse exemplo. Para complicar um pouco mais, nesse exemplo eu coloquei o <SELECT> dentro de outro <IFRAME>.

E pronto meu amigo, seus problemas com o <SELECT> acabaram! Eu realmente odiava muito ter que esconder os um monte de campo quando abria um menu. Já vi situações em que a tela toda ficava escondida quando se abria o menu somente por causa desse problema.

E eu ainda fico pensando, as vezes me passa pela cabeça que o Bill Gates é uma lenda urbana, e a Microsoft é na verdade meu visinho de 16 anos que passa o dia e a noite programando e não ganha dinheiro porque todo mundo pirateia o Windows. Como pode uma empresa que diz ter milhoes e sem saber o que fazer com o dinheiro não resolver um problema desses que incomoda tanta gente? Eu sinceramente não sei a resposta, mas tenho uma coisa a dizer: Seja Feliz!

quinta-feira, 16 de setembro de 2004

Python, você ainda vai programar com ele

Se você ainda não conhece Python, corra para www.python.org e comece a brincar com ele. Python é legal, é facil, é orientado a objetos, é rápido, roda em quase todos sistemas operacionais e é grátis e de código aberto.



Tenho feito várias coisinhas em Python, e estou gostando muito, ultimamente tenho brincado com a libgmail, que é uma biblioteca que me permite manipular minha conta no gmail atravéz do python.



Uma coisa que me incomoda são as comparações do python com outras linguagens utilizando o critério: "Python é melhor porque faz a mesma coisa em menos linhas de código". Ai eu pergunto, será que uma linguagem é melhor que outra simplesmente pela quantidade de código necessário para desenvolver algo? Eu realmente acho que não! Pegar trechos de código em duas linguagens e com esses argumentos decidir qual a melhor pra mim é burrice, e chega até a ser engraçado. Com certeza Python tem muitas vantagens em relação a Java, C++, C#, mas são necessários dados mais concistentes para fazer as comparações. Em um sistema que vai controlar uma empresa que fatura 10 milhões de reais por mês, a quantidade de linha de código é o fator mais importante? Estar disponivel, fácil manutenção, facilmente escalavel, suporte da industria e mais um monte de itens que devem ser levados em consideração não seriam requisitos mais importantes? Ficam essas perguntas.



Também estou tentando fazer alguma coisa em python para web, confesso que não estou tendo muito sucesso, mas certamente é falta de conhecimento meu. Existem muitas ferramentas para desenvolvimento de python para web, e eu destaco o WebWare e o mod_python. Vale a pena dar uma olhada.



Eu acredito que python tenha um futuro promissor. Tenho visto cada vez mais aplicativos desenvolvidos em python com finalidades bem diferentes. Sinto falta ainda de uma ferramenta de desenvolvimento poderosa, que eu possa utilizar todo o poder do python mais facilmente, mas com certeza, logo logo existirão várias dessas por ai.

sexta-feira, 3 de setembro de 2004

Gmail Invitations Fest!

Para quem ainda não sabe. O Gmail é o webmail do Google. Ele oferece 1.000 MB (1 GB) de espaço pra guardar os e-mails e uma interface inovadora.



Como ele ainda é beta, para se cadastrar é necessário receber um convite de alguém que já está cadastrado. E os convites são limitados, diferente do orkut que quem se cadastra pode convidar quantas pessoas quizer.



Nos ultimos dias o Google tem sido bastante gentil e está disponibilizando bastante convites, e por isso estou promovendo a Gmail Invitations Fest e para ser convidado* basta enviar um pedido para redbrain@gmail.com informando em qual e-mail você quer receber o convite. Não é necessário pagar nada, nem ser meu amigo, nem fazer nenhum favor. Mas terá que ficar eternamente agradecido. Mais uma coisa: aproveite, mas não abuse!



* Promoção válida enquanto durarem os estoques.