16
Ene

Página de inicio

Para quienes navegan con frecuencia en Internet, el tener una forma rápida de acceder a los sitios que visitan regularmente es casi una necesidad, y esta es una opción más.

Es una sencilla página HTML que usa CSS (Hojas de Estilos en Cascada) para darle un aspecto agradable a los hipervínculos. Se puede usar una imagen diferente para cada uno, haciendo más fácil su identificación.



Código

inicio.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Links</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<style>


body {
	color:#999;
	background-color:#000;
	background-image:url(bg_main.gif);
	font-family: Geneva, Arial, Helvetica, sans-serif;
	font-size: 13px;
}

#links li {
	color:#999;
	float:left;
	height:113px;
	list-style-type: none;
	margin-right:20px;
	margin-bottom:20px;
	text-align:center;
	width:150px;
}

#links li a {
	background-color:#333;
	background-repeat:no-repeat;
	border:solid 1px #999;
	color:#999;
	display:block;
	height:113px;
	text-decoration:none;
	width:150px;
}

#links li div {
	margin-top:4px;
}


/*

Ruta a la imagen que corresponda a cada link, de acuerdo al Id que se le haya asignado
Se espera que las dimensiones de la imagen sean de 150 x 113 (ancho y alto)
Si no se asigna ninguna imagen, el link se mostrará como un cuadro gris con las dimensiones pre-establecidas

*/

#link_1 {background-image:url(img/youtube.jpg);}
#link_2 {background-image:url(img/facebook.jpg);}

</style>



</head>

<body>
	<h2>Links</h2>
	<ul id="links">
		<li><a href="http://youtube.com" id="link_1" title="YouTube">&nbsp;</a><div>YouTube</div></li>
		<li><a href="http://facebook.com" id="link_2" title="Facebook">&nbsp;</a><div>Facebook</div></li>
	</ul>
</body>
</html>

18
Dic

Imprimiendo desde Visual Basic 6 usando WebBrowser control

Esta técnica permite imprimir desde Visual Basic 6 usando el WebBrowser control disponible en Windows.

Básicamente lo que se hace es generar un string en formato HTML que contenga lo que se desea imprimir, se asigna el string al document.body del objeto y se hace una llamada al método execCommand, pasándole los parámetros "Print" y True.

Los pasos serían los siguientes:

1) Agregar al proyecto de Visual Basic las referencias a las bibliotecas Microsoft HTML Object Library y Microsoft Internet Controls
2) Crear un WebBrowser control en uno de los objetos Form
3) Declarar una variable de tipo HTMLDocument en la sección General del objeto Form
4) Establecer la variable de tipo HTMLDocument en el evento DocumentComplete del objeto WebBrowser
5) Crear el string en formato HTML
6) Asignar el string al document.body del objeto HTMLDocument
7) Ejecutar el método execCommand, para mandar el contenido a la impresora

Código

Form1
Dim oDocument As HTMLDocument

Private Sub Command1_Click()
    oDocument.body.innerHTML = "<h1>Hello World</h1>"
    oDocument.execCommand "Print", True
End Sub

Private Sub Form_Load()
    WebBrowser1.Navigate2 "about:blank"
End Sub

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    Set oDocument = WebBrowser1.Document
End Sub


14
Dic

Leyendo el valor del atributo background-color con javascript

Obtener el valor del atributo background-color usando javascript es algo diferente a simplemente asignarlo, porque depende de la implementación del navegador de internet y puede resumirse a 2 formas de hacerlo (en el ejemplo, obj representa al elemento del que queremos leer el valor del atributo background-color):

1) obj.currentStyle.backgroundColor;

2) document.defaultView.getComputedStyle(obj, '').getPropertyValue("background-color");

En el primer caso, el valor es hexadecimal, por ejemplo #FFFFFF. En el segundo, el valor está en el siguiente formato: rgb(0,0,0).

