PBToolboxAI v4 ← Site

markdownview — u_pbt_markdownview #

← Komponentenreferenz · Inhalt des Handbuchs

markdownview zeigt ein Markdown-Dokument schreibgeschützt in den Farben des Themas: Überschriften, Listen, Tabellen, Aufgabenlisten, farbiger Code, Bilder. Sie setzen den Text in is_markdown oder den Pfad einer Datei in is_source; ein Link navigiert nie, er löst ue_link_clicked aus und die Anwendung entscheidet. Rohes HTML eines Dokuments wird nie ausgeführt.

▶ Live sehen — Demoanwendung, Kachel Markdown viewer, mit dem Code und dieser Seite nebeneinander.


Auf einen Blick #

Userobjectu_pbt_markdownview
EingabeEin Markdown-Text (is_markdown) oder eine Datei des Arbeitsplatzes bzw. eine https://-URL (is_source)
SyntaxCommonMark, dazu die Tabellen, Aufgabenlisten, Durchstreichungen und nackten Links von GitHub
Rückmeldungue_link_clicked für einen Link (die Anwendung entscheidet), ue_loaded / ue_load_failed für eine Datei, ue_search_result für die Suche
SicherheitRohes HTML wird als Text gezeigt; ein javascript:-, vbscript:- oder data:-Link ist nicht anklickbar; ein http://-Bild wird abgelehnt

Schnellstart #

// Show a Markdown file : its pictures and relative links are read against its folder
uo_md.is_source = "C:\Acme\Help\guide.md"

// ... or any text the application has
uo_md.is_markdown = "# Release notes~n~n- [x] Orders~n- [ ] Invoices"

// ue_link_clicked : the viewer never navigates, the application decides where to open as_url

Eigenschaften #

EigenschaftTypStandardBeschreibung
is_markdownstring""Der anzuzeigende Markdown-Text. Ihn zu setzen ersetzt das Dokument (is_source liest sich dann leer); leer leert die Ansicht. Enthaltenes rohes HTML wird als Text angezeigt, nie ausgeführt. Liest sich genau so zurück, wie er gesetzt wurde
is_sourcestring""Eine anzuzeigende Markdown-Datei: ein Pfad des Arbeitsplatzes (.md, .markdown, .txt…), eine file:///-Adresse oder eine https://-URL. Ihre relativen Bilder und Links werden gegen ihren Ordner gelesen. http:// wird abgelehnt (REASON_INSECURE), ebenso jede Datei, die kein Text ist (REASON_UNSUPPORTED); über 16 MB REASON_TOO_LARGE. Sie zu setzen ersetzt das Dokument (is_markdown liest sich dann leer); ue_loaded oder ue_load_failed folgt
ib_search_enabledbooleantrueStrg+F im Dokument öffnet ein Suchfeld — dieselbe Suche wie of_search: Tippen markiert, Eingabe oder F3 weiter, Umschalt+Eingabe oder Umschalt+F3 zurück, Esc schließt. false überlässt die Tastenkombination einer Anwendung, die aus ihrem eigenen Feld sucht
ib_find_match_casebooleanfalseSuchoption: findet nur Text mit derselben Groß-/Kleinschreibung. Der Schalter Aa des Suchfelds ist derselbe Schalter. Live gelesen; of_reset setzt sie auf false zurück
ib_find_whole_wordbooleanfalseSuchoption: findet den Text nur als ganzes Wort (pen wird in pencil nicht gefunden). Der Schalter ab des Suchfelds ist derselbe Schalter. Live gelesen; of_reset setzt sie auf false zurück
is_theme_stylestring""Visueller Stil der Komponente (Konstanten THEME_STYLE_*); leer = der der Anwendung, bei jeder Änderung übernommen
is_theme_modestring""Helle oder dunkle Variante (Konstanten THEME_MODE_*); leer = die der Anwendung, bei jeder Änderung übernommen
il_theme_accentlong-1Akzentfarbe dieser Komponente (-1 = Akzent der Anwendung, sonst der des Designs)
is_tooltipstring""Einfacher Tooltip beim Überfahren der Komponente
is_super_tooltip_titlestring""Titel des erweiterten Tooltips (hat Vorrang vor is_tooltip)
is_super_tooltip_textstring""Text des erweiterten Tooltips (Rich-Markup zulässig)
is_super_tooltip_imagestring""Bild des erweiterten Tooltips

