Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Array TPanel y popup menu (https://www.clubdelphi.com/foros/showthread.php?t=21064)

VRO 05-05-2005 10:19:00

Array TPanel y popup menu
 
Hola, la verdad es que no se muy bien si mi pregunta está bien encuadrada en este grupo, pero ahí va.

Vereis estoy haciendo la gestión de una hotel y me estoy pegando con el planning de ocupación.

El planning está realizado con un array de paneles que consta de 21 filas y 39 columnas de las cuales los datos van apartir de la 3 fila y de la 3 column ya que las anteriores son para datos como habitaciones y días, pues bien dependiendo de si el panel está vacio ó tiene una reserva ó una estancia se le adjudica un popupmenú u otro, necesito saber que panel es el que llama al popupmenú , ya que del caption del panel cojo los datos necesarios para realizar las funciones del popupmenú.

No se si me he explicado necesito cojer el caption del panel que llama al popupmenú, el panel tiene el siguiente formato al ser array p[i,j] , una opción que había pensado es saber el i y el j (fila y columna) de esa forma se en que panel estoy, pero como buscar el i y el j si no tengo ninguna referencia para ello, sólo un popup menú que puede estar en otros 20 ó + paneles.

O sino hacerlo con las coordenadas de la pantalla sabiendo cual es el x ó el y del ratón y sabiendo las medidias de los panenles, puedo saber que panel es, pero nada no sale lo que pretendo.

¿Cómo puedo solucionar mi problema?, ¿alguien sabe si puedo saber desde donde se llama al popupmenu?

Espero haberme explicado con claridad para que lo podais enterder.

Eternamente agradecida.

VRO 05-05-2005 10:53:35

Igual con saber como adjudicar un evento de un componente a un array de componetes me valdría ya que tengo hecha una función que me puede sevir para calcular el la fila y columna de mi panel y así sacar el caption.


es decir necesito saber como adjudicar el evento OnMouseMove del panel ha cada uno de los paneles del array.


Muchas gracias, espero vuestra ayuda.

hermes_32 05-05-2005 11:46:32

Hola VRO,

la verdad que no me entero bien de lo que intentas explicar y eso que lo he leido varias veces, te lo aseguro. Pero creo que te estas liando demasiado.

Yo que tu jugaría con la propiedad tag de los paneles y así puedes localizar mejor cuál es el panel correcto y poder asignarle el evento OnMouseMove al panel adecuado.

para asignarle el evento sería

Código Delphi [-]
(tuarray[i,j] as tpanel).onmousemove := panelbueno.Onmousemove;

No se si es lo que quieres pero espero que te sirva.

Un saludo.

Neftali [Germán.Estévez] 05-05-2005 12:27:10

Puedes utilizar los eventos OnEnter y OnExit de los paneles para saber en cada momento en qué panel se encuentra el ratón. De igual forma me da la impresión de que con alguno de los eventos del ratón (Down/Up) podrás detectar en qué panel se está desplegando el menú y no tendrás que hacer cálculos con coordenadas.

VRO 05-05-2005 14:59:19

Efectivamente me explico fatal , pero vosotros lo habeis adivinado, exactamente me refería a eso a saber en que panel del array me encuentro de esa forma poder acceder a lo que pone en el caption.


Gracias a ambos y al resto de personas que me han ayudado tantas veces, probaré vuestras respuestas y os comento.

GRacias

hermes_32 05-05-2005 15:33:33

Hola VRO,

Cita:

Empezado por VRO
tengo hecha una función que me puede sevir para calcular el la fila y columna de mi panel

Si esto lo tienes controlado, entonces no veo el problema, ya que puedes hacer:

Código Delphi [-]
  (TuArray[i,j] as TPanel).caption

Y tienes acceso al caption del panel que quieres.

Un saludo.

VRO 06-05-2005 16:02:41

Ya está, problema solucionado.
 
¡¡¡ Yaaaaaaa está !!!!!, no problem, pensando lo que dijo Neftalí que en el evento OnMouseDown/Up puedo acceder directamente al caption sín necesidad de hallar las coordenadas, estuve pensando e investigando y lo encontré, para gente puede ser una chorrada encontrar estop que mucha gente ya sabrá, pero yo no lo sabía quizas porque soy un poco cenutria ó porque todavía me quedan muchas cosas que aprender de Delphi y demás. Bueno sin animo de enrrolarme mucho lo que hecho de esta forma:

Código Delphi [-]
 
procedure TMenugeneral.mouse(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   if Button=mbRight then
    begin
        if (sender is TPanel) then
         begin
          codreserva:=(TPanel(sender).Caption);
          pos_i:=IntToStr((TPanel(sender).top));
          pos_j:=IntToStr((Tpanel(sender).left));
         end;
    end;
end;

Cuando creo los TPanel del array ,le asigno al evento OnMouseDown la llamada a la función mouse que he pasado de la siguiente forma:

Código Delphi [-]
  p[i,j].onmousedown:=mouse;

Enla función mouse hallo el caption del TPanel en el que he pulsado el botón derecho para asignarle el popupmenu.

Bueno, pongo el código ya que creo que mi deber es poner como lo he hayado para que otro inexperto como yo ó empanado le sirva de ayuda, ya que es de lo que se trata en este foro.


Muchas gracias a todos y buena tarde.


La franja horaria es GMT +2. Ahora son las 18:41:45.

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