Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Imagen o texto sobre el menu / menu con align / menu movible (https://www.clubdelphi.com/foros/showthread.php?t=47741)

dajaji 06-09-2007 00:58:08

Imagen o texto sobre el menu / menu con align / menu movible
 
Hola a todos en el foro:

Estoy haciendo una aplicacion en Delphi 7 en que es necesario mostrar el logo y nombre de la empresa en la parte superior del Form principal en un espacio de 4 cm como minimo.(asi reza el contrato).

Mi problema es que aun no logro colocar una imagen o texto sobre el menu principal.

de la siguiente forma

__________________________________________
|_______________________________________X|
| |
| <Imagen > Nombre de la aplicacion |
|________________________________________|
|Archivo|Edicion|Ayuda |
| |
| |
| |
| |
| |
| |
| |
| |
|________________________________________|



Estuve viendo algunos hilos pero no encontre nada similar
Por favor ayudenme.

- claro que busqué menus principales que se puedan mover y no encontre nada.
- tb busqué menus con align para alienarlo top y que otro componente con align top se pusiese enciama pero nada.

Como curiosidad: se fijaron que cuando ponen un componente menu, en sus propiedades del menu no existe la propiedad top
pero cuando entran a las propiedades basicas del fichero DFM (o cuando ven el formulario como texto y no de manera visual). SI existe la propiedad top del menu, pero si se cambia el valor no afecta en nada al componente menu.

o estoy del todo equivocado...?

Ayuda porfa.

atte. Dajaji:cool:

paldave 06-09-2007 01:42:24

Mira este hilo

dajaji 06-09-2007 17:34:57

? :( ?
 
Antes gracias por la respuesta.

pero ya vi antes el hilo que pones.

habla del toolbar97 ya me lo baje y tb el toolbar2000 pero no logro hacer lo que quiero, (o es que no le doy al punto es que a veces no veo lo mas obvio).

Ademas que en la ultima seccion del hilo no daban la respuesta a la ultima pregunta de Greco

Grapcias

paldave 07-09-2007 00:22:03

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.

scriptors 07-09-2007 13:23:09

How i can call
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
from one Frame :confused:

Because I "unHidden" one MenuItem form one hidden form ... after this ... all menuitem are on the LEFT

i try TForm1.FormCreate.Execute ... but of course not work :o

dajaji 08-09-2007 00:28:46

Eso esta genial pero ....
 
Primero gracias por la respuesta.
Genial el codigo, lo hice y funciono a la perfeccion. Pero no es a lo que me referia, lo que busco es que la imagen este en un espacio entre la barra de titulo y la barra de menu(no a un lado del menú), como en la siguiente imagen:

http://www.imaxenes.com/imagenes/menuespl1kh03fl.jpg

Ojo que el formulario de la imagen lo hice copiado de otra imagenes. (obvio no? si no, no estaria haciendo esta preg. jeje :o )

Bueno pero en fin por si el link no funca :
----------------------------------
titulo
----------------------------------
imagen :) :) :)
----------------------------------
Menu
----------------------------------
.
.
.
.
-----------------------------------


Gracias de antemano.

paldave 08-09-2007 16:49:27

El link que pusiste está mal, no se permiten imágenes de ese tamaño. Prueba subiéndola a www.imageshack.com o www.upload27.com
y colócanos el link, claro

paldave 08-09-2007 17:33:27

Bueno, tampoco está mal darse un poco de idea.
Para lo que quieres debes hacer esto:
1) Pones un MenuItem en blanco a la izquierda de tu menú, o sea, en primer lugar, antes del "Archivo", por ejemplo, llamado MiMenuItem, y en su propiedad Bitmap asignas tu mapa de bits.
2) Al MenuItem "Archivo" le pones la propiedad Break=mbBarBreak
3) Pones el MainMenú con la propiedad OwnerDraw=true
4) Pones este código en el evento OnAdvancedDrawItem del MiMenuItem.
Código Delphi [-]
procedure TForm1.MiMenuItemAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; State: TOwnerDrawState);
begin
  ACanvas.StretchDraw(Rect(ARect.Left,ARect.top,ClientWidth,ARect.Bottom),MiMenuItem.Bitmap);
end;
5) Listo!!!!
Espero sea eso lo que querías, ya que no pude ver tu imágen.

dajaji 11-09-2007 22:18:29

Precisamente
 
Gracias, justamente a eso es que me refiero:

estes el link (bajo sujerencia), que espero funcione:

http://www1.upload27.com/viewimage.p...50-menuesp.JPG

gracias paldave, solo falta un pequeño detalle a la aplicacion.

ya que todo se hizo con un solo MainMenu, como puedo hacer que solo el primer "MiMenuItem" sea de un Alto como de 2 cm y el resto del menu conserve su Alto de 1cm.

Gracias.



PD.- ¿De donde sacais tanta sabiduria. ???

Me respondo a mi mismo: Obvio del esfuerzo, constancia, experiencia y pasion por la programación.

dajaji 12-09-2007 17:35:58

Encontre algo pero....
 
Buscando buscando en torry encontre el componente
Pie-Menu, y en la pagina del autor

http://www.pie-tools.de/

encontre el grupo completo de componentes muy variados por cierto
hay que leer las instrucciones de instalacion para instalarlo

Su componente TPieMainMenu tiene la opcion de cambiar el alto de los menus, pero lamentablemente, si cambia el alto del menu en la aplicación, tambien cambia el alto de todos los menues de Windows.

Alguien sabe como cambiar el alto del menu solo en la alicacion sin afectar a todo windows.

PD.- claro que haceptaria otras alterenativas para el problema que origino este hilo. :o

Gracias.

dajaji 13-09-2007 00:51:33

a ver que les parece mi solucion improvisada
 
Mi objetivo es poner una imagen por encima del menú principal de la aplicacion.

Uso dos Form

Form1
con un label y una imagen cualquiera ubicada en la parte superior del form

y un Form2
con su propiedad

BorderStyle:=bsNone;

Ademas en este Form2 pongo un MainMenu con los items que se quiera.

En el Form1 que sera el principal (o el primero que se construya)

en su evento OnActivate:
Código Delphi [-]
form2.top:=top+80;
form2.left:=left+4;
form2.Width:=width-8;
form2.Height:=Height-80-4;
form2.showmodal;
application.Terminate;

y es todo.

Claro que tiene muchos inconvenientes como que no puedo mover la aplcacion, no puedo cerrar la aplicacion si no es por un boton o ALTT+F4
y me imagino que tambien tiene otros incovenientes

Que les parece la ilusion???? :D



Bueno Espero alguien me ayude sin tanto artificio a poner una simple imagen por

dajaji 13-09-2007 01:37:57

1 Archivos Adjunto(s)
me olvide subir el codigo jeje:D
porsiacaso aunque es simple lo hice en delphi7

dajaji 21-09-2007 00:30:19

la enterior solucion trae muchos problemas,

Alguien tiene otra solucion?


La franja horaria es GMT +2. Ahora son las 01:24:37.

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