Du lädst 'ne HTML-Datei, supi! Beantwortet meine Frage aber nicht ...
WebGadget zur Zeile x scrollen
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Ähhh, ja .....
Du lädst 'ne HTML-Datei, supi! Beantwortet meine Frage aber nicht ...
Du lädst 'ne HTML-Datei, supi! Beantwortet meine Frage aber nicht ...
Windows 10 Pro, 64-Bit / Outtakes | Derek
als erstes markiert man mit der maus ganz normal eine bestimmte stelle im text... dann wird die markierung in die zwischenablage kopiert und dann aus der zwischenablage in einen normalen string kopiert und im html text gesucht wird der text nur eineinziges mal im html code gefunden dann wird um den text ein anker gesetzt andernfalls wird ein fehler ausgegeben "text nicht oder zuoft gefunden" oder so ... dann muss man halt einen kürzeren oder längeren text markieren ja anch dem...
hier mal ein democode der funzt ... wird nur ne html datei benötigt
einfach mal ne html datei erstellen und pfad anpassen dann starten und innerhalb von 5 sec eine stelle im text markieren. dann wird eine neu html datei erstellt (Pfad anpassen!) und geöffnet.
... biite entschuldigt meine unordung 
hier mal ein democode der funzt ... wird nur ne html datei benötigt
Code: Alles auswählen
#OLECMDID_COPY = 12
#OLECMDEXECOPT_DONTPROMPTUSER = 2
#Web_400 = 0
Ankername.s = "Anker"
Quelldatei.s = "D:\Quelle.htm"
Zieldatei.s = "D:\Ziel.htm"
Procedure SetAnkerIntoHTML(source.s, destination.s, text.s, anker.s)
If Not text Or Not anker : ProcedureReturn 2 : EndIf ;Parameter Prüfen
If Not source Or Not destination : ProcedureReturn 1 : EndIf ;Parameter Prüfen
If Not ReadFile(0, source) ;Quelle öffnen
ProcedureReturn 1
EndIf
html.s = Space(Lof(0)) ;Speicher reservieren
ReadData(0, @html, Lof(0)) ;Daten Lesen
CloseFile(0)
cnt = CountString(html, text) ;Text zählen (darf nur einmal vorkommen
If cnt = 0 : ProcedureReturn 2 : EndIf
If cnt > 1 : ProcedureReturn 3 : EndIf
pos = FindString(html, text, 1) ;Text position ermitteln
If pos = 0 : ProcedureReturn 2 : EndIf
outhtml.s = Left(html, pos-1) + "<a name="+Chr(34)+anker+Chr(34)+">" ;Teil vor dem text + anker anfang
outhtml = outhtml + Mid(html, pos, Len(text)) + "</a>" ;Text + Anker ende
outhtml = outhtml + Right(html, Len(html)-Len(text)-(pos-1)) ;Teil nach dem Text
If Not CreateFile(0, destination) ;Ziel datei erstellen
ProcedureReturn 1
EndIf
WriteData(0, @outhtml, Len(outhtml)) ;HTML code reinschreiben
CloseFile(0) ;fertig...
ProcedureReturn 0
EndProcedure
If OpenWindow(0, 0, 0, 600, 300, "WebGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
WebGadget(#Web_400, 10, 10, 580, 280, Quelldatei)
timestamp = ElapsedMilliseconds()+5000
While GetGadgetAttribute(#Web_400, #PB_Web_Busy) Or ElapsedMilliseconds() < timestamp
WindowEvent()
Wend
SetClipboardText("") ;Zwischenablge leeren
WebObject.IWebBrowser2 = GetWindowLong_(GadgetID(#Web_400), #GWL_USERDATA) ;Pointer zum Interface holen
WebObject\ExecWB(#OLECMDID_COPY, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0) ;Markierten text kopieren
Sprungziel.s = GetClipboardText() ;Zwischenablage auslesen
res = SetAnkerIntoHTML(Quelldatei, Zieldatei, Sprungziel, Ankername) ;Text Suchen und Anker einbinden
If res = 1 ;File Error
MessageRequester("Fehler", "File Error!", #MB_ICONERROR)
ElseIf res = 2 ;Text nicht gefunden
MessageRequester("Fehler", "Text konnte nicht im HTML-Code gefunden werden!", #MB_ICONERROR)
ElseIf res = 3 ;Text zu oft
MessageRequester("Fehler", "Text wurde zu oft im HTML-Code gefunden!", #MB_ICONERROR)
Else
SetGadgetText(#Web_400, Zieldatei+"#"+Ankername) ;HTML Code Laden
EndIf
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Aus großer Kraft folgt große Verantwortung.
> Wie willst du jetzt mit einem Anker bspw. zur Zeile #3 springen?
OK, ich wusste vorher natürlich auch nicht, dass "reiner Text" angezeigt werden soll. Hätte ja sein können, dass es HTML-Code ist, der z. B. BR oder P-Tags enthält. Man zählt einfach 2 dieser Tags ab und schon ist man in der 3. Zeile. Oder man sucht im Quellcode nach #CRLF$ , oder, oder, oder - je nachdem wie der Quellcode vorliegt.
> Auch wenns vielleicht nicht ganz ernst gemeint war
Richtig, das war wirklich nicht ernst gemeint. Ich wollte nur eine Reaktion wie diese provozieren:
Hab grad nen bisschen Spaß dran.
@ stalky
Warum der umständliche Weg über die Zwischenablage?
Es geht doich einfacher mit GetGadgetItemText() und #PB_Web_SelectedText...
Du brauchst die HTML-Datei nicht auf die Festplatte zwischenspeichern, wenn du dir nur mal richtig die Befehle angucken würdest!
Ich sag's ja imemr wieder, man soll sich Zeit nehmen und nen bisschen in der Hilfedatei schmökern, dann kommt man von selbst auf die Lösung seiner Probleme.
OK, ich wusste vorher natürlich auch nicht, dass "reiner Text" angezeigt werden soll. Hätte ja sein können, dass es HTML-Code ist, der z. B. BR oder P-Tags enthält. Man zählt einfach 2 dieser Tags ab und schon ist man in der 3. Zeile. Oder man sucht im Quellcode nach #CRLF$ , oder, oder, oder - je nachdem wie der Quellcode vorliegt.
> Auch wenns vielleicht nicht ganz ernst gemeint war
Richtig, das war wirklich nicht ernst gemeint. Ich wollte nur eine Reaktion wie diese provozieren:
Weil ich wusste, das sowas kommen würde...Fluidi hat geschrieben:piss mal nicht ganz so 'nen dicken Strahl ...
@ stalky
Warum der umständliche Weg über die Zwischenablage?
Es geht doich einfacher mit GetGadgetItemText() und #PB_Web_SelectedText...
Du brauchst die HTML-Datei nicht auf die Festplatte zwischenspeichern, wenn du dir nur mal richtig die Befehle angucken würdest!
Ich sag's ja imemr wieder, man soll sich Zeit nehmen und nen bisschen in der Hilfedatei schmökern, dann kommt man von selbst auf die Lösung seiner Probleme.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy Enddas kann ja jederAND51 hat geschrieben:Es geht doich einfacher mit GetGadgetItemText() und #PB_Web_SelectedText...
doch aus zwei gründen 1. weil mir die anker ja auch noch nach beenden des programms erhalten bleiben sollen und 2. weil sonst die bilder nicht angezeigt werden wenn ich den html text in das gadget streame weil er dann den pfad zu den bildern ned kennt.AND51 hat geschrieben:Du brauchst die HTML-Datei nicht auf die Festplatte zwischenspeichern
Aus großer Kraft folgt große Verantwortung.
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Abgefahren ...
Ich weiß zwar nicht genau was der spätere Verwendungszweck sein wird (gibt es einen?) aber ich denke diese Methode ist wohl eher "suboptimal". Zumal das Ganze in die Hose geht sobald ein Wörter mehr als einmal vorhanden ist.
Ich weiß zwar nicht genau was der spätere Verwendungszweck sein wird (gibt es einen?) aber ich denke diese Methode ist wohl eher "suboptimal". Zumal das Ganze in die Hose geht sobald ein Wörter mehr als einmal vorhanden ist.
Windows 10 Pro, 64-Bit / Outtakes | Derek
mann kann ja auch einen ganzen satzt markieren. und wenn der markierte text mehrmals vorhanden ist dann wird eh ein fehler ausgegeben.Fluid Byte hat geschrieben:Zumal das Ganze in die Hose geht sobald ein Wörter mehr als einmal vorhanden ist.
jeppFluid Byte hat geschrieben:Ich weiß zwar nicht genau was der spätere Verwendungszweck sein wird (gibt es einen?)
Zuletzt geändert von stalky13 am 12.09.2008 14:42, insgesamt 1-mal geändert.
Aus großer Kraft folgt große Verantwortung.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Man kann die Anker auch nummerieren für jedes vorkommen. Je mehr
Anker man zu Wasser läßt, um so sicherer steht das Boot
Anker man zu Wasser läßt, um so sicherer steht das Boot
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
