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
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
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 Edit2.Text := intToStr(i); 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...