A veces es interesante poder acceder al contenido de un TStrings (de un TMemo, por ejemplo) como un único string o cadena.
Para eso, Delphi ha dotado a la clase TStrings del método Text, que devuelve el contenido del TStrings como una cadena simple. El inconveniente, es que dentro del resultado van incluídos los caractreres de «Salto de línea» y «Retorno de carro». ¿Cómo eliminarlos?
Con ésta sencilla función se pueden eliminar y/o susituir por otro caracter (espacio,…).
1
2
3
4
5
6
7
8
9
10
{:Elimina los saltos de línea (caracteres #10 y #13; salto de linea y salto
de carro) de un TStrings.}function QuitarSaltosLinea(Strs: TStrings;
CharReplace:String=STR_EMPTY):String;var
Str:string;begin
Str := AnsiReplaceStr(Strs.Text,#10, CharReplace);
Result := AnsiReplaceStr(Str,#13, CharReplace);end
{:Elimina los saltos de línea (caracteres #10 y #13; salto de linea y salto
de carro) de un TStrings.}
function QuitarSaltosLinea(Strs: TStrings;
CharReplace:String=STR_EMPTY):String;
var
Str:string;
begin
Str := AnsiReplaceStr(Strs.Text, #10, CharReplace);
Result := AnsiReplaceStr(Str, #13, CharReplace);
end
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
procedure TForm1.Image1MouseDown(Sender:TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y:Integer);var
h: HMENU;
p:TPoint;begin// El componente que llama deriva de TControl?if(Sender is TControl)thenbegin// Posicion del click
p.X:= x;
p.Y:= y;// Calculamos las coordenadas relativas
P :=Self.ScreenToClient(TControl(Sender).ClientToScreen(P));// Mostrar el menú
h := GetSystemMenu(handle,false);
TrackPopupMenu(h, TPM_LEFTALIGN or TPM_LEFTBUTTON,
ClientOrigin.X+ p.X,
ClientOrigin.Y+ p.y,0, handle,nil);end;end;
procedure TForm1.Image1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
h: HMENU;
p:TPoint;
begin
// El componente que llama deriva de TControl?
if (Sender is TControl) then begin
// Posicion del click
p.X := x;
p.Y := y;
// Calculamos las coordenadas relativas
P := Self.ScreenToClient(TControl(Sender).ClientToScreen(P));
// Mostrar el menú
h := GetSystemMenu(handle, false);
TrackPopupMenu(h, TPM_LEFTALIGN or TPM_LEFTBUTTON,
ClientOrigin.X + p.X ,
ClientOrigin.Y + p.y, 0, handle, nil);
end;
end;
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
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)
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
É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;
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.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
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):
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):
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:
Utilizar las librerías KOL. Sustituyen a algunas de Delphi para «cargar» menos la memoria.
Cuidado con las imágenes que se añaden a los formularios y el formato en que se añaden. Si se utilizan imágenes de forma repetida utilizar recursos y no añadirlas en diseño.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Usamos cookies para asegurar que te damos la mejor experiencia en nuestra web. Si continúas usando este sitio, asumiremos que estás de acuerdo con ello.Aceptar