Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   SysMenu y/u otras opciones de la Barra de Título (https://www.clubdelphi.com/foros/showthread.php?t=38477)

gluglu 15-12-2006 17:51:04

SysMenu y/u otras opciones de la Barra de Título
 
Hola de nuevo compañeros del foro !

Estoy indagando acerca de modificar el SysMenu de un form, u otras opciones de tratar la barra de título de un form.

He conseguido añadir mi opción al Sysmenu que se despliega cuando se pincha en el icono del Form que aparece en la barra de título, o bien cuando (en mi caso particular por ser un Form MDI), cuando se minimiza el form y aparece abajo en el contenedor MDI.

Para ello utilizo el siguiente código
Código Delphi [-]
const
  SC_MyMenuItem1 = WM_USER + 1;
 
...
 
procedure TMain.FormCreate(Sender: TObject);
const
  sMyMenuCaption1 = 'Mi opción de Menu';
var
  SysMenu : HMenu;
begin
  {Get system menu}
  SysMenu := GetSystemMenu(Handle, FALSE) ;
  {Add a seperator bar to main form-form1}
  AppendMenu(SysMenu, MF_SEPARATOR, 0, '') ;
  {add our menu}
  AppendMenu(SysMenu, MF_STRING, SC_MyMenuItem1, sMyMenuCaption1) ;
  ...
end;

Quiero intentar conseguir dos opciones más. Una ponerle un icono a mi opción del Sysmenu. Para ello he encontrado la referencia a :
Cita:

SetMenuItemBitmaps Function

The SetMenuItemBitmaps function associates the specified bitmap with a menu item. Whether the menu item is selected or clear, the system displays the appropriate bitmap next to the menu item.

Syntax


BOOL SetMenuItemBitmaps( HMENU hMenu, UINT uPosition, UINT uFlags, HBITMAP hBitmapUnchecked, HBITMAP hBitmapChecked);
Parameters
hMenu [in] Handle to the menu containing the item to receive new check-mark bitmaps. uPosition [in] Specifies the menu item to be changed, as determined by the uFlags parameter. uFlags [in] Specifies how the uPosition parameter is interpreted. The uFlags parameter must be one of the following values. MF_BYCOMMAND Indicates that uPosition gives the identifier of the menu item. If neither MF_BYCOMMAND nor MF_BYPOSITION is specified, MF_BYCOMMAND is the default flag. MF_BYPOSITION Indicates that uPosition gives the zero-based relative position of the menu item.hBitmapUnchecked [in] Handle to the bitmap displayed when the menu item is not selected. hBitmapChecked [in] Handle to the bitmap displayed when the menu item is selected.

Lo que no sé es como obtener el Handle de un Bitmap cualquiera que quiera insertar. (Utilizo Delphi 2006 VCL.Net y a mi entender no me permite utilizar punteros).

También me gustaría añadir una combinación de teclas 'ShortCut' a mi opción del SysMenu.

Y por último preguntar si existe la opción de interceptar de alguna manera la pulsación del botón derecho del ratón sobre la barra de título, que también me serviría a falta de modificación del SysMenu.

Muchas gracias por vuestra ayuda.

Edito : Quiero de nuevo especificar que el evento que quiero capturar con respecto al botón derecho del ratón sobre la barra de título es en un form MDIChild. He visto que sobre el Form principal se aplica lo mismo que lo explicado para el SysMenu.

seoane 15-12-2006 18:01:31

Para obtener el handle del bitmap puedes usar la función LoadBitmap o incluso puedes usar la propiedad Handle de un objeto TBitmap.

gluglu 15-12-2006 18:13:49

Gracias de nuevo Domingo por responder tan rápido.

Puedes ponerme por favor un ejemplo de como obtener el Handle. Me pierdo con esto de los Handle.

Sigo indagando y he encontrado la descripción completa de MENUITEMINFO en http://msdn2.microsoft.com/en-us/library/ms647578.aspx y de INSERTMENUITEM en http://msdn2.microsoft.com/en-us/library/ms647988.aspx , pero creo que con eso me he liado más todavía ! :o

Creo que sería más conveniente utilizar INSERTMENUITEM en vez de AppendMenu. Pero Uffff !, creo que lograr insertar mi propia opción con un gráfico y una combinación de teclas va a ser un poco más complicado de lo que creía.

Neftali [Germán.Estévez] 15-12-2006 18:14:28

La clase TBitmap tiene la propiedad Handle; Es la que yo he utilizado y me ha funcionado correctamente. Eso sí, con Delphi 6 no con .NET.

En cuanto a las ShortCut, no conseguí hacerlas aparecer; Tampoco era prioritario, así que no estuve mucho, pero en una primera pasada no conseguí que me saliera. Si lo consigues postéalo.

Gracias.

EDITO: Me dormí con el mensaje abierto y llegué tarde, muy tarde...

seoane 15-12-2006 18:27:34

Cita:

Empezado por gluglu
Puedes ponerme por favor un ejemplo de como obtener el Handle. Me pierdo con esto de los Handle.

Usando un TBitmap, por ejmplo, podemos hacer algo como esto:
Código Delphi [-]
var
  Bitmap: TBitmap;

Bitmap:= TBitmap.Create('c:\abc.bmp');
//Ahora usa la propieda Bitmap.Handle para lo que quieras


// Cuando ya no lo necesites acuerdate de destruirlo
Bitmap.Free;

gluglu 15-12-2006 18:27:35

Ya me estoy aclarando con los Handle ... ;)

Sigo probando. Si logro algo concreto, aviso ! :)


La franja horaria es GMT +2. Ahora son las 05:20:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi