Ver Mensaje Individual
  #3  
Antiguo 16-06-2006
Avatar de sitrico
[sitrico] sitrico is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 295
Reputación: 22
sitrico Va por buen camino
Bicho:
De buenas a primeras parece que por ahi van los tiros (OnMouseDown) Gracias.


Pero te comento lo siguiente:

En tu código falta verificar el boton pulsado

Código Delphi [-]
If Button = mbLeft Then
esa es la parte fácil

La cosa se me complica

Tu comparas el valor sólo el valor:

Código Delphi [-]
x <= StatusBar1.panels[1].Width

Este código -así- aplica a los 2 primeros páneles (0 y 1) pero el ejemplo vale.

Yo uso el panel 4 (el quinto) para dibujar los iconos, tendría que calcular primero la pocición "left" del panel (¿suma de los width de los anteriores?) pero luego tendría que calcular:

1. cuantos iconos hay
2. posiciones de cada uno ( al leer las coordenadas left y top de las imagenes son 0,0 )
3. comparar la coordenada X del click con cada uno de los rangos
4 (lo dificil) tengo N imagenes, el click fue en la nro I ¿ cual es la nro I y a que evento debe llamar ? .....

Por cuestiones de presentación no puedo separar las imagenes en paneles individuales (sería lo más facil, tanto que lo voy a considerar seriamente)

¿No habrá alguna manera de pasar el mensaje (click) a las imagenes para que puedan responder directamente?

Por ahora voy a hacer algunas pruebas a ver que consigo.

Gracias nuevamente.

Y todavía dicen que en delphi se hacen los programas "sin escribir una linea de código"

Edito para agregar resultados de las pruebas:

Código Delphi [-]
procedure TForm1.StatusBar1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Var
i,j, px : Integer;
begin
If Button = mbLeft Then
   Begin
   Edit1.Text := 'x='+IntToStr(x)+', y='+IntToStr(y);
   Edit2.Text := '';
   Memo1.lines.Clear;
   If (x >= rPanel4.Left)  And (x <= rPanel4.Right) Then //
      Begin
      // Determinar la posición de la primera imagen
      j := NumeroImagenes;
      px := rPanel4.left + (((rPanel4.Right - rPanel4.left)- (j * mrg)) div 2);
      For i := 0 to j do
         Begin
         If (x >= px-1) and (x <= px+17) Then // un poco de margen
            Edit2.Text := intToStr(i); // el valor i contiene el nº del icono pulsado
         // saltar a la posicion de la siguiente imagen
         Inc(px,mrg);
         End;
      End;
   End;
end;

Este codigo soluciona los problemas (1, 2 , y 3) sólo aclarar que rPanel4 es una variable privada de tipo tRect que almacena el valor de Rect en el evento:

Código Delphi [-]
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
Begin
If Panel.Index = 4 then
   Begin
   rPanel4 := Rect;

Solo falta saber cual es el boton: i...
__________________
Sitrico

Última edición por sitrico fecha: 16-06-2006 a las 17:57:39.
Responder Con Cita