Hallo Entwickler,
ich wollte mich jetzt mal an Interop versuchen. Ich habe in einen PowerPoint-Template (dotx) ein Layout in einem Folienmaster erstellt. Diese Layout (video) enthält ein Shape welchen Videos aufnehmen kann. Dieses Template soll in einem Add-In verwendet werden.
Mein Code sieht so aus (wahrscheinlich etwas um die Ecke gedacht, aber soweit funktioniert es wenigstens 😉 )
PowerPoint.Presentation vorlage = this.Application.Presentations.Open("ppVorlage.potx", Office.MsoTriState.msoCTrue);
PowerPoint.Presentation presentation = this.Application.ActivePresentation;
PowerPoint.CustomLayout layout_video = null;
foreach (PowerPoint.CustomLayout layout in vorlage.SlideMaster.CustomLayouts)
if (layout.Name.ToLower() == "video")
layout_video = layout;
PowerPoint.Slide slide = presentation.Slides.AddSlide(1, layout_video);
Nun sollte das Video in das dafür vorgesehene Shape eingesetzt werden. Leider habe ich festgestellt, dass
slide.Shapes[2]=slide2.Shapes.AddMediaObject2(@"E:\Programmierung\Office\PowerPointAddInn_FotoVideo\TestObjekte\IMG_0218.MOV", Office.MsoTriState.msoTrue, Office.MsoTriState.msoFalse, 55, 5, 50, 30);
keinen Setter sondern nur nen Getter hat.
Kann mir jemand sagen, wie ich trotzdem dieses Shape als Grundgerüst (Größe, Plazierung) für mein Video verwenden kann?
Grüße, Briquet
Ich brauchte das Aufnahmedatum und die Pixelgrößen von Bildern und Videos. Das habe ich mit GetItemOf() auslesen können und mit Herbivore's Tipp konnte ich auch die Steuerzeichen entfernen, die die Camera mit unter die Werte gemogelt hatte.
Die PropertyItem-Klasse werde ich mir aus Interesse aber trotzdem mal ansehen. Dann wird's das nächste mal nicht so umständlich 😃
Mein Problem ist gelöst. Ich danke Scavanger und Herbivore. Merci
Hallo Scavanger,
anfangs habe ich die FileInfo-Klasse verwendet, aber dort habe ich keine Attribute oder Methoden gefunden, die mir die erweiterten Dateiattribute, wie Aufnahmedatum, anzeigen. Das ist nämlich nicht das Gleiche wie das Attribut CreationTime, wie ich anfangs dachte.
Oder wäre das sogar doch mit der FileInfo-Klasse auslesbar?
Die Attribute einer Bilddatei (jpg) ausgelesen mit GetDetailsOf(item, 12) eines Shell32.Folders hat den Wert "14.07.2012 12:30". Allerdings nur wenn ich den Wert mit mit C# ausgebe. Mit einem Editor ist der Wert "?14.?07.?2012 ??12:30". Nun ist mein Problem den Wert in ein DateTime zu casten. Durch die Exception wird jedoch klar, das für die Laufzeitumgebung der Wert "?14.?07.?2012 ??12:30" ist. Ich habe probiert, den Wert mit Replace('?',' ') zu casten, aber das funktioniert nicht.
Hat jemand einen Erklärung warum für den Entwickler nur der Wert "14.07.2012 12:30" sichtbar ist, aber das System mit "?14.?07.?2012 ??12:30" rechnet bzw. kann mir jemand sagen wie ich den Wert von GetDetailsOf(item, 12) in ein DateTime casten kann ?
Hab meinen Fehler gerade selber gefunden. Und so funktioniert es:
media_code = new MediaElement();
media_code.Source = new Uri(@"E:/Fotos/ClubCooee/cooee-snapshot-2009-08-03-19-08-45-0206.png");
canvas.Children.Add(media_code);
BindingOperations.SetBinding(media_code, Canvas.LeftProperty,
new Binding() { Source = media_code, Path = new PropertyPath("ActualWidth"), Converter = new BindingConverter_Position() });
BindingOperations.SetBinding(media_code, Canvas.TopProperty,
new Binding() { Source = media_code, Path = new PropertyPath("ActualHeight"), Converter = new BindingConverter_Position() });
TranslateTransform translation = new TranslateTransform();
TransformGroup transformationGroup = new TransformGroup();
transformationGroup.Children.Add(translation);
media_code.RenderTransform = transformationGroup;
DoubleAnimation translationX = new DoubleAnimation();
translationX.From = 0;
translationX.To = canvas.ActualWidth/2;
translationX.Duration = new Duration(TimeSpan.FromSeconds(2));
translation.BeginAnimation(TranslateTransform.XProperty, translationX);
DoubleAnimation translationY = new DoubleAnimation(0, canvas.ActualHeight / 2, new Duration(TimeSpan.FromSeconds(2)));
translation.BeginAnimation(TranslateTransform.YProperty, translationY);
DoubleAnimation increase = new DoubleAnimation(0.2 * canvas.ActualHeight, 0.8 * canvas.ActualHeight, new Duration(TimeSpan.FromSeconds(2)));
increase.Completed += new EventHandler(increase_Completed);
media_code.BeginAnimation(MediaElement.WidthProperty, increase);
Mein Problem ist, dass 2D-Controls ihr Koordinatenursprung links oben haben. Ich schildere mal kurz das Szenario:
Ein MediaElement (also dessen Bildmittelpunkt) soll von der linken oberen Ecke zum Mittelpunkt des Canvas fahren und dabei noch seine Größe vergrößern. Dafür nutze ich die DoubleAnimationen.
TranslateTransform translation = new TranslateTransform();
myMediaElement.RenderTransform = translation;
translation.BeginAnimation(TranslateTransform.XProperty, new DoubleAnimation(0, canvas.ActualWidth / 2 - myMediaElement.ActualWidth / 2, new Duration(TimeSpan.FromSeconds(2))));
translation.BeginAnimation(TranslateTransform.YProperty, new DoubleAnimation(0, canvas.ActualHeigth / 2 - myMediaElement.ActualHeigth / 2, new Duration(TimeSpan.FromSeconds(2))));
myMediaElement.BeginAnimation(MediaElement.WidthProperty,new DoubleAnimation(0.2*canvas.ActualWidth, 0.6*canvas.ActualWidth, new Duration(TimeSpan.FromSeconds(2))));
Dem MediaElement gebe ich eine Breite. Die Höhe berechnet sich automatisch, damit das Verhältnis gleich bleicht. Allerdings ist damit auch die ActualHeight NaN und somit kann ich nicht damit rechnen. Wiederrum ändert sich durch die Animation "Größenänderung" auch immer die DependencyProperties. Dafür wollte ich nun einen Converter nutzen. Ich schrieb eine Klasse die IValueConverter implementiert. Und erstelle die Datenbindung mit:
BindingOperations.SetBinding(media_code, TranslateTransform.XProperty, // berechne von MediaElement die x-Position
new Binding() { Source = media_code, Path = new PropertyPath("ActualWidth"), Converter = new BindingConverter_PositionX() }); // verwende vom MediaElement die aktuelle Breite
.
In meiner Convert-Methode kann ich aber nur auf das ActualWidth des MediaElements zugreifen, aber nicht auf den ursprünglichen XProperty-Wert um dann XProperty - value/2 zu sagen.
Wahrscheinlich denke ich auch zu kompliziert und meine Herangehensweise ist wirr. Aber die Aufgabe ist doch eigentlich ganz simple. Bloß die Lösung erscheint mir unerreichbar.
Kann mir jemand helfen?
Vielen Dank, werd ich mir gleich mal ansehen.
Ich möchte gern den aktuellen halben Wert eines Cavas der Position eines MediaElements zuordnen. Einen Änderung der SourceWerte ist doch aber nicht so einfach, oder? Ich wollte mir deswegen eine HilfsVariable erstellen, die die Berechnung beinhaltet. Diese hat dann aber wiederum nicht die Methode SetBinding. Jetzt weis ich aber leider nicht weiter. Vielleicht könnte man selbst ein DependencyProperty erstellen, aber da hören meine Kenntnisse leider auf.
double Eigenschaft;
Binding binding_canvas = new Binding();
binding_canvas.Source = canvas;
binding_canvas.Path = new PropertyPath("ActualHeight");
Eigenschaft.SetBinding ?
Binding binding_media = new Binding();
binding_media.Source = ?
binding_media.Path = Eigenschaft;
media.SetBinding(Canvas.LeftProperty, binding_media);
Womit kann man so etwas lösen?
Als ich gestern ewig mit den Zellen gekämpft habe 😄, habe ich gemerkt, dass ich es gar nicht so genau brauche. Aber ich finde es sehr gut zu wissen, wie ich auf die einzelnen Zellen zugreifen kann um sie dann weiter zu verwenden.
Ich wollte eigentlich nur jedes Sheet als Slide darstellen. Ich dachte es geht nur, indem ich jedes Shape und auch die Tabellendaten einzeln ansprechen. Das mit den Shapes hat ja auch wunderbar geklappt. Bei den Tabellendaten sollte ebenfalls die Struktur erhalten bleiben. Über das Auslesen der einzelnen Zellen müsste ich mir allerdings in Powerpoint die Struktur nachbauen. Durch
worksheet.UsedRange.CopyPicture(
Microsoft.Office.Interop.Excel.XlPictureAppearance.xlScreen,
Microsoft.Office.Interop.Excel.XlCopyPictureFormat.xlPicture);
pptSlide.Shapes.Paste();
habe ich nun das Sheet als Bild in dem Slide. Der Zugriff auf die einzelnen Objekte ist damit zwar entfallen, aber momentan reicht es mir so.
Sebastian, ich danke dir für deine Hilfe. Jetzt bin ich in Excel etwas schlauer. Und du hattest Recht. Ich habe vorher noch nie was mit Excel versucht. Ich hatte es am Anfang über VB versucht, aber das ist nicht ganz meine Sprache 8)
Danke Sebastian für den guten Hinweis. Der Vollständigkeit wegen poste ich hier mal noch meinen jetzigen Quellcode:
public void Export_to_PowerPoint()
{
PowerPoint.Application pptApplication = new PowerPoint.Application();
pptApplication.Visible = Microsoft.Office.Core.MsoTriState.msoTrue; // PowerPointAnwendung öffnen
PowerPoint.Presentation pptPresentation =
pptApplication.Presentations.Add(Microsoft.Office.Core.MsoTriState.msoCTrue); // neue Präsentation erstellen
Excel.Workbook wb = (Excel.Workbook)this.Application.ActiveWorkbook; // aktuell geöffnetes Workbook
int folie_nr = 1;
int anz_ws = wb.Worksheets.Count; // fyi
foreach (Excel.Worksheet ws in wb.Worksheets) // jedes Worksheet durchlaufen
{
Excel.Range range = ws.UsedRange; // Bereich festlegen, welcher einen Inhalt hat
PowerPoint.Slide pptSlide =
pptPresentation.Slides.Add(folie_nr, PowerPoint.PpSlideLayout.ppLayoutBlank); // neue Folie der Präsentation hinzufügen
folie_nr++;
int anz_shapes = ws.Shapes.Count; // fyi
foreach (Excel.Shape item in ws.Shapes)
{
Office.MsoAutoShapeType shapeType = item.AutoShapeType; // fyi, Typ des Shapes
PowerPoint.Shape pptShape = pptSlide.Shapes.AddShape(item.AutoShapeType, item.Left, item.Top, item.Width, item.Height);
}
}
}
Allerdings hab ich gemerkt, dass Zellinhalte keine Objekte im Sinne von Shapes sind. Um diese ebenfalls zu übernehmen (mit/ohne Gitterlinien), welches Excel- und Powerpoint-Objekte benutzt man dazu?
Ich möchte gern ein Excel-Add-In schreiben, welchen aus jedem Excelsheet eine PowerPointfolie generiert.
Eventuell ist das auch nur möglich, wenn das Excelsheet als Bild in PowerPoint dargestellt wird. Ich hoffe aber, dass man jedes Element (Zelle, Diagramm, Bild, Shape) bestimmen kann und es an gleicher Stelle in eine PowerPoint-Folie exportiert.
Da ich noch nie ein Add-In für Office geschrieben habe, bin ich etwas hilflos.
Bis jetzt habe ich das erstellt. Aber beim Zugriff auf die einzelnen ExcelObjekte und dem Hinzufügen zu einer PowerPoint-Folie wusste ich nicht weiter.
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Excel = Microsoft.Office.Interop.Excel;
...
public void Export_to_PowerPoint()
{
PowerPoint.Application pptApplication = new PowerPoint.Application();
pptApplication.Visible = Microsoft.Office.Core.MsoTriState.msoTrue; // PowerPointAnwendung öffnen
PowerPoint.Presentation pptPresentation =
pptApplication.Presentations.Add(Microsoft.Office.Core.MsoTriState.msoCTrue); // neue Präsentation erstellen
Excel.Workbook wb = (Excel.Workbook)this.Application.ActiveWorkbook; // aktuell geöffnetes Workbook
int anz_folien = 1;
foreach (Excel.Worksheet ws in wb.Worksheets) // jedes Worksheet durchlaufen
{
Excel.Range range = ws.UsedRange; // Bereich festlegen, welcher einen Inhalt hat
PowerPoint.Slide pptSlide =
pptPresentation.Slides.Add(anz_folien, PowerPoint.PpSlideLayout.ppLayoutBlank); // neue Folie der Präsentation hinzufügen
anz_folien++;
// foreach (Excel.OBJECT obj in range.OBJECTS)
// {
// TYP IDENTIFIZIEREN
// NEUEN TYP IN POWERPOINT ANLEGEN
// EXCELOBJECT DEM NEUEN OBJEKT HINZUFÜGEN
// POWERPOINT OBJEKT ZU SLIDE HINZUFÜGEN
// }
}
}
Ich hoffe, dass jemand mir beim Implementieren des kommentierten Teils einen Tip geben kann. Vielleicht ist meine Herangehensweise auch ganz falsch. Ich habe leider nichts hilfreiches im Web gefunden. Aber falls auch da jemand einen Link hat wäre ich froh.
Lieben Dank schon mal.
Warscheinlich ist das auch ganz simple, aber ich habs nicht so mit den WPF-Controls.
Ich möchte einfach nur den Doppelklick auf eine Row abfangen. Da ich aber mit Datenbindung arbeite, kann ich nur den Doppelklick auf das gesamte DataGrid abfangen:
<wpf:DataGrid Name="dg_attachs"
ItemsSource="{Binding}"
MouseDoubleClick="attachs_MouseDoubleClick" />
private void attachs_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
string clickedCell = ((Microsoft.Windows.Controls.DataGrid)sender).SelectedCells.ToString();
}
Aber da kann ich ja erst eine Zelle markieren und dann auf den Header nen Doppelklick aufführen. Das möchte ich aber nicht. Ich will direkt das Event der doppeltgeklickten Zelle.
Kann mir da bitte jemand nen Tipp geben.
Bin bald am verzweifeln, was stimmt denn mit meiner ComboBoxBindung nicht ?(
Ich habe nochmal ein neues Beispiel erstellt. Dabei habe ich eine Datenqelle für meine Anzeigedaten (dt1) und eine für meine LookupTable(dt2). Die lasse ich mir jeweils in einem Control anzeigen. Also dt1 in deinem DataGrid und dt2 in einer Combobox. Die beiden Datenquellen haben einen gemeinsamen Schlüssel, dt1.EmployeeID=dt2.ID. Das heißt, dass mit dem im DataGrid gewählte Element soll mit dem assozierten Element über den gemeinsamen Schlüssel in der ComboBox angezeigt werden.
Tut es aber nicht 🙁
Kann mir jemand einen Typ geben, wo mein Fehler liegt?
Mein Quelltext sieht folgender Maßen aus:
<wpf:DataGrid Name="dg"
ItemsSource="{Binding}"
IsSynchronizedWithCurrentItem="True"
CanUserAddRows="False"
CanUserDeleteRows="False" />
<ComboBox Name="cb"
IsSynchronizedWithCurrentItem="True"
Width="200"
ItemsSource="{Binding}"
SelectedValuePath="ID"
DisplayMemberPath="Name"
SelectedIndex="{Binding EmployeeID}"/>
<Label Content="{Binding EmployeeID}"/>
public partial class Window3 : Window
{
DataTable dt1;
DataTable dt2;
public Window3()
{
InitializeComponent();
QueryExecuter myDB = new QueryExecuter(".", "Northwind"); // gekapselte Datenbankverbindung
dt1 = myDB.execDTQuery("SELECT EmployeeID, FirstName, LastName, Title, HireDate, Photo FROM Employees"); // liefert Datenquelle 1
this.DataContext = dt1;
dt2 = myDB.execDTQuery("SELECT ID, Name FROM TestTable"); // liefert Datenquelle 2
cb.DataContext = dt2;
}
}
Das Label ist nur zum Testen ob die Datenbindung überhaupt funktioniert. Und da geht es.
?(Wo liegt nur mein Fehler ?(
Ich habe 2 Teile. Auf der einen Seite ein DataGrid welchen Daten aus einer Datenbank bekommt. Auf der anderen Seite eine Art Formular, welches die Daten des gewählten DataGridEintrages anzeigt. In dem Formular befindet sich eine Combobox, die ihre Daten wiederrum aus deiner Datenbank (audere Quelle als die Daten fürs DataGrid) gezieht.
Nun soll aber der ausgewählte Comboboxeintrag eines Elements der ausgewählten DataGridZeile entsprechen. Ich habe keine Ahnung, wie ich das realisieren könnte.
Das klingt jetzt etwas undruchsichtig, ich versuche es mal an meinem Beispiel zu beschreiben:
DataGrid
XAML:
<wpf:DataGrid Name="dg_overview_tickets" ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True"/>
C#:
DataContext = dt_ticket; // ist das DataTable welches mit Daten aus einer DB gefüllt wurden
ComboBox
XAML:
<ComboBox Name="cb_kunde" ItemsSource="{Binding}"/>
C#:
cb_kunde.DataContext = dt_kunden ;// ist das DataTable welches mit Daten aus einer anderen DB gefüllt wurden
cb_kunde.DisplayMemberPath = "Name";
cb_kunde.SelectedValuePath = "ID";
Die gewählte DataGridZeile enthält in Spalte 2 einen Int-Wert, dieser soll in der ComboBox ausgewählt werden. Der Int-Wert entspricht der ID.
Ich habe ja die Itemsource jeweils schon an die Daten der Datenbank gebunden. Aber wie verbinde ich jetzt noch die DataGridAuswahl mit der ComboboxAuswahl, obwohl sie unterschiedliche Quellen haben ?
Gedachte hatte ich mir SelectedValue="{Binding kundenID} für die ComboBox, aber kundenID ist ja nur in der anderen Datenquelle enthalten.
Hmm, klingt logisch.
Problem gelöst, danke euch!
😁
Das hatte ich auch schon probiert, aber da krieg ich {252,98,43,101,114} raus und nicht {0xFC, 0x62, 0x26, 0x65, 0x72}.
Bin etwas verzweifelt. Ich muss Strings in ISO8859-1 Zeichen verschlüsseln.
Andersrum, mit:
System.Text.Encoding.GetEncoding("iso-8859-1").GetString(new Byte[]{0xFC, 0x62, 0x26, 0x65, 0x72});
kriege ich ja das Wort "üb+er" raus. Aber der String soll meine Eingabe sein und als Ausgabe brauche ich das Bytearray.
Kann mir da jemand helfen? Ich hab so die Vermutung, dass das ganz einfach geht. Aber ich seh den Wald vor lauter Bäumen nicht X(
Ich hab nen hellblauen Hintergrund und ne Groupbox mit rotem Rahmen. Aber wo das weiß um den Rahmen herkommt, kann ich mir einfach nicht erklären.
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1"
Background="LightBlue">
<DockPanel LastChildFill="True"
Margin="10">
<GroupBox Header="Referenzen"
DockPanel.Dock="Top"
BorderThickness="3"
BorderBrush="Red"
Margin="0"
Padding="0">
<Label Content="Label"/>
</GroupBox>
</DockPanel>
</Window>
Ich hab in einem Windows eine Groupbox. Sobald ich den Hintergrund des Windows farbig gestalte ist um die Groupbox ein weißer unschöner Rand (innen und aussen um den Border) zu sehen. Mit Padding und Margin kriege ich das nicht weg.
Hat schon jemand mal dieses Problem gehabt und auch gelöst?
Du meinst das UserControl in ein Project und die Testanwendung in ein anderes innerhalb der gleichen Solution? Ich denk mal, so werd ich das jetzt auch machen.
ah, gut dann geht es. danke meisteralex
aber eventuell brauch ich die testanwendungung (app) doch noch. also hab ich die nur vom projekt ausgeschlossen und dann einfach mal wieder reingezogen. Wahrscheinllich hat sich VS irgendwelche noticen dazu gemach, aufjedenfall geht das nicht so einfach. @meisteralex: Hast du da noch eine idee dazu? ansonsten speicher ich mir schnell die dll und mach dann die aktion mit dem ausschliessen wieder rückgängig. ist zwar nicht die beste methode, aber wahrscheinlich die einfachste.
Ich habe ein Projekt als WPF-Anwendung angelegt und in diesem Projekt noch ein WPF-Usercontrol dazu. Das Usercontrol will ich als dll ausgeben, sobald es fertig geschrieben ist.
Die WPF-Anwendung mit in diesem Projekt soll nur mein Usercontroll testen. Da jetzt mein Usercontrol fertig und auch getestet ist, wollte ich den OutputType: von WindowsApplication auf ClassLibary setzen und bekommen dort folgende Fehlermeldung:
"Library project file cannot specify ApplicationDefinition element."
Ich dächte das ich meine vorherigen Projekte auf ähnliche Weise erstellt habe ohne das ein Fehler kam.
Kann mir jemand was dazu sagen?
Hier gibt es übrigens auch eine schöne Chart-dll für nicht-kommerzielle Benutzung:
Download Silverlight Charting Components - Dot Net Charts
Danke für die schnelle Antwort. Wenn ich die Outlook-dll verwende, ist aber mein Problem mit dem html-Text für den Body noch nicht nicht gelöst. Hast du noch eine Idee dazu?
Ich möchte eine für den Versand vorbereitete OutlookMail in einem C#-Programm aufrufen. Das würde ich so machen:
ProcessStartInfo p = new ProcessStartInfo();
p.FileName = "mailto:" + emailAdresse + "&body=" + "irgendwelcherText";
Ich habe versucht den Text (Codebeispiel: irgendwelcherText) in html anzugeben, weil ich Tabellen und Bilder einbinden will. Nur wird der HTML-Code auch genauso in der Mail dargestellt. Gibt es eine Möglichkeit zu sagen, dass der Text von body html-text ist und noch interpretiert werden muss?
Mein zweites Problem: Ich würde gern noch zwei pdf's mit anhängen. Das geht sicherlich genauso mit &Parameter=pfad. Aber wie heißt das Parameter?
Ich danke Euch für Antworten.
Bin erst jetzt wieder zu diesem Projekt gekommen.
Danke pdelvo! 👍
Ich möchte in meiner Anwendung eine externe Anwendung öffenen. Dazu verwende ich System.Diagnostics.Process.Start([datei],[Aufrufparameter]). Das funktioniert auch prima. Nun habe ich das Problem das die Anwendung eine gepublishete C#-Anwendung ist, dessen Speicherort von Nutzer zu Nutzer unterschiedlich (was cryptisches) ist und auch immer in 2 Varianten (die aktuelle und die vorletzte Version) vorhanden ist.
Gibt es den sowas wie die Windowssuchversion. Das heißt ich gebe einen Oberpfad und die zu startende Datei an und bekomme einen Pfad mit der aktuellsten Version zurück???
Ich hoffe, das irgendjemand schonmal was ähnliches benötigt hat und mir seine Lösung berichten kann.
Ach ja. Funktioniert prima. Danke schön.
Das einzige Problem was ich jetzt noch habe, ist das meine manuellen Zeilenubrüche auch ignoriert werden. Ich wollte Zeilenumbrüche nur an bestimmten Stellen, aber wahrscheinlich wird es dafür keine Realisierung geben.
das hab ich schon mit:
dgv.DefaultCellStyle.WrapMode = DataGridViewTriState.False; //dgv ist mein DataGridView
versucht, aber das trifft wahrscheinlich nur auf den Zelleninhalt zu. In den Headern wird der Text immernoch umgebrochen
Der Text in RowHeader und ColumnHeader werden umgebrochen sobald der String ein Leerzeichen enthält.
Kann ich das irgendwie verhindern? Wenn der gesamte Text nicht in den Header paßt wäre das in meinem Anwenderfall nicht schlimm.