Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   FireMonkey (https://www.clubdelphi.com/foros/forumdisplay.php?f=50)
-   -   Elementos de un TScrollBox (https://www.clubdelphi.com/foros/showthread.php?t=94817)

MaxiDucoli 31-07-2020 20:02:56

Elementos de un TScrollBox
 
Buenas tardes o noches o días, según donde estemos.

Estoy haciendo pruebas con un TMultiView por que me gustó la idea de hacer un proyecto en varias capas o diferentes vistas y agregarlas como si fueran todas una a medida que las vaya necesitando-

La cuestión es que tengo un TForm y un TMultiView al cual le agregué un TScrollBox.
Mediante un código le agrego varios TImage al TScrollBox y no sé como hacer para obtener el elemento que está scrolleando o capaz que no haya elemento que esté scrolleando pero me gustaría que un elemento de ese TScrollBox sea seleccionado cada vez que haga para arriba o para abajo y si lo tuviese en horizontal cada vez que haga de izquierda a derecha.

Les pongo el código que tengo para poner los TImage que es lo único que logré hasta ahora.

Código Delphi [-]
procedure TForm1.btn1Click(Sender: TObject);
var
aImage : array [0..15] of TImage;
i,j : Integer;
begin

for i  := 0 to Length(aImage) - 1 do
  begin
    aImage[i] := TImage.Create(nil);
    //aImage[i].Parent := ScrollBox1;
    ScrollBox1.Content.AddObject(aImage[i] as TImage);
    aImage[i].MultiResBitmap.Add.Bitmap.LoadFromFile
    ('d:\TEMP\' + i.ToString + '.png');
    aImage[i].WrapMode := TImageWrapMode(2);
    aImage[i].Margins.Left := 0;
    aImage[i].Margins.Right := 5;
    aImage[i].Margins.Top := 5;
    aImage[i].Margins.Bottom  := 5;
    aImage[i].Visible := true;
    aImage[i].Align := TAlignLayout(1);
    aImage[i].Tag := i;
    ScrollBox1.RealignContent;
  end;
  ScrollBox1.SetFocus;

 //j := ScrollBox1.Content.Controls.Count ;
 //ShowMessage(j.ToString);

end;


Mi idea es pintar el elemento que quede en el medio del TScrollBox y que sea el seleccionado cada vez que muevo los TImage para algún lado, pero no hay nada que sea Item o ItemIndex que me sea útil como para saner qué elemento es el central.
Creo que lo que sea que tengo que hacer iría en el evento OnPaint del TScrollBox pero hasta ahí llego.

Alguien que conozca del tema?

dec 01-08-2020 09:20:40

Hola a todos,

Igual voy a decir alguna tontería, pero, como tú dices, no habiendo algo como un "CentralItemIndex", ¿acaso pudiera hacerse mediante sencillos cálculos? Seguro que lo has pensado... me refiero a usar el "VertScrollBar.Position" y/o el "HorzScrollBar.Position", que, te dice la posición de las "barras de scroll". Con las dimensiones de los elementos dentro del "scrollbox" y estas propiedades "Position", tal vez sea posible calcular (con cierto margen) qué elemento está "centrado" en el "scrollbox".

MaxiDucoli 01-08-2020 17:42:13

Cita:

Empezado por dec (Mensaje 538182)
Hola a todos,

Igual voy a decir alguna tontería, pero, como tú dices, no habiendo algo como un "CentralItemIndex", ¿acaso pudiera hacerse mediante sencillos cálculos? Seguro que lo has pensado... me refiero a usar el "VertScrollBar.Position" y/o el "HorzScrollBar.Position", que, te dice la posición de las "barras de scroll". Con las dimensiones de los elementos dentro del "scrollbox" y estas propiedades "Position", tal vez sea posible calcular (con cierto margen) qué elemento está "centrado" en el "scrollbox".

Probé pero el position me mueve el control de lugar.
Igualmente hoy voy a seguir probando más cosas a ver si le encuentro la vuelta.

MaxiDucoli 01-08-2020 17:49:00

Cita:

Empezado por dec (Mensaje 538182)
Hola a todos,

Igual voy a decir alguna tontería, pero, como tú dices, no habiendo algo como un "CentralItemIndex", ¿acaso pudiera hacerse mediante sencillos cálculos? Seguro que lo has pensado... me refiero a usar el "VertScrollBar.Position" y/o el "HorzScrollBar.Position", que, te dice la posición de las "barras de scroll". Con las dimensiones de los elementos dentro del "scrollbox" y estas propiedades "Position", tal vez sea posible calcular (con cierto margen) qué elemento está "centrado" en el "scrollbox".

Listo.
Era el método ScrollBy(const dx, dy : single);

dx positivo mueve para derecha y negativo mueve para izquierda.
dy positivo mueve para arriba y negativo mueve para abajo.

GRacias por la idea!!!!!

dec 01-08-2020 18:01:03

Hola a todos,

Cita:

Empezado por MaxiDucoli (Mensaje 538184)
Listo.
Era el método ScrollBy(const dx, dy : single);

dx positivo mueve para derecha y negativo mueve para izquierda.
dy positivo mueve para arriba y negativo mueve para abajo.

GRacias por la idea!!!!!

¡De nada! Me alegro si te sirvió. :)


La franja horaria es GMT +2. Ahora son las 23:50:14.

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