Methoden #

MethodeBeschreibung
of_clear ( ) → longLeert die Ansicht: is_markdown und is_source lesen sich leer; ib_search_enabled und die Suchoptionen behalten ihren Wert (erst of_reset setzt jede Eigenschaft zurück). Liefert 0, -2, wenn die Komponente nicht erstellt ist
of_refresh ( ) → longLiest is_source erneut (von der Platte oder aus dem Netz): so wird eine am selben Pfad neu geschriebene Datei gezeigt; ue_loaded oder ue_load_failed folgt. Liefert 0, -5, wenn kein Dokument gezeigt wird, -2, wenn die Komponente nicht erstellt ist
of_search ( string as_query ) → longMarkiert jedes Vorkommen (standardmäßig ohne Groß-/Kleinschreibung — siehe ib_find_match_case —, als ganzes Wort mit ib_find_whole_word) und springt zum ersten; ein Vorkommen darf über Fettdruck oder einen Link reichen. ue_search_result sagt, wie viele. Eine leere Suche ist of_clear_search. Das Suchfeld öffnet sich mit der Suche darin; mit ib_search_enabled auf false markiert das Dokument nur. Liefert 0, -2, wenn die Komponente nicht erstellt ist
of_search_next ( ) → longGeht zum NÄCHSTEN Vorkommen (nach dem letzten wieder zum ersten); ue_search_result nennt die neue Position. Liefert 0, -2, wenn die Komponente nicht erstellt ist
of_search_prev ( ) → longGeht zum VORHERIGEN Vorkommen (vor dem ersten wieder zum letzten); ue_search_result nennt die neue Position. Liefert 0, -2, wenn die Komponente nicht erstellt ist
of_clear_search ( ) → longHebt die Suche auf: keine Markierung und kein aktuelles Vorkommen mehr (of_match_count liefert 0), das Suchfeld schließt sich. Liefert 0, -2, wenn die Komponente nicht erstellt ist
of_match_count ( ) → longLiefert die Anzahl der Vorkommen der aktuellen Suche, LIVE gelesen — die 12 einer Statuszeile 3 / 12. 0 ohne Suche
of_match_index ( ) → longLiefert die Position (ab 1) des aktuellen Vorkommens, LIVE gelesen — die 3 einer Statuszeile 3 / 12. 0 ohne Vorkommen
of_toc ( ref string as_titles[], ref long al_levels[], ref string as_anchors[] ) → longDas Inhaltsverzeichnis, LIVE gelesen: ein Eintrag je Überschrift, in Reihenfolge — ihr Text, ihre Ebene (1 bis 6) und ihr Anker (was of_scroll_to und ein #anker-Link nehmen, nach GitHub-Art: „Release checklist“ ergibt release-checklist). Die Arrays werden zuerst geleert. Liefert die Anzahl der Überschriften, 0 für ein Dokument ohne
of_scroll_to ( string as_anchor ) → longBringt die Überschrift as_anchor an den oberen Rand der Ansicht: ihr Anker, wie of_toc ihn liefert, mit oder ohne #, oder ihr Text. Liefert 0, -5, wenn keine Überschrift passt, -2, wenn die Komponente nicht erstellt ist

Ereignisse #

EreignisWann
ue_link_clicked (string as_url)Der Benutzer ist einem Link gefolgt (ein Klick, oder Eingabe auf einem fokussierten Link). Die Komponente navigiert NICHT: öffnen Sie as_url, wo Sie wollen. Ein relativer Link einer mit is_source gezeigten Datei kommt gegen ihren Ordner aufgelöst an; ein #überschrift-Link scrollt selbst und wird nicht ausgelöst; ein javascript:- oder data:-Link ist nicht einmal anklickbar
ue_loaded (string as_source)Das Dokument ist auf dem Bildschirm: as_source ist is_source, wie Sie es geschrieben haben, oder eine leere Zeichenkette für einen mit is_markdown gesetzten Text
ue_load_failed (string as_source, string as_reason)is_source konnte nicht gezeigt werden: as_reason ist eine der Konstanten REASON_* — REASON_NOT_FOUND (keine Datei), REASON_TOO_LARGE (über 16 MB), REASON_INSECURE (http://), REASON_UNSUPPORTED (keine Textdatei oder ein anderes Protokoll), REASON_FAILED (ein Lese- oder Netzwerkfehler). ue_loaded wird nicht ausgelöst
ue_search_result (long al_count, long al_index)Eine Suche ist gestartet oder vorgerückt: al_count Vorkommen insgesamt, das aktuelle ist al_index (ab 1, 0 wenn keines) — genug für „3 / 12“

Beispiel #

// ue_link_clicked of uo_md : the viewer never navigates, the application decides
if Lower(Right(as_url, 3)) = ".md" and FileExists(as_url) then
	uo_md.is_source = as_url                        // another page of the help
else
	ShellExecuteW(0, "open", as_url, "", "", 1)     // a web page, a mail
end if

Markdown bearbeiten: ein codeeditor und ein markdownview #

// The editor colours Markdown ; the viewer shows the page
uo_editor.is_syntax = u_pbt_codeeditor.SYNTAX_MARKDOWN
uo_editor.is_text = ls_notes
uo_md.is_markdown = ls_notes

// ue_changed of uo_editor : the whole recipe
uo_md.is_markdown = uo_editor.is_text

Ein Inhaltsverzeichnis in einer Liste #

// Local variables
string ls_titles[], ls_anchors[]
long ll_levels[], ll_i

// One line per heading, indented by its level
for ll_i = 1 to uo_md.of_toc(/*titles*/ ls_titles, /*levels*/ ll_levels, /*anchors*/ ls_anchors)
	lb_toc.AddItem(Fill(" ", (ll_levels[ll_i] - 1) * 3) + ls_titles[ll_i])
next

// SelectionChanged of lb_toc : bring that heading to the top
uo_md.of_scroll_to(/*anchor*/ ls_anchors[index])

Bewährte Praxis #


Vom gemeinsamen Sockel geerbt #

Diese Mitglieder gibt es bei jeder visuellen Komponente — sie sind nicht dieser eigen. Sie werden einmal in den übergreifenden Kapiteln beschrieben; diese Tabelle sagt nur, wo man sie liest.

MitgliederRolleBeschrieben in
of_resetDie Komponente zurücksetzen3.6 Eine Komponente zurücksetzen: of_reset()
of_register_shortcut · of_clear_shortcutsTastenkürzel der Komponente3.5 Tastenkombinationen
of_is_created · of_is_ready · of_get_last_errorOb sie entstanden ist, ob sie bereit ist, was fehlschlug3.7 Diagnose
of_save_as_png · of_save_as_jpgDie Darstellung als Bild exportieren3.8 Die Darstellung als Bild exportieren
of_set_redrawÄnderungen zu einem einzigen Neuzeichnen bündeln3.10 Best Practices
of_preload_iconsSymbole ohne VerzögerungSofortige Anzeige: of_icon
of_set_translationEine Beschriftung der Komponente übersetzen5.2 Eine Beschriftung anpassen: of_set_translation
of_focus_webviewDer Komponente den Fokus geben6.4 Tastatur und Fokus
of_print · of_print_to_pdfDrucken oder ein PDF schreiben6.9 Drucken
of_set_property · of_get_property · of_component_nameEine Eigenschaft über ihren Namen steuern3.1 Die Eigenschaften-Engine

← Komponentenreferenz · Inhalt des Handbuchs