Recent

Author Topic: Remover scroll vertical en IPro  (Read 3601 times)

mosquito

  • Full Member
  • ***
  • Posts: 138
Remover scroll vertical en IPro
« on: June 10, 2021, 09:52:50 am »
Hola,

quisiera remover el scroll vertical de un IpHtmlPanel (de IPro).
Alguna idea? A ser posible sin "trucos de fontanería", como...
Code: Pascal  [Select][+][-]
  1. form1.width 100;
  2. html1.width 130;
  3.  

Creo recordar que el componente HtmlViewer tenía esta opción, pero busco compilación (Win, Gnu/LInux, Mac) y parece que Mac no está soportado. Además la posibilidad de tocar en tiempo real el arbol DOM me parece una capacidad muy potente de IPro.

Gracias.

P.D.: Me refiero a remover la barra de scroll, no a la susceptibilidad del control a ser scrolleado.
« Last Edit: June 10, 2021, 10:12:12 am by mosquito »

Ñuño_Martínez

  • Hero Member
  • *****
  • Posts: 1186
    • Burdjia
Re: Remover scroll vertical en IPro
« Reply #1 on: June 12, 2021, 12:20:02 pm »
No tengo Mac, así que no sé, pero contesto para que subir el mensaje y que se vea mejor, a ver si alguien sabe.
Are you interested in game programming? Join the Pascal Game Development community!
Also visit the Game Development Portal

Edson

  • Hero Member
  • *****
  • Posts: 1296
Re: Remover scroll vertical en IPro
« Reply #2 on: June 13, 2021, 04:29:29 am »
No manejo el IPro, pero por lo que veo el TIpHtmlPanel, no expone propiedades para controlar la barra de desplazamiento vertical. Me temo que:

- Tendrás que recurrir a trucos de fontanería
- Acceder a campos protegidos del control para acceder a los Scrollbar.
- Preguntar en inglés a ver si alguien más entendido pueda responderte.
- Usar otro control similar.

Lazarus 2.2.6 - FPC 3.2.2 - x86_64-win64 on Windows 10

mosquito

  • Full Member
  • ***
  • Posts: 138
Re: Remover scroll vertical en IPro
« Reply #3 on: June 13, 2021, 09:39:14 am »
Ñuño y Edson: gracias por el interés.
 
La cosa avanza,
la barra de scroll ya no aparece. Lo malo es que ahora tampoco permite hacer scroll por código, que es precisamente lo que ya tenía implementado. No tengo prisa así que iré investigando.

No obviemos que las scrollbars , tanto en el navegador web como en  las aplicaciones desktop han sido una china en el zapato de los maquetadores desde el principio de los tiempos, porque aunque es la puerta de entrada para un diseño customizado, suelen estar fuertemente implementadas con el sistema operativo (necesitan syncro constante y pasar mensajes, algunas funcionalidades de las aplicaciones se encienden y apagan dependiendo de la presencia o ausencia de la scrollbar, entre otras muchas cosas).

Para remover aquí la receta:

1. Cambié el propietario y grupo del directorio de las fuentes para poder modificarlas, aunque al ser una librería tan compacta (1 unidad el panel), creo que la moveré al directorio del proyecto si finalmente funciona. Toy en Gnu/Linux.
   
en el directorio de las fuentes: sudo chown -R user:group *

2. Tocar el constructor, no del panel sino de la clase del scroll:
Code: Pascal  [Select][+][-]
  1. constructor TIpHtmlScrollBar.Create(AControl: TIpHtmlInternalPanel;
  2.   AKind: TScrollBarKind);
  3. begin
  4.   inherited Create;
  5.   FControl := AControl;
  6.   FKind := AKind;
  7.   FPageIncrement := 80;
  8.   FIncrement := FPageIncrement div 10;
  9.   FVisible := False;      // <-------------[TOCADO]
  10.   FUpdateNeeded := True;
  11. end;
  12.  

3. Forzar la escritura de la variable en este procedimiento.
 
Code: Pascal  [Select][+][-]
  1. procedure TIpHtmlScrollBar.SetVisible(Value: Boolean);
  2. begin
  3.   //FVisible := Value; // <-------------[Original]
  4.   fvisible:=false;       // <-------------[Forzado]
  5.   FControl.UpdateScrollBars;
  6. end;
  7.  

* todo esto esta en /componentes/turpopower_ipro/iphtml.pas

Pasos siguientes:

- Plan A: conseguir escroll por código, es el objetivo. (permite liberación total del scroll nativo, o usar una dibujada, que ya la tengo hecha y trabaja perfectamente con otros controles que si permiten esconder el scroll).
 
- Plan B: ver si el componente AT_FlatControls/scrollbar y FKind: TScrollBarKind (de IPro) son primos cercanos (posible injerto).

- Plan C: meter todo el texto no en un <HTML><BODY> sino en un <IFRAME> y tocar el código fuente del parser de esta etiqueta (será divertido).
« Last Edit: June 13, 2021, 10:09:48 am by mosquito »

 

TinyPortal © 2005-2018