TIpHtmlPanel

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

TIpHtmlPanel

Beitrag von hbr »

Hallo,
ich hoffe mir kann jemand helfen.

Ich möchte gerne bei dem IpHtmlPanel die Vertikale Scrollbar ABSCHALTEN, bzw ausblenden.
Ist Das möglich? Wenn ja Bitte wie.

Gruß

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: TIpHtmlPanel

Beitrag von Christian »

Was erwartest du dann fürn verhalten vom Control?
Soll einfach alles was darüberhinaus geht abgeschnitten sein ?
Oder willst dus dann zur seite "gedrückt" haben ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: TIpHtmlPanel

Beitrag von hbr »

Christian hat geschrieben:Was erwartest du dann fürn verhalten vom Control?
Soll einfach alles was darüberhinaus geht abgeschnitten sein ?
Oder willst dus dann zur seite "gedrückt" haben ?
einfach nur die Darstellung im HTMLPANEL ohne Scrollbalken!
Denn scrollen kann man ja mit
TIpScrollAction = (hsaHome, hsaEnd, hsaPgUp, hsaPgDn, hsaLeft, hsaRight, hsaUp, hsaDown)

Gruß

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: TIpHtmlPanel

Beitrag von pluto »

Ich bin mir nicht sicher, aber man könnte die Komponente leicht ein wenig anpassen.
Dürfte nicht weiter Problematisch sein.

Du musst einfach nur von der Klasse eine weitere Ableiten. Dann könnte man eine entsprechende Eigenschaft hinzufügen. Ein andere Weg wäre, die Komponente zu Kopieren, den Namen zu verändern und dann anzupassen.

Ich habe eben nach geschaut. Es dürfte sogar noch ein einfacheren Weg geben:
HScroll und VScroll sind von Typ TIpHtmlScrollBar und das hat eine Eigenschaft Visible.
Ich weiß jetzt nicht ob man die Manuell setzten kann. Aber ein versuch ist es wert. Sonst sind mir nur die ersten Beiden Aufwendigereren Wege bekannt.
MFG
Michael Springwald

hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: TIpHtmlPanel

Beitrag von hbr »

pluto hat geschrieben:Du musst einfach nur von der Klasse eine weitere Ableiten.
Danke, hab ich versucht, doch mir ist das nicht gelungen, weil ich nicht genau weiß wie.

Habe mir jetzt erst einmal geholfen, indem ich die Form so verkleinere, das der VScroll verdeckt wird.
Ist zwar nicht die Lösung, aber man sieht es nicht.

Gruß

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: TIpHtmlPanel

Beitrag von Christian »

Die Scrollbars sind in einer InnerHTMLPanel Klasse an die man von aussen nicht herankommt (hab jedenfalls nichts gefunden gehabt).
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: TIpHtmlPanel

Beitrag von pluto »

Nun, ich meinte eigentlich direkt von TIpHTMLPanel ableiten.

Und was ist mit HScroll und VScroll? die sind von Typ TIpHtmlScrollBar. Die Eigenschaften sind in Public, z.b. Visible.

Ein Blick in den Code z.b. bei WMHScroll zeigt mir das diese Variablen HScroll hier auch genutzt werden.

WMHScroll und WMVScroll sind jedoch unter protected und die braucht man auch nicht von außen.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: TIpHtmlPanel

Beitrag von pluto »

Ich sehe gerade HScroll und VScroll kann man nicht ohne weiteres nutzen.

Weil TIpHtmlFrame nur einmal in TIpHtmlFrame verwendet wird und dort protected ist.

Edit1: Das ist zwar nicht gerade der einfachste Weg, aber du könntest versuchen eine neue CSS Eigenschaft hinzuzufügen. Über CSS lässt sich das Scrollverhalten einstellen. Ich habe mal einige CSS Eigenschaften hinzugefügt, aber keine die das Scrollen Beeinflusst.
Damit würdest du auch gleichzeitig das HTML Panel weiter Entwickeln.

Edit2: Die CSS Eigenschaft heißt
http://www.css4you.de/overflow.html
Hast du denn sowas gemeint? Ich schau mir gerade den Code vom HTML Panel an, kann aber nichts versprechen.

Edit3: Wenn du bereit bist eine bestimmte Methode ein wenig zu Ändern, müsste du am Ziel sein. Ich spreche von dieser Methode hier:
TIpHtmlScrollBar.Update
Dann würde ich dir aber raten, ein Fork von der Komponente zu erstellen. Die Änderung ist Minimal. Aber das verrate ich erst später.
MFG
Michael Springwald

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: TIpHtmlPanel

Beitrag von Michl »

Wenn´s dir wirklich ganz ganz wichtig ist, die Scrollbars auszublenden, hat Pluto eigentlich recht und man braucht nur die VScroll- und HScroll.Visible auf False zu stellen. Bevor man die ganzen Klassen ableitet und mit den eigenen verknüpft, kannst du auch recht einfach die Sichtbarkeit in der Unit IpHtml ausstellen. Achtung, das gilt dann aber für alle Projekte, mit denen du auf diese Unit zugreifst!!! Hilfsweise könntest du eine eigene Unit "MyIpHtml" erstellen und dort diese Änderung machen.

Einfach mal in der Unit IpHtml (bzw. in MyIpHtml) nach { TIpHtmlInternalPanel } suchen und dort Visible auf False stellen:

Code: Alles auswählen

{ TIpHtmlInternalPanel }  
 