En el código de ejemplo, la función getBackgroundColor solo necesita el id del objeto del cual se quiere saber el valor hexadecimal (sin el signo #) del atributo background-color. Se utiliza una función escrita por top54u.com para convertir valores RBG a Hexadecimal.


Código

getBackgroundColor
function getBackgroundColor(objId) {
	var color = "";
	var obj = document.getElementById(objId);
	if (obj) {
		if(obj.currentStyle) {
			color = obj.currentStyle.backgroundColor;
			color = color.replace(/#/g, "");
		} else {
			color = document.defaultView.getComputedStyle(obj, '').getPropertyValue("background-color");
			color = color.replace("rgb(", "");
			color = color.replace(")", "");
			color = color.replace(" ", "");
			color = toRGBHex(color);
		}
	}
	return color;
}

function toRGBHex(num)
{

//	by top54u.com

	var decToHex="";
	var arr = new Array();
	var numStr = new String();
	numStr = num;
	arr = numStr.split(",");
	for(var i=0;i<3;i++)
	{
	var hexArray = new Array( "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" );
	var code1 = Math.floor(arr[i] / 16);
	var code2 = arr[i] - code1 * 16;
	decToHex += hexArray[code1];
	decToHex += hexArray[code2];
	}
	return (decToHex);
}
10
Dic

array_combine para PHP4

array_combine() es una función de PHP5 que crea un array combinando dos arrays distintos, en el cual el primer array contiene las "llaves" y el otro los valores. En PHP4 no existe un equivalente directo, pero se puede lograr el mismo resultado usando objetos y funciones de PHP4.

Código

array_combine
if (!function_exists('array_combine'))
{
	function array_combine($arr_1,$arr_2) {
		$retVal = array();
		foreach ($arr_1 as $key1 => $value1) {
			$retVal[$value1] = $arr_2[$key1];
		}
		return $retVal;
	}
}
27
Nov

Estableciendo pausas en una línea de tiempo de Flash

Esta función extiende el objeto MovieClip de Flash permitiendo detener la línea de tiempo del MovieClip en donde se use, especificando los segundos que se desean.

Se escribe el código en la línea de tiempo principal, con lo que se consigue "agregarle" al objeto MovieClip la función setPause.

Después, se usa en la línea de tiempo del MovieClip en el que se desee establecer una pausa, escribiendo en el keyframe adecuado: this.setPause(segundos); en donde segundos es un valor numérico entero que le indica a la función cuantos segundos "espere" antes de continuar ejecutando la línea de tiempo.

Código

setPause
// Línea de tiempo principal
MovieClip.prototype.setPause = function(sec) {
this.stop();
var me = this;
intervalID = setInterval(function () {
clearInterval(intervalID);
me.play();
}, (sec*1000));
};


// Línea de tiempo del MovieClip (puede ser la línea de tiempo principal)
this.setPause(5);
23
Nov

Recomendaciones de programación para PHP

Tal como mencionan en los 2 artículos a los que hago referencia, PHP es el lenguaje más popular para programar aplicaciones web. Incluso, en alguna parte leí que era el Visual Basic de la web, por aquello de que es tan sencillo que cualquier persona puede entenderlo.
19
Nov

Leer datos de un archivo de texto delimitado y exportar a formato XML usando VB6

Recientemente encontré en un foro de consulta una solicitud simple y directa: leer los datos de un archivo de texto delimitado por comas y exportar esa información a XML, usando Visual Basic 6.

Hay varias maneras de hacerlo, y la que considero mejor opción es usar la capacidad del motor de ADO tanto para leer los datos como para exportarlos. ADO puede leer directamente un archivo delimtado si se le indica que use este proveedor de datos: MSDASQL, este driver: {Microsoft Text Driver (*.txt; *.csv)} y se le especifica un directorio al parámetro DBQ. Despúes de eso, simplemente se abre un recordset usando el nombre del archivo con los registros a leer.

Para exportar la información a XML, ADO tiene un método llamado precisamente Save, que simplemengte necesita la ruta completa del archivo a generar y el tipo de estructura que almacenará, que en este caso, es adPersistXML. Sin embargo, como el contenido del archivo creado por este método puede ser algo laborioso de leer, está la alternativa de crear una estructura XML usando una biblioteca distinta.

Usando el objeto MSXML simplemente se itera a través de todos los registros del recordset y se van creando los objetos correspondientes. Al final, también se puede guardar el resultado. Una ventaja de crear la estructura XML de esta forma, es que el valor de un campo se puede incluir en un elemento CDATA, que permite colocar información que un parser de XML no intentará validar.

Código

Exportar CSV a XML
Private Sub Command1_Click()
    Dim appPath As String
    Dim rs As New ADODB.Recordset
    Dim cnn As New ADODB.Connection
    Dim cString
    Dim fld As ADODB.field
    Dim xml As MSXML2.DOMDocument
    Dim record As MSXML2.IXMLDOMElement
    Dim field As MSXML2.IXMLDOMElement
    Dim cDataSecion As MSXML2.IXMLDOMCDATASection
    Set cnn = New ADODB.Connection
'   Ruta de trabajo
    appPath = App.Path
'   Validación de ruta de trabajo
    If Right(appPath, 1) <> "\" Then appPath = appPath & "\"
'   Proveedor para leer un archivo delimitado
    cString = "Provider=MSDASQL;Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" & appPath
    cnn.ConnectionString = cString
    cnn.Open
'   Ruta del archivo conteniendo los datos
    rs.Open "datos.txt", cnn
'   Si el archivo XML a guardar ya existe, eliminarlo
    If Dir(appPath & "datos1.xml") <> "" Then
        Kill appPath & "datos1.xml"
    End If
'   Guardar datos en formato XML
    rs.Save appPath & "datos1.xml", adPersistXML
'   Crear objeto XML
    Set xml = New MSXML2.DOMDocument
'   Crear nodo inicial
    xml.loadXML "<records/>"
'   Iterar a través de los resultados
    Do While Not rs.EOF
    '   Crear el equivalente a un "registro" en la estructra XML
        Set record = xml.createElement("record")
    '   Leer cada uno de los campos del recordset
        For Each fld In rs.Fields
        '   Nombre del campo
            fldName = fld.Name
        '   Valor del campo (concatenar un espacio elimina un posible error por valores NULL)
            fldValue = fld.Value & ""
        '   Crear el equivalente a un campo en la estructura XML
            Set field = xml.createElement(fldName)
        '   Almacenar el valor del campo en un elemento CDATA
            Set cDataSection = xml.createCDATASection(fldValue)
        '   Agregar el elemento CDATA al campo
            field.appendChild cDataSection
        '   Agregar el campo al registro
            record.appendChild field
        Next
    '   Agregar el registro al nodo inicial
        xml.documentElement.appendChild record
        rs.MoveNext
    Loop
'   Guardar el archivo XML
    xml.Save appPath & "datos2.xml"
    rs.Close
    Set rs = Nothing
    cnn.Close
    Set cnn = Nothing
End Sub



17
Nov

Timeline

Timeline es un widget basado en DHTML y AJAX para visualizar eventos en una línea de tiempo.

Su uso es relativamente sencillo y solo se requieren agregar pocos elementos al código HTML de una página ya existente y la referencia a una fuente en formato XML con los eventos que deban ser mostrados.



Código

HTML de muestra
<html>
<title>Timeline</title>
<head>
<script src="http://simile.mit.edu/timeline/api/timeline-api.js" type="text/javascript"></script>
<script src="event_reader.js" type="text/javascript"></script>
<script type="text/javascript">
var tl;
function onLoad() {
	var eventSource = new Timeline.DefaultEventSource();
	var bandInfos = [
	Timeline.createBandInfo({
	    eventSource:    eventSource,
	    date:           "Nov 17 2008 17:41:48 GMT-0600",
	    width:          "70%", 
	    intervalUnit:   Timeline.DateTime.MONTH, 
	    intervalPixels: 100
	}),
	Timeline.createBandInfo({
	    width:          "30%", 
	    intervalUnit:   Timeline.DateTime.YEAR, 
	    intervalPixels: 200
	})
	];
	bandInfos[1].syncWith = 0;
	bandInfos[1].highlight = true;
	tl = Timeline.create(document.getElementById("my-timeline"), bandInfos);
	Timeline.loadXML("events.xml", function(xml, url) { eventSource.loadXML(xml, url); });
}

var resizeTimerID = null;
function onResize() {
    if (resizeTimerID == null) {
        resizeTimerID = window.setTimeout(function() {
            resizeTimerID = null;
            tl.layout();
        }, 500);
    }
}
</script>
</head>

<body  onload="onLoad();" onresize="onResize();">
   <div id="my-timeline" style="height: 100px; border: 1px solid #aaa;"></div>
</body>
</html>