Se puede realizar un scroll horizontal en un DBGrid (columna por columna) de forma nanual enviando los mensajes correspondientes al DbGrid. De forma similar se puede realizar scroll vertical pero utilizando el mensaje WM_HSCROLL.
1
2
3
| // Mensaje de desplazamiento a la derecha
// (1 columna hacia la derecha)
SendMessage(DBGrid1.Handle, WM_HSCROLL, SB_PAGERIGHT, 0); |
// Mensaje de desplazamiento a la derecha
// (1 columna hacia la derecha)
SendMessage(DBGrid1.Handle, WM_HSCROLL, SB_PAGERIGHT, 0);
Se pueden utilizar otros valores para el mensaje como: SB_RIGHT, SB_LINEUP,… (Unit Messages.pas)
La idea de éste ejemplo era realizar unas pruebas para simular en ejecución, la selección de objetos, como normalmente se hace en el IDE de Delphi; Hice pruebas con dos métodos de selección; Uno utilizando las típicas marcas que aparecen el los vértives de un componente y otro con una outline -linea en la parte exterior del control-.

Hay implementados dos tipos de selección; Una es modificando las propiedades del propieo control (en este caso el Borde de los TShapes -aunque con otros controles puede hacerse algo similar-) y la otra añadiendo una marcas en ejecución alrededor del Componente; Este segundo caso parece que podría ser más estandard si es necesario hacerlo con diferentes tipos de componentes.
Descargar ejemplo
Éste ejemplo surgió hace tiempo en los foros a raiz de un problema típico, en el que existe una imagen de fondo (plano) y se deben posicinar sobre ésta otras imagenes a modo de «elementos» (un bar y las mesas, la planta de un hospital y las camas, un plano de una terminal y el posicionamiento de las gruas,…).
Se trata de crear/destruir objetos y poder (en ejecución) moverlos utilizando el ratón;
Es una ampliación del ejemplo Seleccionar Shapes visualmente.

Este ejemplo sirve también para mostrar cómo crear/destruir componentes visuales (en este caso son TImage), en ejecución mediante código. El sistema es muy similar para otros tipos de componentes.
Descargar ejemplo
Más o menos todo el mundo que está metido un poco en informática y más concretamente en programación tiene una idea de qué es un plugin.
¿Cómo definirlo? Tal vez las primeras palabras que se me ocurren son “añadidos» o “complementos». Si buscamos la traducción del inglés veremos que significa algo así como “enchufar» o “enchufable».
Con ambas cosas ya podemos dar una aproximación en programación. Un plugin (plug-in, addin, add-in, add-on, addon,…) podemos definirlo como: “Un programa o librería que permite ‘enchufarse’ o ‘añadirse’ a otra aplicación y que consigue ‘complementarla’ o darle una ‘funcionalidad añadida’.
En este artículo se da una introducción a cómo poder programar plugIns en Delphi.
También podéis decargar el ejemplo que ilustra este artículo:
En La idea de éste artículo es hacer un breve repaso a la clase TClipboard que se implementa en Delphi y las operaciones más básicas que podemos utilizar en nuestros programas relacionadas con el portapapeles de Windows. Espero que las explicaciones y los ejemplos aclaren (un poco al menos) el funcionamiento básico sobre éste tema.

Éste artículo apareció en el número 17 de la revista síntesis (muy recomendable por cierto) y de la que se pueden bajar los todos los números desde el Grupo Albor.
También se pueden descargar los ejemplos que acompañan al artículo:
Primero y antes de nada, supongo que ésta ya las ha hecho porque es básica, asegúrete de eliminar toda la información de debug del ejecutable. Las opciones para desactivar esa información éstán en (Desde el entorno de Delphi):
Project/optiones/pestañas compiler y linker.
Es información que necesitas para programar, pero no en el ejecutable final.
Ésto mismo también lo puedes hacer pasándolo al ejecutable ésta aplicación (de los creadores de Exception Magic):
TDSPack
También puedes probar a pasarle al ejecutable ésta aplicación (de Jordan Russell) para eliminar la «relocation section» de EXE (en su página está la explicación completa):
StripReloc
A partir de ahí entiendo que tienes dos opciones:
- Utilizar compresores de ejecutables (hay muchos disponibles -UPX, ASPack, CExe,NeoLite, PECompack, Petite, PKlite32, Shrinker, WWPack32,EZP, FSG, JDPack, MWE, …-), con lo que tu aplicación queda igual (en cuanto a diseño), pero lo que haces es comprimirla. Al ejecutarse, tu aplicación se descomprime en memoria y se ejecuta, no tiene más secreto.
- Utilizar packages, ya sea estáticos o dinámicos; Entiendo que ésto es una decisión más de diseño. Si utilizas estáticos, es como partir tu aplicación en pequeños trozos. Al ejecutarla se cargan todos los trozos en memoria (y vuelves a tener el programa entero en memoria, pero en trozitos); Si utilizas dinámicos la programación se complica un poco y conseguirás tener en memoria cuando ejecutes sólo los que necesites. El tema de packages en general te obligará a tener otras cosas en cuenta, como, los packages a distribuir en la instalación, versiones de packages (tuyos y los que ya puedan existir en la máquina donde instales),…
Si quieres afinar mucho más en el tamaño, hay otras soluciones, pero algunas de ellas ya son a tener en cuenta en la programación:
Si tienes más sugerencias, por favor envíalas a esta dirección.