Entwickler-Ecke
Internet / Netzwerk - Delphi : Webseitenausschnitt anzeigen ohne Frames ?
Sithlord - Sa 07.06.08 21:54
Titel: Delphi : Webseitenausschnitt anzeigen ohne Frames ?
Hallo, ich würde gerne einen Webseiten ausschnitt anzeigen in Delphi - aber nur die Mitte, Quasi Header, Linke und Rechte Spalte ausgeblendet - die untere auch, nur in der Mitte die Tabelle soll angezeigt werden !
Wie kann ich das realisieren ?
Ich möchte ein Programm schreiben, welches auf einer Homepage die eigenen, ungelesenen Beiträge anzeigt, dafür müsste ich nur eine Tabelle und auch nur die anzeigen.
Sonst ist es ja Sinnlos für die Forenuser, das sie sonst gleich den Browser öffnen könnten !
F34r0fTh3D4rk - Sa 07.06.08 21:56
Das kommt voll und ganz auf die Website an. Je nach dem ob das Layout mit Frames, Divs oder Tables gemacht ist. (Mit Frames sollte das leicht machbar sein, divs sind vielleicht auch noch gut umsetzbar, aber bei tables hört der Spaß auf ;))
mfg
Sithlord - Sa 07.06.08 22:00
Ich habe den Admin gefragt - es sind leider keine Frames, sonst hätte ich es auch hinbekommen, es sind leider leider leider leider Tabellen ;-(
F34r0fTh3D4rk - Sa 07.06.08 22:03
Du hättest nicht fragen brauchen, der Quellcode hätte es dir verraten. Wenn es aber nur für eine spezielle Seite ist, könntest du in diesen mal hineinschauen und gucken wo was beginnt, in deinem Programm musst du dann halt alles was nicht sichtbar sein soll auskommentieren lassen oder löschen.
mfg
Sithlord - Sa 07.06.08 22:09
Bloß wie soll ich es auskommentieren ?
Ich muss in Delphi ja die Seite öffnen - kann ich irgendwie die Tabelle in eine Browserkomponente laden - nur mit dem Inhalt dieser Tabelle ?
Mfg Sithlord
Andreas L. - So 08.06.08 01:14
1. Seite herunterladen (
URLDOWNLOADTOFILE ,
IDHTTP)
2. Herausfinden wo die Tabelle beginnt und endet und in einen String kopieren (
COPY,
POS)
3. String im WebBrowser anzeigen
Dann werden halt keine Styles übernommen. Musst also zuvor noch den Stylesheet-Block bzw. -Link extrahieren.
Sithlord - So 08.06.08 08:54
Cool - danke !
Nein, Das Style ist net so wichtig, muss ja nur als Tabelle angezeigt werden - vielen dank, ich melde mich, wenn es geht !
ähhm, wie kann ich nur die Tabelle kopieren - sie wächst und schrumpft dynamisch, ich müsste also vom allgemeinem Table Anfang bis zum allgemeinem Table Ende kopiern lassen - wie kann ich das ?
F34r0fTh3D4rk - So 08.06.08 10:25
hi,
ich würde ja eher als ab <body> bis zur table löschen und ab dem ende der table wieder alles bis zu </body> löschen. So läufst du nicht Gefahr doch irgendetwas wichtiges auszulassen. (auch javaskript code segmente würde ich drinne lassen, die dürfen afaik überall stehen)
mfg
Sithlord - So 08.06.08 10:39
Jetzt bräuchte ich nur noch ein Codeansatz - ich weiß ja, wie man inhalte von txt Dateien löscht - aber nicht wie ich nur vom Anfang bis zur Table und vom Tableende bis zur ende der Datei lösche ;-)
Mfg Sithlord
F34r0fTh3D4rk - So 08.06.08 10:48
naja entweder hat die tabelle eine spezielle eigenschaft <table class="content"> die einmalig ist, oder du schaust einfach wie viele tabellen vorher kommen. (so lange diese zahl nicht variable ist, sollte das auch gehen)
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| for i := 1 to length(str) do if (copy(str, i, length('<table>')) = '<table>') then begin end; |
bzw suchst du erstmal nach body (das geht auch mit pos) und fängst da an zu suchen ;)
mfg
Sithlord - So 08.06.08 20:23
Die Tabelle hat eine spezielle Kennzeichnung - nennt sich "Forenuebersicht" ohne "" !
Wie muss ich das Script nun verändern - sorry das ich so oft nachfrage, aber in diese Richtung habe ich keine Ahnung ;-)
Andreas L. - So 08.06.08 20:45
Sithlord hat folgendes geschrieben: |
Die Tabelle hat eine spezielle Kennzeichnung - nennt sich "Forenuebersicht" ohne "" !
Wie muss ich das Script nun verändern - sorry das ich so oft nachfrage, aber in diese Richtung habe ich keine Ahnung ;-) |
Überleg doch mal!!
Delphi-Quelltext
1:
| if (copy(str, i, length('<table name="Forenuebersicht">')) = '<table>') then |
Sithlord - So 08.06.08 20:54
Oh - ja - ich bin wohl heute nicht sehr Fit im Kopf - ist ja auch Sonntag ^^
Also, dies ist der Code :
if (copy(str, i, length('<table name="Forenuebersicht">')) = '<table>') then
-Dann ist copy der Befehl zum kopieren
-str mein String in den das alles geladen wird
-was ich nicht verstehe wozu "i" gebraucht wird
-die länge ist ja length - wird die auch gebraucht ? Meine Tabelle ist dynamisch wachsend ;-)
Sorry - aber ich habe leider keinen Plan von so einem einfachen Stück Code - naja, bin ja auch Müde ;-)
Andreas L. - So 08.06.08 21:13
Delphi-Quelltext
1: 2: 3:
| str := IdHttp.Get('http://deinesiete.de'); str := Copy(str, pos('<table name="Forenuebersicht">', str), pos('</table>', str) - pos('<table name="Forenuebersicht">', str) + 8); |
Copy erwartet 3 Parameter:
1. Einen String in dem, der zu kopierende Text enthalten ist
2. Zeichen-Index bei dem begonnen wird. Gibst du hier 1 an, wir ab dem ersten Zeichen kopiert. Wir suchen an dieser Stelle mit pos nach dem ersten Vorkommen der Tabelle
3. Wie viele Zeichen kopiert werden sollen.
Wenn du zu müde bist solltest du morgen weitermachen...
Sithlord - So 08.06.08 21:28
Nein, noch gehts - muss ja Fussball schauen ^^
Ok, Danke!
Ich werde es probieren, jetzt habe ichs verstanden ;-)
Sithlord - So 08.06.08 21:53
Mhh - ich habe nun folgendes gemacht -es geht, allerdings wird meine Tabelle nicht angezeigt, nur manchmal ein bisschen unlesbares aus der HTML Sprache !
Ich finde nicht den genauen Tabellenanfang - ende !
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click(Sender: TObject); var str:string; begin
str:=IdHTTP.get(edit1.text); str := Copy(str, pos('<table class="forenUebersicht" cellpadding="0" cellspacing="0" border="0" width="100%">', str), pos('</table>', str) - pos('<table class="forenUebersicht" cellpadding="0" cellspacing="0" border="0" width="100%">', str) + 40); SaveStringToFile ('C:\table.htm', str); webbrowser1.Navigate('C:\table.htm'); end; |
Und geladen wird die Datei vom Webbrowser auch nur !, wenn ich C:\ davor eingebe - sonst nicht !
Gespeichert wird der String auch ordnungsgemäß !
Nur zeigt er den Tabellenanfang /das Tabellenende nicht an ! -.-
Ich frage mal den Admin vom Forum ....
Moderiert von
Narses: Delphi-Tags hinzugefügt
Andreas L. - So 08.06.08 22:13
Hast du dir IdHTTP aufs Form gezogen? Falls nicht musst du eine Variable deklarieren und diese instantiieren.
Delphi-Quelltext
1: 2: 3: 4: 5:
| var downloader: TIdHTTP; begin downloader := TidHTTP.create; |
Wie wärs wenn du mal den Link zur Seite postest, dann kann ich mir den HTMl-Code mal anschauen. Sollte so nämlich funktionieren.
Sithlord hat folgendes geschrieben: |
Und geladen wird die Datei vom Webbrowser auch nur !, wenn ich C:\ davor eingebe - sonst nicht !
|
Schon klar. Woher soll Delphi bzw. der WebBrowser auch wissen das du auf C:\ gespeichert hast. Man sollte immer und überall absolute Pfade verwenden. Noch was: ich nehme mal an du speicherst jetzt nur zum Test auf C:. Denk dran, wenn deine Anwendung auch auf einen anderen Rechner laufen soll musst du unbedingt ein von nicht-Admins beschreibbares Verzeichnis nehmen. Z. B. den Temp-Ordner. Siehe
GETSHELLFOLDER
Moderiert von
Narses: Zitat entfernt
Andreas L. - So 08.06.08 22:31
Das Problem ost, dass es mehrere </table> gibt. Der findet natürlich den erst besten und nicht den, der zu deiner Suche gehört ;-) Achja, die Zahl die ich als letzten Parameter bei copy übergeben habe, muss auch weiterhin 8 sein. Wie kommst du auf 40?
Sithlord - So 08.06.08 22:41
Oh , sorry - ich hab aus der Not herumprobiert ^^.
Naja - wie dem auch sei - lässt sich das irgendwie so einstellen, das er erst den anfang der table sucht, dann weiter nach der </table> sucht , ohne das er jedesmal von vorne anfängt ?
Mfg Sithlord
Andreas L. - So 08.06.08 22:52
In dem du alles bis zum Fund von dem Beginntag löscht.
Delphi-Quelltext
1:
| Delete(str, 1, pos('<table balbla..>', str)); |
Jetzt aber schnell die Delphi-Hilfe öffnen und sämtliche String-Verarbeitungsroutinen lernen und den restlichen Code selber machen :mahn:
nagel - Mo 09.06.08 01:54
Oder PosEx verwenden.
F34r0fTh3D4rk - Mo 09.06.08 09:52
Um das Problem mit den mehrfachen Tabellen (also Tabellen in deiner Suchtabelle) zu umgehen kannst du folgendes tun:
Du nimmst dir eine variable, nenne sie t (oder wie auch immer) und immer wenn du eine tabelle (<table>) findest, inkrementierst du diese variable und wenn du ein </table> findest, dekrementierst du sie. wenn sie dann bei 0 angelangt ist, hast du das ende deiner Haupttabelle erreicht. Das funktioniert allerdings nur, wenn alle Tabellen ineinander verschachtelt sind.
Du könntest allerdings auch eine XML / HTML Komponente zur Rate ziehen, diese sind für solche Strukturen schließlich ausgelegt ;)
Dann könntest du auch "width: 100%" machen, falls es nicht schon so ist, damit es gut in dein Programm passt.
mfg
Sithlord - Mo 09.06.08 20:43
Hallo !
Das hat jetzt geklappt *freu* .
Nun - die Tabelle wird gut dargestellt, also in normaler Schrift ohne unnötigen Schnickschnack. Nun noch 1 Problem - aber ich glaube, das muss ich den Admin fragen !
Ich habe nun genau die Tabelle eingegeben !
Es wurde auch Autor, Beiträge und so weiter angezeigt, nur stand da unter dann "Keine Ergebnisse" , also das, was normalerweise erscheint, wenn man sich alles angeschaut hat - nun, in dem stückchen code, welchen ich mir rausgesucht habe, kommt dieser Satz aber nicht vor...
Kann da irgendwas falsch sein ?
Oder muss ich bei der Tabelle was beachten ? Sonst geht ja alles ...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!