{"id":55000231,"date":"2020-08-01T00:00:00","date_gmt":"2020-11-26T08:32:37","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=231"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"FlowDocumente_mit_VB_zusammenstellen","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/FlowDocumente_mit_VB_zusammenstellen\/","title":{"rendered":"FlowDocumente mit VB zusammenstellen"},"content":{"rendered":"<p><b>FlowDocument-Element werden per RichTextBox-Feld eingegeben, per XAML definiert oder auch per VB zusammengestellt. Letzteres ist vor allem dann interessant, wenn Sie das Dokument mit den Daten aus einer externen Quelle wie einer Datenbank f&uuml;llen wollen. So k&ouml;nnen Sie beispielsweise Rechnungen erstellen, Auflistungen von Produkten, Angebote und beliebige andere Dokumente. Diese k&ouml;nnen Sie dann als PDF verschicken oder ausdrucken. Dieser Artikel zeigt die Grundlagen zum Erstellen von FlowDocument-Objekten und zum F&uuml;llen mit den gew&uuml;nschten Elementen und Inhalten.<\/b><\/p>\n<p>In anderen Artikeln wie <b>FlowDocument-Elemente mit XAML <\/b>(<b>www.datenbankentwickler.net\/203<\/b>) oder <b>Das RichTextBox-Steuerelement <\/b>(<b>www.datenbankentwickler.net\/204<\/b>) haben wir die Grundlagen zu <b>FlowDocument<\/b>-Elementen geliefert und zu den Steuerelementen, in denen sie angezeigt und bearbeitet werden k&ouml;nnen.<\/p>\n<p>Nun wollen wir zeigen, wie Sie Elemente, die Sie in den zuvor genannten Beitr&auml;gen mit XAML-Definitionen erstellt oder &uuml;ber ein <b>RichTextBox<\/b>-Steuerelement eingegeben haben, per VB-Code erstellen k&ouml;nnen.<\/p>\n<p><b>Vorbereitung<\/b><\/p>\n<p>Die Basis unseres Beispiels definieren wir wie folgt. Wir haben ein Grid, in dessen erster Zeile ein <b>StackPanel<\/b>-Element liegt, das wir im Laufe des Artikels mit Schaltfl&auml;chen zum Ausf&uuml;hren unserer Beispiele f&uuml;llen werden. In der zweiten <b>Grid<\/b>-Zeile haben wir ein <b>FlowDocumentPageViewer<\/b>-Element zur Anzeige der erzeugten <b>FlowDocument<\/b>-Elemente definiert:<\/p>\n<pre>&lt;Grid&gt;\r\n     &lt;Grid.RowDefinitions&gt;\r\n         &lt;RowDefinition Height=\"Auto\"&gt;&lt;\/RowDefinition&gt;\r\n         &lt;RowDefinition Height=\"*\"&gt;&lt;\/RowDefinition&gt;\r\n     &lt;\/Grid.RowDefinitions&gt;\r\n     &lt;StackPanel Orientation=\"Horizontal\"&gt;\r\n         &lt;Button x:Name=\"btnEinfacherText\" Click=\"BtnEinfacherText_Click\"&gt;Einfacher Text&lt;\/Button&gt;\r\n     &lt;\/StackPanel&gt;\r\n     &lt;FlowDocumentPageViewer x:Name=\"fdp\" Margin=\"3\" Grid.Row=\"1\"&gt;&lt;\/FlowDocumentPageViewer&gt;\r\n&lt;\/Grid&gt;<\/pre>\n<p>Die Beispielmethoden, die durch die Schaltfl&auml;chen ausgel&ouml;st werden, legen wir im Code behind-Modul des Fensters an. F&uuml;r den ersten Beispieltext hinterlegen wir die folgende Prozedur in der Klasse <b>FlowDocumentPerVB<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Public Class<\/span> FlowDocumentPerVB\r\n     <span style=\"color:blue;\">Private <\/span>Sub BtnEinfacherText_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n         <span style=\"color:blue;\">Dim <\/span>objFlowDocument<span style=\"color:blue;\"> As <\/span>FlowDocument\r\n         <span style=\"color:blue;\">Dim <\/span>objParagraph<span style=\"color:blue;\"> As <\/span>Paragraph\r\n         objFlowDocument = <span style=\"color:blue;\">New<\/span> FlowDocument\r\n         objParagraph = <span style=\"color:blue;\">New<\/span> Paragraph()\r\n         <span style=\"color:blue;\">With<\/span> objParagraph\r\n             .Inlines.Add(\"Dies ist ein erster Absatz.\")\r\n         End <span style=\"color:blue;\">With<\/span>\r\n         objFlowDocument.Blocks.Add(objParagraph)\r\n         fdp.Document = objFlowDocument\r\n     End Sub\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<p>Klicken wir nach dem Starten des Projekts auf die Schaltfl&auml;che, erhalten wir das Ergebnis aus Bild 1. Hier haben wir noch keine Absatzformate definiert. Die Zeilen, die dem Paragraph-Objekt den Text hinzuf&uuml;gen, k&ouml;nnen wir auch noch abk&uuml;rzen durch folgenden Ausdruck:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_04\/pic_231_001.png\" alt=\"Erster Beispieltext\" width=\"349,7625\" height=\"172,0299\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Erster Beispieltext<\/span><\/b><\/p>\n<pre>objParagraph = <span style=\"color:blue;\">New<\/span> Paragraph(<span style=\"color:blue;\">New<\/span> Run(\"Dies ist ein erster Absatz.\"))<\/pre>\n<p><b>Absatz mit Formatierungen<\/b><\/p>\n<p>Im zweiten Beispiel wollen wir einen Absatz mit Formatierungen versehen &#8211; der Text soll in der Schriftart <b>Calibri <\/b>in der Gr&ouml;&szlig;e <b>24 <\/b>mit fetter Auszeichnung ausgegeben werden.<\/p>\n<p>Dazu verwenden wir die folgende Methode, die durch die Schaltfl&auml;che mit der Beschriftung <b>Text mit Format <\/b>ausgel&ouml;st wird:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>BtnTextMitFormat_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>objFlowDocument<span style=\"color:blue;\"> As <\/span>FlowDocument\r\n     <span style=\"color:blue;\">Dim <\/span>objParagraph<span style=\"color:blue;\"> As <\/span>Paragraph\r\n     objFlowDocument = <span style=\"color:blue;\">New<\/span> FlowDocument\r\n     objParagraph = <span style=\"color:blue;\">New<\/span> Paragraph(<span style=\"color:blue;\">New<\/span> Run(\"Dies ist ein erster Absatz.\"))\r\n     <span style=\"color:blue;\">With<\/span> objParagraph\r\n         .FontFamily = <span style=\"color:blue;\">New<\/span> FontFamily(\"Calibri\")\r\n         .FontSize = 24\r\n         .FontWeight = FontWeights.Bold\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     objFlowDocument.Blocks.Add(objParagraph)\r\n     fdp.Document = objFlowDocument\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis sehen Sie in Bild 2. Die Formatierungen k&ouml;nnen wir einfach &uuml;ber die Eigenschaften des <b>Paragraph<\/b>-Objekts zuweisen. Gegen&uuml;ber Programmiersprachen wie VBA l&auml;sst sich hier jedoch nicht in jedem Fall einfach der Name der Schriftart zuweisen, sondern wir m&uuml;ssen dazu neue Objekte erstellen wie <b>FontFamily <\/b>oder Auflistungen aus Klassen verwenden wie <b>FontWeights.Bold<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_04\/pic_231_002.png\" alt=\"Text mit Formatierungen\" width=\"349,7625\" height=\"173,2314\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Text mit Formatierungen<\/span><\/b><\/p>\n<p><b>Tabelle mit Elementen erstellen<\/b><\/p>\n<p>Das Erstellen einer einfachen Tabelle ist schon etwas aufwendiger. Schauen wir uns ein einfaches Beispiel an.<\/p>\n<p>Dazu wollen wir die Tabelle aus Bild 3 erstellen &#8211; also eine Tabelle mit drei Spalten und vier Zeilen sowie Inhalt und Rahmenlinien.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2020_04\/pic_231_003.png\" alt=\"Erstellen einer einfachen Tabelle\" width=\"424,7115\" height=\"231,8147\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Erstellen einer einfachen Tabelle<\/span><\/b><\/p>\n<p>Wir deklarieren zun&auml;chst einige Variablen, die wir f&uuml;r die Erstellung der Tabelle ben&ouml;tigen sowie die zwei Laufvariablen <b>i <\/b>und <b>j<\/b>, mit denen wir die Zeilen und Spalten zum Erstellen der Zellen durchlaufen wollen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>BtnTabelle_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>objFlowDocument<span style=\"color:blue;\"> As <\/span>FlowDocument\r\n     <span style=\"color:blue;\">Dim <\/span>objTable<span style=\"color:blue;\"> As <\/span>Table\r\n     <span style=\"color:blue;\">Dim <\/span>objTableColumn<span style=\"color:blue;\"> As <\/span>TableColumn\r\n     <span style=\"color:blue;\">Dim <\/span>objTableRowGroup<span style=\"color:blue;\"> As <\/span>TableRowGroup\r\n     <span style=\"color:blue;\">Dim <\/span>objTableRow<span style=\"color:blue;\"> As <\/span>TableRow\r\n     <span style=\"color:blue;\">Dim <\/span>objTableCell<span style=\"color:blue;\"> As <\/span>TableCell\r\n     <span style=\"color:blue;\">Dim <\/span>objParagraph<span style=\"color:blue;\"> As <\/span>Paragraph\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>j<span style=\"color:blue;\"> As Integer<\/span><\/pre>\n<p>Dann erstellen wir ein neues <b>FlowDocument<\/b>&#8211; und ein neues <b>Table<\/b>-Element. Das <b>Table<\/b>-Element f&uuml;gen wir &uuml;ber die <b>Add<\/b>-Methode der <b>Blocks<\/b>-Auflistung zum <b>FlowDocument <\/b>hinzu:<\/p>\n<pre>     objFlowDocument = <span style=\"color:blue;\">New<\/span> FlowDocument\r\n     objTable = <span style=\"color:blue;\">New<\/span> Table\r\n     objFlowDocument.Blocks.Add(objTable)<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000231\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000231?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000231\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"b14c72894d\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>FlowDocument-Element werden per RichTextBox-Feld eingegeben, per XAML definiert oder auch per VB zusammengestellt. Letzteres ist vor allem dann interessant, wenn Sie das Dokument mit den Daten aus einer externen Quelle wie einer Datenbank f&uuml;llen wollen. So k&ouml;nnen Sie beispielsweise Rechnungen erstellen, Auflistungen von Produkten, Angebote und beliebige andere Dokumente. Diese k&ouml;nnen Sie dann als PDF verschicken oder ausdrucken. Dieser Artikel zeigt die Grundlagen zum Erstellen von FlowDocument-Objekten und zum F&uuml;llen mit den gew&uuml;nschten Elementen und Inhalten.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662020,66042020,44000016,44000025,44000028],"tags":[],"yst_prominent_words":[],"class_list":["post-55000231","post","type-post","status-publish","format-standard","hentry","category-662020","category-66042020","category-VBGrundlagen","category-VBAProgrammierung","category-Word_programmieren"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000231"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000231\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000231"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}