constructor TIpHtmlInternalPanel.Create(AOwner: TComponent);
begin
  inherited;
  ControlStyle := ControlStyle + [csCaptureMouse];
  DragMode := dmManual;
  HScroll := TIpHtmlScrollBar.Create(Self, sbHorizontal);
  HScroll.Tracking := True;
  HScroll.Visible:=false;  //hier
  VScroll := TIpHtmlScrollBar.Create(Self, sbVertical);
  VScroll.Tracking := True;
  VScroll.Visible:=false;  //und hier
  HintWindow := THintWindow.Create(Self);
  HintWindow.Color := Application.HintColor;
end; 
Zuletzt geändert von Michl am So 15. Sep 2013, 14:46, insgesamt 1-mal geändert.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: TIpHtmlPanel

Beitrag von pluto »

Problem könnte sein Michl, dass Visible zwischen durch wieder auf True gesetzt wird und zwar Automatisch. D.H. man müsste verhindern, dass Visible verstellt werden kann. Aber ich such noch gerade die Passende Code-Zeile.

Edit1: Scheinbar wird ShowScrollBar innerhalb vom HTML Panel überhaupt nicht aufgerufen. ShowScrollBar ist eine API Funktion, mit der man Scrollbalken Sichtbar und Unsichtbar machen kann.
MFG
Michael Springwald

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: TIpHtmlPanel

Beitrag von Michl »

pluto hat geschrieben:Problem könnte sein Michl, dass Visible zwischen durch wieder auf True gesetzt wird und zwar Automatisch.
Ich habs mal ausprobiert, selbst wenn ich in den Bereich komme, wo sie angezeigt werden sollten (habe mal die Form entsprechend verkleinert und wieder vergrößert, Anchors gesetzt), die Scrollbars bleiben unsichtbar, sollte also gehen!

Auch wenn ich mit SetHtml ein anderen Inhalt lade, die Scrollbars bleiben unsichtbar.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: TIpHtmlPanel

Beitrag von hbr »

Michl hat geschrieben:
pluto hat geschrieben:Problem könnte sein Michl, dass Visible zwischen durch wieder auf True gesetzt wird und zwar Automatisch.
Ich habs mal ausprobiert, selbst wenn ich in den Bereich komme, wo sie angezeigt werden sollten (habe mal die Form entsprechend verkleinert und wieder vergrößert, Anchors gesetzt), die Scrollbars bleiben unsichtbar, sollte also gehen!

Auch wenn ich mit SetHtml ein anderen Inhalt lade, die Scrollbars bleiben unsichtbar.
Danke für die rege Anteilnahme.
ich habe das schon an der Stelle ausprobiert und es Funktioniert nicht weil Irgendwo wieder True neu gesetzt wird.

Ich muss dabei sagen, dass ich die Procedure TIpHtmlFrame.Scroll(Action: TIpScrollAction);
erweitert habe für ein Automatisches nach unten scrollen.

Code: Alles auswählen

hsaAuto :
    begin
      OffsetRect(R, 0, 1);
      if R.Bottom > FHtml.FPageRect.Bottom then begin
        R.Bottom := FHtml.FPageRect.Bottom;
        R.Top := R.Bottom - H;
      end;
      if R.Bottom = FHtml.FPageRect.Bottom  Then
       Begin
        R.Top := 0;
        R.Bottom := R.Top + H;
       end;
    end;    

was auch einwandfrei funktioniert, jedoch wie beschrieben der Balken immer wieder neu gezeichnet wird.

Optimal wäre, wenn man von dieser Stelle aus Zugriff auf VScroll hätte.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: TIpHtmlPanel

Beitrag von Michl »

hbr hat geschrieben:ich habe das schon an der Stelle ausprobiert und es Funktioniert nicht weil Irgendwo wieder True neu gesetzt wird.
Und bei welcher Gelegenheit? Ich kann anstellen, was ich will, bekomme die Scrollbars nicht wieder sichtbar...

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

hbr
Beiträge: 321
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: TIpHtmlPanel

Beitrag von hbr »

Michl hat geschrieben:
hbr hat geschrieben:
Und bei welcher Gelegenheit? Ich kann anstellen, was ich will, bekomme die Scrollbars nicht wieder sichtbar...
Sorry, VScroll.Visible:=false; Richtig!

Nur damit setzt man auch alle diese ausser Funktion.
TIpScrollAction = (hsaHome, hsaEnd, hsaPgUp, hsaPgDn,
hsaLeft, hsaRight, hsaUp, hsaDown, hsaAuto);

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: TIpHtmlPanel

Beitrag von Michl »

Habe eben nochmal ein bischen damit gespielt. Mit

Code: Alles auswählen

{ TIpHtmlInternalPanel }
 
constructor TIpHtmlInternalPanel.Create(AOwner: TComponent);
begin
  inherited;
  ControlStyle := ControlStyle + [csCaptureMouse];
  DragMode := dmManual;
  HScroll := TIpHtmlScrollBar.Create(Self, sbHorizontal);
  HScroll.Tracking := True;
  HScroll.Visible:=false;  //hier
  VScroll := TIpHtmlScrollBar.Create(Self, sbVertical);
  VScroll.Tracking := True;
  VScroll.Visible:=false;  //und hier
  HintWindow := THintWindow.Create(Self);
  HintWindow.Color := Application.HintColor;
end; 
und

Code: Alles auswählen

procedure TIpHtmlScrollBar.SetPosition(Value: Integer);
var
  Code: Word;
begin
  if csReading in FControl.ComponentState then
    FPosition := Value
  else begin
//    if Value > FCalcRange then Value := FCalcRange    //hier
//    else
    if Value < 0 then Value := 0; 
...
funktionieren die TIpScrollAction bei mir, weiss aber nicht, ob das Auskommetieren der Bereichsprüfung ein guter Weg ist (kommt darauf an, wie gut Value zuvor berechnet wurde). Bei mir hatte ich erstmal keine Probleme.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Antworten