Zitat von Abt
Das ist leider ein bekannter Bug, siehe [Preview 4] White line on the left of the window that vanishes once the window is resized
#4176
Danke!
Alles klar, dann brauch ich da keine Zeit mehr investieren.
Das mit dem Icon habe ich inzwischen übrigens lösen können.
Im Code-Behind muss man eine .ico Datei zuweisen - keine .png Datei.
Dann funktioniert's, dass auch bei Alt-Tab das richtige Symbol über der App angezeigt wird.
appWindow.SetIcon("Assets\\AppIcon.ico");
Ergänzung: Mittlerweile (nach Reboot) wird sogar ein kompletter dünner schwarzer rechteckiger Rahmen um das Window angezeigt - siehe Bild.
Ich habe jetzt alle Grids durchprobiert, das Border-Element entfernt, auch bei NavigationView entsprechend Background auf Transparent und BorderThickness auf 0 gesetzt, es bleibt immer dasselbe.
Hallo zusammen,
ich habe noch zwei Schönheitsfehler bei meiner WinUI 3 App:
Seht Ihr, woran es liegt?
Danke schonmal!
........................................................................................
Hier noch der XML Code meines Hauptfensters:
<?xml version="1.0" encoding="utf-8"?>
<Window
x:Class="RSToolBox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:RSToolBox"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<!-- Main Grid to hold content and background -->
<Grid Background="Transparent" BorderBrush="Transparent" BorderThickness="0" CornerRadius="12">
<!-- Background with rounded corners -->
<Border
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
CornerRadius="12"
BorderBrush="Transparent"
BorderThickness="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<!-- Title bar height adjusts automatically -->
<RowDefinition Height="*"/>
<!-- NavigationView takes up the remaining space -->
</Grid.RowDefinitions>
<!-- Custom Title Bar -->
<Grid x:Name="CustomTitleBar" Background="{ThemeResource SystemControlBackgroundBaseLowBrush}" Height="32">
<TextBlock Text="RS Toolbox" VerticalAlignment="Center" Margin="12,0,0,0" FontSize="16" Foreground="White"/>
<!-- Add Minimize/Maximize/Close buttons if needed -->
</Grid>
<NavigationView
x:Name="SettingsNavView"
PaneDisplayMode="Left"
IsPaneToggleButtonVisible="False"
IsBackButtonVisible="Collapsed"
IsSettingsVisible="False"
SelectionChanged="SettingsNavView_SelectionChanged"
Grid.Row="1">
<NavigationView.MenuItems>
<NavigationViewItem Content="System Infos" Tag="SystemInfo">
<NavigationViewItem.Icon>
<FontIcon Glyph="" />
</NavigationViewItem.Icon>
</NavigationViewItem>
<NavigationViewItem Content="Common Tools" Tag="CommonTools">
<NavigationViewItem.Icon>
<FontIcon Glyph="" />
</NavigationViewItem.Icon>
</NavigationViewItem>
<NavigationViewItem Content="Outlook Fix Tools" Icon="Mail" Tag="OutlookTools" />
<NavigationViewItem Content="Collect LogFiles" Tag="LogFiles">
<NavigationViewItem.Icon>
<FontIcon Glyph="" />
</NavigationViewItem.Icon>
</NavigationViewItem>
</NavigationView.MenuItems>
<Frame x:Name="ContentFrame" />
</NavigationView>
</Grid>
</Border>
</Grid>
</Window>
Und hier das Package.appxmanifest:
<?xml version="1.0" encoding="utf-8"?>
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap rescap">
<Identity
Name="c45abc8e-b117-4b63-8e72-e5c1970ec11b"
Publisher="CN=RS_CENTRAL_IT, O=Rohde & Schwarz GmbH & Co. KG, L=München, S=Bayern, C=DE"
Version="1.0.13.0" />
<mp:PhoneIdentity PhoneProductId="c45abc8e-b117-4b63-8e72-e5c1970ec11b" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
<Properties>
<DisplayName>RSToolBox</DisplayName>
<PublisherDisplayName>BEIER</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate"/>
</Resources>
<Applications>
<Application Id="App"
Executable="$targetnametoken$.exe"
EntryPoint="$targetentrypoint$">
<uap:VisualElements
DisplayName="RSToolBox"
Description="RSToolBox"
BackgroundColor="transparent"
Square150x150Logo="Assets\Square150x150Logo.png"
Square44x44Logo="Assets\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" ShortName="RSToolbox">
<uap:ShowNameOnTiles>
<uap:ShowOn Tile="square150x150Logo"/>
</uap:ShowNameOnTiles>
</uap:DefaultTile >
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
</Application>
</Applications>
<Capabilities>
<rescap:Capability Name="runFullTrust" />
</Capabilities>
</Package>
Danke! Alles klar, dann geht es wohl tatsächlich nur mit Win11 sauber...
Das hilft mir, nicht noch mehr Zeit in diese Thematik zu stecken.
Hallo zusammen,
ich habe ein Hauptfenster für ein WINUI 3 Projekt erstellt und dabei die Ecken abgerundet.
Trotzdem bleibt hinter dem Fenster ein rechteckiger Hintergrund sichtbar, den ich einfach nicht wegkriege, so viel ich auch schon - auch mithilfe von ChatGPT - probiert habe.
Ich hänge ein Bild an.
Und das XAML des Hauptfensters.
Im Bild sind die beiden Stellen, wo man den rechteckigen Hintergrund sieht, bepfeilt - selbiges ist natürlich auch unten sichtbar.
Hat jemand von Euch eine Idee, woran exakt das liegt und wie man diesen offenbar Hintergrund ausblendet, so dass ein sauberes abgerundetes Fenster zu sehen ist?
Mit einer WPF Anwendung hatte ich hier kein Problem, den Background des in der Hierarchie höchsten Elements auf "Transparent" zu stellen, aber mit WINUI 3 geht das nicht.
Mica etc. kann ich nicht nutzen, weil wir noch viele Win10 Clients haben - das funktioniert ja nur mit Win11.
Danke und viele Grüße
Emanuel
Ist alles vollkommen richtig.
Es gibt bestimmte Gründe, warum es momentan noch über ini läuft, aber das würde jetzt zu weit führen.
Nein, die laufen nicht parallel.
Der Service läuft vor dem Login.
Meldet sich ein User an, beendet sich der Service, und die App übernimmt.
Es liegt wirklich daran - ist die ini weg und wird vom Service angelegt, hat der User Probleme, die Datei zu ändern.
Auch manuell nicht - geht mir genau so, wenn ich über Windows Explorer das File mit Notepad versuche zu ändern, da kann ich es auch nicht speichern, außer ich rufe den Notepad als Admin auf.
Vielen Dank!
Genau, ich hatte das gestern auch danach nochmal recherchiert und mit FlushFileBuffers einen Weg gefunden, das Caching zu umgehen.
Das eigentliche Problem aber ist: Wird die Datei im System Context erzeugt (vom Service), dann ist sie von der App aus (User Context) nicht änderbar, da muss man dann wahrscheinlich Klimmzüge machen, aber da weiß ich dann, in welcher Richtung ich suchen muss. Man müsste den WritePrivateProfileString quasi als Admin ausführen...
Damit könnte das Thema geschlossen werden - ich glaub, das kann ich selber nicht.
Hallo zusammen,
Ich habe eine Applikation, die im Userkontext läuft und nach dem User Login ausgeführt wird.
Und einen damit korrespondieren Service, der vor dem Login gestartet wird, der User ist "System".
Beide korrespondieren miteinander durch die Nutzung derselben ini Datei.
Sie steht im Pfad:
c:\ProgramData\<CommonProjectFolder>\Application\<ApplicationName>\<ApplicationName>.ini
Das läuft schon seit Monaten ohne Probleme so und funktioniert.
Aktuell ist es bei mir aber so, dass beide völlig unterschiedliche Dateien aus der an sich gleichen Datei liefern.
Ich habe es momentan so eingerichtet, dass beide gleich beim Start den kompletten Inhalt der ini Datei (File.ReadAllText) in eine Log-Datei ausgeben.
Die Dateien sind völlig unterschiedlich.
Sehe ich mir die Dateien direkt als User an, stimmen die Inhalte mit dem überein, wie sie vom Service ausgegeben wird.
Die Applikation hat völlig andere Inhalte.
Lösche ich die .ini Datei und starte die Applikation, gibt er unverändert dieselben Werte aus.
Als ob die Applikation eine komplett andere Datei verwenden würde.
Für den Zugriff verwende ich die Methoden GetPrivateProfileString und WritePrivateProfileString aus der kernel32.dll.
Ich habe Richtugung Caching überlegt - ob die ini Values, die ich während der Applikation verändere, irgendwie erstmal gecacht werden, aber bisher noch nichts dazu gefunden.
Hat jemand von Euch eine Ahnung, in welcher Richtung man hier suchen könnte ?
Vielen Dank und schöne Grüße
Emil
Hallo Wilfried,
danke für den Hinweis auf den Artikel.
Ich habe hier ein großes Projekt übernommen, als C# Neuling.
Darin wird mit DataBinding gearbeitet - für jedes Tab existiert ein eigenes ViewModel.
Lediglich die angesprochene Sonderfunktion, eine Type-Ahead-Suche nach einem ActiveDirectory User anzubieten ist direkt im ...xaml.cs implementiert.
Wie gesagt, sie funktioniert nur an den Stellen nicht, wo die Felder in einem Grid platziert sind, dass mehrspaltig angelegt ist.
In anderen Tabs, wo es nicht mehrere Columns pro Grid gibt, wird die ListBox einwandfrei angezeigt.
Ich bräuchte denke ich die Info, wie man in C# die Eigenschaft anspricht, die im XAML "Grid.Column" heisst.
Danke und schöne Grüße
Emanuel
Danke! Verstehe, das war irreführend. Die Visibility wird an späterer Stelle auf Visible gesetzt... Das ist es leider nicht.
Hallo zusammen,
ich habe in einer Benutzeroberfläche mittels XAML ein(e?) Grid mit zwei Spalten definiert.
So sieht der Anfang der Definition in XAML aus:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="41*"/>
<ColumnDefinition Width="778*"/>
</Grid.ColumnDefinitions>
Für eine Textauswahlbox (ListBox) habe ich nun im zugehörigen ...xaml.cs File den entsprechenden C# Code:
ADUserSuggestionsListBox = new ListBox();
ADUserSuggestionsListBox.HorizontalAlignment = SuggestionTextBox.HorizontalAlignment;
ADUserSuggestionsListBox.VerticalAlignment = SuggestionTextBox.VerticalAlignment;
ADUserSuggestionsListBox.Margin = new Thickness(SuggestionTextBox.Margin.Left + 1, SuggestionTextBox.Margin.Top + SuggestionTextBox.Height, 0, 0);
ADUserSuggestionsListBox.Width = SuggestionTextBox.Width;
ADUserSuggestionsListBox.BorderBrush = Brushes.Black;
ADUserSuggestionsListBox.Visibility = Visibility.Hidden;
ListBoxItem listBoxItem = new ListBoxItem();
listBoxItem.Content = string.Empty;
ADUserSuggestionsListBox.Items.Add(listBoxItem);
var grid = SuggestionTextBox.Parent as Grid;
grid.Children.Add(ADUserSuggestionsListBox);
Die ListBox ADUserSuggestionsListBox wird allerdings nicht angezeigt. Die Funktion dahinter ist allerdings vorhanden. Es läuft hier eine Type-Ahead-Suche auf das ActiveDirectory nach dem Usernamen. Ich kann ein paar Zeichen eingeben, dann blind z.B. ein paarmal CursorDown drücken, dann Enter, und dann wird korrekt ein Wert aus der Listenauswahl eingefügt. Aber das Listenauswahlfenster selbst ist unsichtbar.
Ich vermute, ich muss der ListBox noch irgendwie mitteilen, in welche Spalte des Grids ich sie haben will - kann das sein? Leider finde ich keine entsprechende Property/Methode, so etwas wie "GridColumn" oder so (in XAML heisst es denke ich Grid.Column)
Könnt Ihr mir bitte sagen, wie ich die ListBox sichtbar bekomme?
Dieselbe Funktion klappt einwandfrei in einem anderen Tab, das aber eine Grid OHNE Spalten verwendet, hier wird die Auswahlbox einwandfrei angezeigt...
Vielen Dank und schöne Grüße
Emanuel
Hallo zusammen,
wie könnte ich denn bitte abfragen, ob aktuell ein User angemeldet ist, oder ob sich nach dem Hochfahren des Rechners noch kein User angemeldet hat.
Ich programmiere aktuell einen Windows Service, der aber nur dann etwas tun soll, wenn sich längere Zeit (z.B. ab 10 Minuten) niemand anmeldet. Sobald ein User eingeloggt ist, wird keine Aktion mehr ausgeführt.
Hierzu müsste ich die beiden Zuständen einwandfrei unterscheiden können - also ob ein User im Moment angemeldet ist oder noch keiner.
Per Google Suche hab ich einiges in diese Richtung gefunden, aber noch nichts hat wirklich funktioniert.
Habt Ihr Vorschläge ?
Vielen Dank und schöne Grüße
Emanuel
Ich habe doch nicht auf die Docs geschimpt? ratlos
Hallo,
vielen Dank!
Mit dem Packaging Projekt wird ja die ID quasi versorgt, damit funktioniert die Notification grundsätzlich.
Der Toast wird einwandfrei angezeigt, auch ohne eine ID zu übergeben.
Mit der Glaskugel bringst Du es auf den Punkt:
Ich habe bisher keine Möglichkeit gefunden, das Event abzufangen, das ausgelöst wird, wenn der User einen Button drückt.
Beide Möglichkeiten, die ich auf docs.microsoft.... gefunden habe, funktionieren nicht, die Codezeilen werden nicht erreicht.
Wie komme ich nur an diese Event?
Hallo zusammen,
ich habe ein Problem, den user input einer Toast Notification (gedrückter Button z.B.) auszuwerten - ich erreiche den Handle-Code dafür nicht.
Folgendes habe ich versucht:
ToastContentBuilder tcb = new ToastContentBuilder();
tcb.AddArgument("action", "viewConversation");
tcb.AddArgument("conversationId", 9813);
tcb.AddText("Installation will be executed in 2 minutes");
tcb.AddAppLogoOverride(new Uri(PROGRAM_PATH + "LDNotifyIcon.png"), ToastGenericAppLogoCrop.Circle);
tcb.AddHeroImage(new Uri(PROGRAM_PATH + "LDNotifyHero.png"));
tcb.AddToastInput(new ToastSelectionBox("time")
{
DefaultSelectionBoxItemId = "60",
Items =
{
new ToastSelectionBoxItem("1", "1 minute"),
new ToastSelectionBoxItem("5", "5 minutes"),
new ToastSelectionBoxItem("10", "10 minutes"),
new ToastSelectionBoxItem("60", "1 hour"),
new ToastSelectionBoxItem("240", "4 hours")
//new ToastSelectionBoxItem("1440", "1 day")
}
});
tcb.AddButton(new ToastButton()
.SetContent("Start now")
.AddArgument("action", "startNow")
.SetBackgroundActivation());
tcb.AddButton(new ToastButton()
.SetContent("Snooze")
.AddArgument("action", "snooze")
.SetBackgroundActivation());
tcb.SetToastScenario(ToastScenario.Reminder);
tcb.GetToastContent();
toast = new ToastNotification(tcb.GetXml());
toast.Activated += HandleToastActivation;
toast.Tag = "RebootNotifier";
ToastNotificationManager.CreateToastNotifier().Show(toast);
private static void HandleToastActivation(ToastNotification sender, object args)
{
Log("HandleToastActivation reached"); // writing to Logfile
}
Die Notification wird angezeigt, ich drücke z.B. "Snooze", aber die void "HandleToastActivation" wird nie durchlaufen.
Alternativ habe ich in der Startup function folgenden Code eingefügt:
ToastNotificationManagerCompat.OnActivated += toastArgs =>
{
// Obtain the arguments from the notification
ToastArguments args = ToastArguments.Parse(toastArgs.Argument);
string strAction = args.Get("action");
// Obtain any user input (text boxes, menu selections) from the notification
ValueSet userInput = toastArgs.UserInput;
userInput.TryGetValue("time", out object oTime);
...
}
Auch hier - die Codezeilen werden nie durchlaufen.
Ich habe eine wpf application, ein packaging project ist integriert, letzlich wird daraus eine MSIX Installationsdatei.
Könnt Ihr mir bitte helfen, wie ich die Reaktion des Users auswerten kann? Das wäre super.
Vielen Dank im Voraus!
Ich hab schon auch überlegt, aber der erste Post war allgemeiner, und ich hatte vermutet, dass es an was Grundlegenderem liegt als am Erzeugen oder Versorgen der korrekten AppId - das war ja nur einer der beiden Ideen. Deswegen wollte ich mit der deutlich spezifischeren Richtung diese wohl etwas verwirrende erste Thema nicht noch unübersichtlicher machen... Seht es mir bitte nach, ich fange gerade an, mich hier im Forum umzusehen, habe noch nicht so viel Erfahrung, wie das am geschicktesten geht.
Grundsätzlich schaffe ich es auch, mit WPF - ohne mich um die ID zu kümmern - einen Toast abzusetzen, und zwar mit auszugsweise diesem Code:
ToastContentBuilder tcb = new ToastContentBuilder();
tcb.AddArgument("action", "viewConversation");
tcb.AddArgument("conversationId", 9813);
...
tcb.AddText("Endpoint Management Notifications");
tcb.AddAppLogoOverride(new Uri(PROGRAM_PATH + "LDNotifyIcon.png"), ToastGenericAppLogoCrop.Circle);
tcb.AddHeroImage(new Uri(PROGRAM_PATH + "LDNotifyHero.png"));
...
DefaultSelectionBoxItemId = "60",
Items =
{
new ToastSelectionBoxItem("1", "1 minute"),
new ToastSelectionBoxItem("5", "5 minutes"),
new ToastSelectionBoxItem("10", "10 minutes"),
new ToastSelectionBoxItem("60", "1 hour"),
new ToastSelectionBoxItem("240", "4 hours")
}
tcb.AddButton(new ToastButton()
.SetContent("Start now")
.AddArgument("action", "startNow")
.SetBackgroundActivation());
...
tcb.AddButton(new ToastButton()
.SetContent("Snooze")
.AddArgument("action", "snooze")
.SetBackgroundActivation());
}
tcb.SetToastScenario(ToastScenario.Reminder);
tcb.GetToastContent();
tcb.Show();
Also solange ich nur die Klassen aus dem "Microsoft.Toolkit.Uwp.Notifications" Nuget Package verwende (z.B. ToastContentBuilder), ist alles wunderbar.
Aber ich muss die Notification auch updaten können (Herunterzählen), und das geht mit den Methoden aus diesem Toolkit nicht. Da brauche ich dann die Geschichten aus "Windows.UI.Notifications". Auch, um die Notifications danach auch wieder ausblenden zu können.
Hier z.B. der Teilcode für den Toast-Update
var toast = new ToastNotification(tcb.GetXml());
toast.Tag = "RebootNotifier";
toast.Group = "RebootNotifier";
toast.Data = new NotificationData();
toast.Data.Values["progressValue"] = "0";
toast.Data.Values["progressValueString"] = "Installation in 120 seconds";
toast.Data.Values["progressStatus"] = "Waiting for installation...";
....
ToastNotificationManager.CreateToastNotifier().Show(toast);
oder eben dann mit neuen Werten
ToastNotificationManager.CreateToastNotifier(g.ToString()).Update(data, "RebootNotifier", "RebootNotifier");
Und bei Aufruf von ToastNotificationManager.CreateToastNotifier() aus Windows.UI.Notifications braucht man eben eine App ID. Man kann den Parameter weglassen, aber nur mit einer registrierten Anwendung. Bei einer UWP Anwendung wäre das wohl kein Problem, die hat von Haus aus eine, aber in einer WPF Anwendung muss man sich selber um die App Id kümmern, und das ist laut meinem Fund (siehe Initialpost) so dermaßen aufwändig, dass ich nicht recht daran glauben mag, dass das nicht einfacher geht 😉
Daher meine spezielle Frage in diesem speziellen neuen Toast...
Habt Ihr vielleicht doch eine einfachere Idee? Vielleicht sehe ich ja auch eine ganz einfache Lösung nicht...
Vielen Dank!
Hallo zusammen,
ich stehe vor folgender Problemstellung:
Ich verwende die Methode ToastNotificationManager.CreateToastNotifier() aus Windows.UI.Notifications.
In einer WPF Anwendung, in der ich die Methode einsetze, benötigt man das Overload mit der applicationId als Parameter
.CreateToastNotifier(String)
Einbetten in ein Packaging Projekt geht übrigens nicht, weil ich eine Single-File-EXE am Ende brauche, keine MSIX Datei, die der User dann erst installieren müsste.
Nun dachte ich, die ApplicationId herauszukriegen und als String zu übergeben könnte nicht so kompliziert sein.
Aber es ist mir bisher noch nicht gelungen.
Z.B. habe ich probiert:
Guid g = Guid.NewGuid();
und dann als Parameter g.ToString() zu übergeben.
Bringt zwar keinen Fehler, aber es passiert auch nichts.
Weiss jemand von Euch, wie man die application id einer WPF Anwendung hier übergeben kann?
Ich habe zwar diese Seite gefunden, aber ich kann mir irgendwie nicht vorstellen, dass es so komplex ist, das ist ja ein ganzer Rattenschwanz, den man dazu implementieren müsste....
Grant identity to non-packaged desktop apps
Das müsste doch auch einfacher gehen ?
Vielen Dank!
Emanuel
Hallo und danke im Voraus,
Ich habe ein Problem mit einer WPF-Anwendung, die die ToastNotificationManager-Klasse verwendet:
Die ToastNotificationManager-Klasse benötigt eine App-Identity.
Ich habe diese Lösung gefunden, die am Anfang gut zu funktionieren schien:
https://www.thomasclaudiushuber.com/2019/04/26/calling-windows-10-apis-from-your-wpf-application/
Im Abschnitt "Create an Identity for Your WPF App" hat Thomas ausführlich beschrieben, wie man einer Lösung ein Windows-Anwendungspaketierungsprojekt als Startprojekt hinzufügen kann, um die App-ID zu erhalten.
Dies hat sehr gut funktioniert.
Aber nur in der Entwicklungsumgebung, also wenn ich meine Anwendung aus der Visual Studio 2019-Umgebung starte und teste
Sobald ich die App publishe (mit der Option "produce-single-file"), funktioniert sie nicht.
Die Fehler gehen eindeutig in die Richtung, dass die App-Identität fehlt. Der Fehler tritt nach dem Aufruf der Methode "ToastNotificationManager.CreateToastNotifier()" auf.
Hat jemand eine Idee, warum die Lösung mit dem Setzen der App-ID mit dem zusätzlichen Application-Packaging-Projekt als Startprojekt nur beim Aufruf der App aus der Visual Studio-Umgebung funktioniert? Und wie könnte ich es lösen, damit es auch als veröffentlichte exe-Datei läuft?
Ich habe zwei Ideen - aber ich bin ein Anfänger in C#, also gehe ich davon aus, dass Ihr bessere Ideen habt 😉
Vielen Dank für Euren Rat !
Viele Grüße
Emanuel