Programar en cualquier componente que se desee que responda al click el siguiente código en el evento MouseDown.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| 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; |
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,…
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
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;
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
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,…