He creado un TScrollBox. He agregado la etiqueta y el cuadro de edición dinámicamente al hacer clic en el botón. Para establecer la ubicación del componente, he usado la altura, el ancho, la izquierda, la propiedad superior de los componentes. Pero cuando aparece la barra de desplazamiento aparece en la pantalla después de agregar 5 componentes, la siguiente ubicación de componentes se altera. y el siguiente componente no se coloca de manera síncrona en ScrollBox.Cómo agregar componentes a TScrollBox dinámicamente uno debajo de otro al hacer clic en el botón?
Respuesta
La coordenada Top
para los controles colocados en un ScrollBox necesita tener en cuenta la cantidad de "desplazamiento" que ya tuvo lugar. Si agrega los controles de una sola vez, esto no es un problema, porque ScrollBox no tiene la posibilidad de "desplazarse".
Si agrega controles a ScrollBox después de tiene la posibilidad de "desplazarse", debe tener en cuenta la cantidad de "desplazamiento" vertical que tuvo lugar. Aquí hay una pieza de código que agregará etiquetas al ScrollBox1
, teniendo en cuenta el desplazamiento vertical para que los controles no se superpongan entre sí. Aquí estoy usando la propiedad "Etiqueta" del formulario para contener el Top
para el próximo control agregado, y también estoy usando Tag
para generar nombres únicos para las etiquetas (para que pueda ver que están yendo al ScrollBox en el correcto coordenadas).
procedure TForm31.Button1Click(Sender: TObject);
var L: TLabel;
begin
L := TLabel.Create(Self);
L.Caption := 'Test: ' + IntToStr(Tag);
L.Parent := ScrollBox1;
L.Top := Tag + ScrollBox1.VertScrollBar.Size - ScrollBox1.VertScrollBar.Position;
Tag := Tag + L.Height;
end;
Un otro enfoque que utiliza a veces es no perder de vista el último control añadido y la base de las coordenadas para el nuevo control sobre las coordenadas de ese último control añadido:
var LastControl: TControl;
procedure TForm31.Button1Click(Sender: TObject);
var L: TLabel;
begin
L := TLabel.Create(Self);
L.Caption := 'Test: ' + IntToStr(Tag);
L.Parent := ScrollBox1;
if Assigned(LastControl) then
L.Top := LastControl.Top + LastControl.Height
else
L.Top := 0;
Tag := Tag + L.Height;
LastControl := L;
end;
Y sin embargo, otro enfoque sería encontrar bajo el control y añadir su control basado en él de coordenadas:
procedure TForm31.Button1Click(Sender: TObject);
var L: TLabel;
Bottom, TestBottom: Integer;
i: Integer;
begin
// Find "Bottom"
Bottom := 0;
for i:=0 to ScrollBox1.ControlCount-1 do
with ScrollBox1.Controls[i] do
begin
TestBottom := Top + Height;
if TestBottom > Bottom then
Bottom := TestBottom;
end;
L := TLabel.Create(Self);
L.Caption := 'Test: ' + IntToStr(Tag);
L.Parent := ScrollBox1;
L.Top := Bottom;
Tag := Tag + L.Height;
end;
Muchas gracias ... funcionó .. :) – naren
Gracias me ayudó con algo similar. –
- 1. Deshabilitar botón al hacer clic, pero habilitar otro botón
- 2. Agregar componentes de Primefaces dinámicamente
- 3. java swing dinámicamente agregar componentes
- 4. Ir a diferentes URL al hacer clic en el botón
- 5. organizando div uno debajo del otro
- 6. Panel ExtJs: agregar componentes dinámicos
- 7. java - ¿Cómo podría agregar dinámicamente el componente swing a la interfaz gráfica de usuario al hacer clic?
- 8. ¿Cómo volver a cargar la imagen de Zend Captcha al hacer clic en el botón Actualizar?
- 9. cómo agregar dbclick() al hacer clic con el botón derecho en jquery
- 10. ¿Cómo colocar un div dinámicamente debajo de otro?
- 11. ¿Cómo hacer que el botón no se pueda hacer clic después de hacer clic en él?
- 12. jQuery - eliminar dinámicamente los elementos del encabezado al hacer clic
- 13. Android enviar SMS automáticamente al hacer clic en el botón
- 14. ¿Ejecuta una función PHP al hacer clic en el botón?
- 15. ¿Cómo se maneja un botón al hacer clic en Android?
- 16. ¿Cómo agregar un div al hacer clic en un botón en jquery?
- 17. ¿Cómo agregar el botón Hecho al teclado?
- 18. Botón de opción de verificación al hacer clic en DIV
- 19. Rotar texto al hacer clic en evento
- 20. Coloque los elementos flotados directamente uno debajo del otro
- 21. Agregar acción de hacer clic a NSTextField
- 22. Botón al hacer clic en cambio de estado visual
- 23. Cómo agregar el botón al contexto "submit_row" en django
- 24. matlab múltiple x eje uno debajo de otro
- 25. ¿Cómo agregar múltiples componentes a un JFrame?
- 26. jquery agregar dinámicamente al acordeón
- 27. ¿Cómo agregar componentes JSF existentes a mis propios componentes personalizados?
- 28. añadiendo cuadros de texto dinámicamente a un formulario con el clic de un botón
- 29. ¿Cómo agregar botones dinámicamente a mi formulario?
- 30. ¿Cómo agregar un botón que se puede hacer clic en la celda de la tabla?
debe haber alguna propiedad del ScrollBox, como '' ScrollTop' o ScrollWhatever'. Puede restarlo de la nueva posición del componente. –
No puedo encontrar ninguna propiedad como ScrollTop .. :( – naren