Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi HTMLViewer D2009 Scrollen? (https://www.delphipraxis.net/136803-htmlviewer-d2009-scrollen.html)

cherry 8. Jul 2009 08:27


HTMLViewer D2009 Scrollen?
 
Hi

Toms hat mich auf folgende Kompo aufmerksam gemacht: HTMLViewer D2009

Ich brauche die Komponente für mein kleines Chat Programm. Hab mal folgenden Testcode erstellt:

Delphi-Quellcode:

var
  Form1: TForm1;
  HtmlCode: TStringList;

.
.
.

procedure TForm1.AddHTML(Text: AnsiString);
begin
  HtmlCode.Delete(HtmlCode.Count-1);
  HtmlCode.Delete(HtmlCode.Count-1);
  HtmlCode.Add('
');
  HtmlCode.Add(Text);
  HtmlCode.Add('</body>');
  HtmlCode.Add('</html>');
  HtmlViewer1.LoadFromString(HtmlCode.Text);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  AddHTML(Edit1.Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  HtmlCode := TStringList.Create;
  HtmlCode.Add('<html>');
  HtmlCode.Add('<body bgcolor="#FFFFFF">');
  HtmlCode.Add('Hallo');
  HtmlCode.Add('</body>');
  HtmlCode.Add('</html>');

  HtmlViewer1.LoadFromString(HtmlCode.Text);
end;
Jetzt möchte ich aber, dass immer der letzte Eintrag angezeigt wird, sprich ganz nach unten Scrollen.
Aber wie stell ich das an?

cherry 8. Jul 2009 08:29

Re: HTMLViewer D2009 Scrollen?
 
Ich muss es immer zuerst Posten damit ich es dann selber erkenne. :-D

Delphi-Quellcode:
HtmlViewer1.VScrollBarPosition := HtmlViewer1.Height;

XXcD 23. Jul 2009 13:01

Re: HTMLViewer D2009 Scrollen?
 
Deine Idee ist ja schon nicht schlecht, aber ich beschäftige mich gerade auch mit dem Problem.
Und mir ist aufgefallen, dass du einen kleinen Fehler in deiner Lösung hast.
Mit HtmlViewer1.Height bekommst du nur die Höhe des HtmlViewer und nicht des Dokumenteninhalts.
Das heisst wenn dein HtmlViewer 200 hoch ist, scrollt der immer nur bis Position 200 und sobald dein Text im Fenster mehr als 200 hoch ist bleibt der einfach stehen mit dem scrollen.

Ich habe das problem jetzt mit HTML Anker gelöst, kann man einfach bei Google finden.

Dort ist mir aber auch aufgefallen, wenn man durch das Fenster scrollt um alte Nachrichten zu lesen, scrollt der beim ankommen einer Nachricht direkt wieder nach unten.
Das müsste man noch irgendwie lösen indem man abfragt ob das Fenster ganz nach unten gescrollt ist.

cherry 23. Jul 2009 13:19

Re: HTMLViewer D2009 Scrollen?
 
Zitat:

Zitat von XXcD
Deine Idee ist ja schon nicht schlecht, aber ich beschäftige mich gerade auch mit dem Problem.
Und mir ist aufgefallen, dass du einen kleinen Fehler in deiner Lösung hast.
Mit HtmlViewer1.Height bekommst du nur die Höhe des HtmlViewer und nicht des Dokumenteninhalts.
Das heisst wenn dein HtmlViewer 200 hoch ist, scrollt der immer nur bis Position 200 und sobald dein Text im Fenster mehr als 200 hoch ist bleibt der einfach stehen mit dem scrollen.

Das Problem habe ich bereits erkannt kurz nach dem letzten Posting. Habe nur vergessen die richtige Lösung erneut zu posten:

Delphi-Quellcode:
OutputWindow.VScrollBarPosition := OutputWindow.MaxVertical;
Zitat:

Zitat von XXcD
Dort ist mir aber auch aufgefallen, wenn man durch das Fenster scrollt um alte Nachrichten zu lesen, scrollt der beim ankommen einer Nachricht direkt wieder nach unten.
Das müsste man noch irgendwie lösen indem man abfragt ob das Fenster ganz nach unten gescrollt ist.

Das ist ja auch nicht so ne Sache... Probier mal was in der Art:
Delphi-Quellcode:
if OutputWindow.VScrollBarPosition > OutputWindow.MaxVertical - 35 then
  OutputWindow.VScrollBarPosition := OutputWindow.MaxVertical;

XXcD 23. Jul 2009 14:16

Re: HTMLViewer D2009 Scrollen?
 
Jo funktioniert einwandfrei man muss nur noch die höhe von HtmlViewer mit reinrechnen:

Delphi-Quellcode:
position:=HTMLViewer1.VScrollBarPosition;
...
//Inhalt laden
...
if position > HTMLViewer1.MaxVertical - HTMLViewer1.Height - 35 then
begin
  HTMLViewer1.VScrollBarPosition := HTMLViewer1.MaxVertical;
end
else
begin
HTMLViewer1.VScrollBarPosition:=position;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz