PDA

Ver la Versión Completa : Elementos de un TScrollBox


MaxiDucoli
31-07-2020, 20:02:56
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.

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
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
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,

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ó. :)