Ver Mensaje Individual
  #4 (permalink)  
Antiguo 14/10/2004, 10:55
Avatar de Beakdan
Beakdan
 
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 23 años
Puntos: 7
Reel:
Que bueno que hayas visto el programa, para eso está publicado (debería yo ofrecer disculpas por publicar código tan simple).

Bueno, con el compilador de recursos se pueden lograr algunas cosas interesantes. Por ejemplo: el simple hecho de incluir un ícono que aparezca antes que cualquier cosa en la lista de recursos (para esto en lugar de un número le pones una cadena de identificación), hace que windows lo tome como el ícono de aplicación.
Ahora, tener un archivo de recursos es cómodo. Si tu aplicación tiene muchas imágenes, puedes empaquetarlas todas en el recurso. Al compilar tu programa, estas imágenes quedan compiladas junto con el ejecutable. Así, no tienes que preocuparte por incluirlas en el archivo de distribución. También en caso de que hagas una aplicación que será usada en lugares con distintos idiomas, puedes definir un identificador único para un mensaje dado, y asignar el mensaje en distintos idiomas a ese identificador. Así, en tu código sólo llamas al identificador, y el programa tomará el idioma que coincida con el sistema del usuario.
En el caso de este programa, me resulta conveniente definir en el archivo de recurso una secuencia binaria que representa una serie de numeros de tipo long, que son a su vez coordenadas del gráfico del programa. Una función en el programa requiere un array de puntos (POINTAPI). El tipo de datos POINTAPI es una estructura que simplemente tiene dos longs en secuencia. En un array de puntos tienes por lo tanto una secuencia de longs. Y visto en la memoria, esto se puede traducir a una secuencia de bytes. Entonces, definiendo en el recurso esta secuencia de bytes, cuando la requiero en el programa, simplemente la cargo y le paso a la función la dirección del primer elemento de este array. La función busca en la memoria esta secuencia y con ella trabaja (al fin y al cabo, en memoria todo es secuencias de bytes). Así me evito declarar el tipo de dato POINTAPI en el programa, pero además me evito tener que llenar una por una la secuencia...
Código:
'Hubiera tenido que hacer esto:
Dim ArrPuntos() as POINTAPI
 
	'Luego hubiera sido necesario redimensionar dicho array
	'Segun la cantidad de puntos.
	Redim ArrPuntos(0 to n)
 
	'Y después llenar cada una de las coordenadas
	ArrPuntos(0).x = x0
	ArrPuntos(0).y = y0
	ArrPuntos(1).x = x1
	ArrPuntos(1).y = y1
	........
	ArrPuntos(n).x = xn
	ArrPuntos(n).y = yn
 
	'Y a repetir el proceso para la cantidad de areas sensibles definidas.
En cambio del modo en que lo hice, todo se reduce a cargar la secuencia con LoadResData en un bucle que itera sobre la cantidad de áreas. De este modo, con sólo 4 lineas de código reemplazo todo lo anterior.

Espero que esta explicación no haya sido tediosa. Pero si puedo ayudarte en algo, no hay problema.

Hasta luego.