Ver Mensaje Individual
  #4  
Antiguo 07-09-2007
Avatar de paldave
paldave paldave is offline
Miembro
 
Registrado: ago 2007
Ubicación: Uruguay
Posts: 148
Reputación: 17
paldave Va por buen camino
Bueno, como veo que seguimos insistiendo en varios hilos con la colocación de imágenes en el menú trataré de explicarles como lo hago:

1) Si lo que quieren es insertar una imagen a la izquierda (o si quieren en el medio del menú), la cosa es simple: solo tienen que crear con el editor de menú un MenuItem con Caption='' (sin caption) y con Name='MiMenuItem' por ejemplo, en el lugar que quieran poner la imagen, y luego le asignan a su propiedad Bitmap el bitmap que deseen, o en su propiedad ImageIndex el índice de la imagen que quieran mostrar (que debe estar en el ImageList asociado, claro). Esto les mostrará su imagen en el espacio del MenuItem alineada a la izquierda.
Si quieren hacerlo un poquito más "vistoso" pueden hacer que la imagen ocupe todo el MenuItem. Para ello ponen la propiedad OwnerDraw de MainMenu a True y luego en el evento DrawItem del MenuItem dibujan la imagen utilizando el canvas que les proporciona la función, algo así:
Código Delphi [-]
procedure TForm1.MiMenuItemDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect;
  Selected: Boolean);
  var b:TBitmap;
begin
  b:=TBitmap.Create;
  b.LoadFromFile('d:\Seguridad\Imágenes\Chaplin.bmp');
  ACanvas.StretchDraw(ARect,b);
  b.free;
end;
claro que el bitmap pueden declararlo como público y cargarlo una sola vez cuando se cree el formulario .

2) Si quieren que la imágen se alinee a la derecha del menú, pues hacen lo mismo poniendo el MenuItem como el último item a la derecha y luego en el procedimiento Create del Form ponen este código:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
   mii: TMenuItemInfo;
   MainMenu: hMenu;
   Buffer: array[0..79] of Char;
begin
   MainMenu := Self.Menu.Handle;
   mii.cbSize := SizeOf(mii) ;
   mii.fMask := MIIM_TYPE;
   mii.dwTypeData := Buffer;
   mii.cch := SizeOf(Buffer) ;
   GetMenuItemInfo(MainMenu, MiMenuItem.Command, false, mii) ;
   mii.fType := mii.fType or MFT_RIGHTJUSTIFY;
   SetMenuItemInfo(MainMenu, MiMenuItem.Command, false, mii) ;
end;
y listo! queda alineado a la derecha del menú.

Si quieren cambiar el ancho del MenuItem pueden utilizar el evento OnMeasureItem:
Código Delphi [-]
procedure TForm1.MiMenuItemMeasureItem(Sender: TObject; ACanvas: TCanvas; var Width,
  Height: Integer);
begin
  Width:=40;
end;

Prueban y me cuentan que resultado les dió. Saludos a todos.

Última edición por paldave fecha: 07-09-2007 a las 00:35:30.
Responder Con Cita