Laden...

Forenbeiträge von srynoname Ingesamt 223 Beiträge

20.07.2009 - 17:07 Uhr

"NetLimiter" müßte dafür geeignet sein:
>

dadurch dürfte man aber nur einen geringeren datendurchsatz erreichen, nicht jedoch antwortzeiten von z.b. 500ms.

20.07.2009 - 17:06 Uhr

kommt drauf an, .net stellt meines wissens nach nur sehr grundlegende ftp funktionen zur verfügung. schau mal in die msdn, wenn dir die funktionen reichen, nutze dieses, ansonsten eine der bibliotheken.

20.07.2009 - 17:04 Uhr

na da sage ich doch mal vielen dank an Glücksbärchie für die erkärung inkl. msdn nachweis. hätte ich da nur mal früher reingeschaut, aber ich war zu sehr darauf fixiert, das man das manuell übergeben muss und der decoder sich nur darum kümmert, unvollständige zeichen zu ignorieren.

19.07.2009 - 23:51 Uhr

das klingt natürlich gut 😃
aber widerspricht das nicht dem kommentar in der msdn?

// Use Decoder class to convert from bytes to UTF8
// in case a character spans two buffers.

oder habe ich an diesem kommentar etwas falsch verstanden?

19.07.2009 - 22:57 Uhr

hmm das wäre eine möglichkeit, nur dass ich dann unnötig einen thread dauerhaft laufen habe. könnte sich jmd. dazu äußern, wie man das ganze wirklich richtig umsetzt? da muss es doch irgendetwas optimaleres geben ):

19.07.2009 - 22:48 Uhr

hallo,

vielen dank für eure antworten und erklärungen. allerdings meinte ich nicht, wie man erkennt, wieviele bytes für ein wort benötigt werden, sondern wie der übertrag "angebrochener zeichen" stattfindet, beispiel:
die do while schleife läuft 2x durch, im ersten durchlauf steht am ende der variablen bytes ein byte von 4 bytes eines buchstabens. dieses byte am ende wird ignoriert, schließlich kordiert es nicht komplett einen buchstaben.
im 2. durchlauf der schleife stehen am anfang von bytes nun die restlichen 3 von 4 bytes, über die das zeichen codiert ist. ein byte fehlt also und dieses zeichen kann nicht decodiert werden.
insgesamt müsste mir also ein zeichen fehlen, da dies auf 2 schleifendurchläufe aufgesplittet ist, aber so wie ich das sehe kein "übertrag" stattfindet, oder?
ich müsste ja das nicht genutzte byte aus dem ersten schleifendurchlauf in den 2. schleifendurchlauf übertragen, aber dies scheint mir hier nicht der fall zu sein?

18.07.2009 - 23:00 Uhr

danke für deine antwort!
also ich finde das mit dieser zeitverzögerung einfach komisch, wenn ich z.b. 2x hintereinander daten abrufen will:

  do
            {
                bytes = stream.Read(buffer, 0, buffer.Length);
            } while (stream.DataAvailable);
do
            {
                bytes = stream.Read(buffer, 0, buffer.Length);
            } while (stream.DataAvailable);

hängt sich das ganze programm auf, weil es beim 2. abfragen natürlich keine weiteren daten gibt. wenn ich also einmal nicht aufpasse, hängt sich mein ganzes programm auf. und wenn ich das ganze ohne thread.sleep mache, also do while

  do
            {
                bytes = stream.Read(buffer, 0, buffer.Length);
            } while (stream.DataAvailable);

wie in der msdn, wer garantiert mir, das hier eben schon immer daten vorhanden sind und mein programm sich nicht aufhängt, weil eben noch keine daten vorhanden sind? da muss es doch eine geschickte lösung geben? ?(

17.07.2009 - 23:33 Uhr

Gibt es ein Tool, das die Liste der Exceptions automatisch erstellen / hinzufügen / entfernen kann, damit man das nicht immer per Hand konsistent halten muss?
der resharper automatisiert da einiges. zudem überträgt er (nach explizitem trigger) z.b. auch die methodenkommentare an die entsprechenden interfaces (und auch andersherum)

wie genau geht das denn? konnte da spontan nichts finden. schonmal vielen dank!

17.07.2009 - 22:58 Uhr

ich pushe mal, da mich die antwort immer noch interessieren würde. was ist, wenn ich in WPF eine grafik fester pixelgröße erzeugen will? vielen dank!

17.07.2009 - 22:55 Uhr

Hallo,

in der MSDN Doku zur SslStream Klasse, vgl. http://msdn.microsoft.com/de-de/library/system.net.security.sslstream.aspx, und untenstehender, betroffener Methode, gibt es den Kommentar:

   // Use Decoder class to convert from bytes to UTF8  
            // in case a character spans two buffers.

Ich verstehe das mögliche Problem, das ein Zeichen mehr als ein Byte für seine Codierung benötigt (UTF-8 erlaubt ja bis zu 4 Bytse für ein Zeichen) und ich im Buffer aktuell evtl. nur 1 von 4 Bytes habe. Allerdings verstehe ich nicht, wie untenstehender Code dieses Problem löst.
Angenommen ich habe ein Zeichen, das über 4 Bytes codiert ist. Nun lese ich 1 Byte davon. Dann müsste ich doch feststellen, dass das eine Byte alleine keine gültige Codierung darstellt. Also müsste ich mir dieses eine Byte doch merken und wenn ich die nächsten 3 Byte lese, wieder vor diesen 3 Bytse einfügen, damit ich alle 4 Bytes zusammen parat habe. Aber untenstehender Code speichert meines Verständnisses nach diesbezüglich nichts zwischen? Kann mir jemand erklären, warum untenstehender Code (hoffentlich) das tut, was er soll?

Vielen Dank!

 static string ReadMessage(SslStream sslStream)
        {
            // Read the  message sent by the client.
            // The client signals the end of the message using the
            // "<EOF>" marker.
            byte [] buffer = new byte[2048];
            StringBuilder messageData = new StringBuilder();
            int bytes = -1;
            do
            {
                // Read the client's test message.
                bytes = sslStream.Read(buffer, 0, buffer.Length);

                // Use Decoder class to convert from bytes to UTF8
                // in case a character spans two buffers.
                Decoder decoder = Encoding.UTF8.GetDecoder();
                char[] chars = new char[decoder.GetCharCount(buffer,0,bytes)];
                decoder.GetChars(buffer, 0, bytes, chars,0);
                messageData.Append (chars);
                // Check for EOF or an empty message.
                if (messageData.ToString().IndexOf("<EOF>") != -1)
                {
                    break;
                }
            } while (bytes !=0); 

            return messageData.ToString();
        }

17.07.2009 - 22:33 Uhr

warum fehlen denn eigentlich solche - meiner meinung nach grundlegende funktionen - im .net framework bzw. bei tcpclient?

17.07.2009 - 22:30 Uhr

Hallo,

ich habe folgenden Code:

            TcpClient tcpclient = new TcpClient("127.0.0.1", 143); //use beginconnect
            NetworkStream stream = tcpclient.GetStream();
            
            byte [] buffer = new byte[2048];

            StringBuilder messageData = new StringBuilder();

            int bytes = -1;

            //Thread.Sleep(1000);

            while (stream.DataAvailable)
            {
                bytes = stream.Read(buffer, 0, buffer.Length);
               
                // Use Decoder class to convert from bytes to UTF8 
                // in case a character spans two buffers. 
                Decoder decoder = Encoding.UTF8.GetDecoder();
                char[] chars = new char[decoder.GetCharCount(buffer, 0, bytes)];
                decoder.GetChars(buffer, 0, bytes, chars, 0);

                messageData.Append(chars);
            }


            MessageBox.Show(messageData.ToString());

Dabei passiert meiner Meinung nach etwas ganz merkwürdiges:
Führe ich das ganze so aus, erhalte ich in der Messagebox keine Ausgabe.
Kommentiere ich dagegen Thread.Sleep(1000) aus (oder nutze den Debugger und gehe das ganze per Einzelschritt durch, was ja auch wieder eine Zeitverzögerung darstellt), dann erhalte ich die gewünschte Ausgabe.
Ich verstehe nur nicht, warum? Es handelt sich hierbei ja um sequentielle Aufrufe, nicht um parallele oder so.

In der MSDN wird NetworkStream.DataAvailable immer per do while Schleife verwendet, damit geht es dann auch bei mir. Aber mit der do while Schleife habe ich doch das Problem, das der erste Durchlauf der Schleife immer stattfindet, ohne das ich weiß, ob Daten zum Lesen verfügbar sind!? Deswegen wollte ich eigentlich eine normale while Schleife nutzen, die finde ich irgendwie auch übersichtlicher.

Kann mir jemand erklären, warum das ganze per while Schleife / ohne Thread.Sleep nicht zuverlässig funktioniert?

Vielen Dank!

17.07.2009 - 22:16 Uhr

gibt auch noch andere kostenlose ftp libs, z.b. diese hier:
http://www.enterprisedt.com/products/edtftpnet/overview.html

06.07.2009 - 16:56 Uhr

sooo genau musste ich das auch nicht wissen 😄
meinte eigentlich nur, ob du wirklich eine optimale lösung suchst=rucksackproblem, oder der automat was reinpackt nach festem schema und du das dann nur noch grafisch wiedergeben musst.

06.07.2009 - 14:11 Uhr

Jetzt geht es aber darum, bevor ein Automat ausgeliefert wird, ein entsprechendes Programm zu erstellen, mit dem berechnet werden kann bei einer Anzahl von Quadern, wie viel Platz denn noch im Automat übrig bleibt.

muss das denn eine optimale lösung sein? für mich liest sich das so, als werden die quader da irgendwie vom automaten reingepackt und man soll dann nur wissen aws übrig ist?

06.07.2009 - 12:11 Uhr

richtig, das meinte ich vorhin in meinem post. war mir nur nicht auswendig sicher ob auch np-vollst.

mal aus neugier:
wie ist das eigentlich, bekommst du von oben order soetwas zu programmieren, weil man weiter oben nicht weiß, dass das doch etwas schwer wird?

05.07.2009 - 02:13 Uhr

hallo,

  1. ich habe eine methode A, die wiederrum auf diverse andere methoden zugreift. wie kann ich mir nun anzeigen lassen, welche exceptions ich im catch block von methode A behandeln sollte, d.h. wie kann ich mir eine auflistung aller zu A weitergereichten und dort nicht behandelten exceptions anzeigen lassen?

  2. angenommen eine methode B ruft methode C auf, methode C wirft "C-exception", behandelt diese aber nicht, sprich diese wird zu B weitergeleitet. Bei C ist die exception nun bereits dokumentiert, nicht jedoch für B. lässt sich für B irgendwie automatisch auf die beschreibung der exception von C verweisen?

vielen dank!

04.07.2009 - 18:04 Uhr

hallo,

nutze VS 2008 Pro und frage mich, ob es möglich ist, controls (die sich ganz normal auf einer form befinden) im designer auszublenden? also nicht erst zur laufzeit, dafür gibt es ja jeweils die eigenschaften des controls.

vielen dank!

04.07.2009 - 00:55 Uhr

hallo michael,

vielen dank für deine antwort.
habe einmal das beispiel auf der seite ausgeführt, leider lässt sich damit z.b. das "verbotsschild" nicht umgehen, erst wenn man mit der maus auf das ziel geht, wird der cursor verändert ):
bräuchte eine lösung um gleich zu beginn der dragoperation den cursor bis zum droppen zu ändern.

edit:
das hier scheint ganz brauchbar
Control.GiveFeedback-Ereignis

werds "morgen" / später mal testen. wenn jemand so noch eine idee hat... imemr her mit 😃

04.07.2009 - 00:39 Uhr

hallo,

2 pictureboxen A und B, ich will eine drag und drop operation von A nach B ausführen. Dabei soll beim ziehen nicht das Bild von A angezeigt werden, sondern stattdessen ein von mir festgelegtes Bild. kann mir bitte jemand helfen, wie ich dies realisiere?

wer sich fragt warum: die bilder in der picturebox haben keinen transparenten hintergrund, das sieht beim ziehen ziemlich hässlich aus. möchte daher symbolisch eine beliebige grafik mit transparentem hintergrund ziehen.

vielen dank!

03.07.2009 - 09:40 Uhr

hallo,

ich habe diverse resourcen, die ich mithilfe einer variablen laden will, also z.b. zum laden von auto1 soll einfach die variable car auf auto 1 gesetzt werden können, anschließend soll die ressource auto soetwa geladen werden können:

Properties.Resources.<variable car>

ich hoffe es ist verständlich wie ich das meine und ihr habt einen tipp, wie das variabel geht.

vielen dank!

03.07.2009 - 09:36 Uhr

für die optimale anordnung gibt es übrigens keinen effizienten algorithmus, falls du nicht nur die visualisierung irgendeiner anordnung willst. das nur als kurze anmerkung.

03.07.2009 - 00:12 Uhr

hallo gfoidl,

danke für das codebeispiel, aber daraus werde ich nicht so ganz schlau, denn das amcht ja genau das, was ich nicht will. ich will, das auch wenn ich auf den button klicke, das Form MouseDown event ausgelöst wird, bei dir erhalte ich aber in der titelleiste buttonMouseDown wenn ich auf den Button klicke, gewüsncht wäre jedoch das von der Form, also FormMousedown.
Aber die Lösung steht ja schon weiter oben 😉

02.07.2009 - 15:59 Uhr

weil der button das mousedown event so oder so schluckt, unabhängig ob für ihn dieses event registriert ist ):

02.07.2009 - 15:52 Uhr

danke, der gedanke kam mir dann vorhin auch, wobei man das Form Event auch direkt aufrufen kann, d.h. als Eventfunktion angeben kann, anstatt erst in der methode des Buttonevents darauf zu verweisen.

02.07.2009 - 15:13 Uhr

Hallo,

angenommen ich habe eine Form und das MouseDown Event für die Form. Füge ich nun einen Button in die Form ein, tritt das MouseDown Event für die Form nur außerhalb des Bereiches des Buttons auf, sprich der Button "schluckt" das Mousedown Event.
Wie kann ich Events an die Form weiterleiten?
Für Tasten Events gibt es die Option KeyPreview, gibt es soetwas auch für Mausaktionen, z.b. Mausclick, bewegung...?

Vielen Dank!

17.06.2009 - 20:38 Uhr

Hallo,

ich habe eine Singlethreaded Anwendung, in der ein Event mehrmals pro Sekunde ausgelöst wird. Ist denn dadurch, dass es keine Multithread Anwendung ist, sichergestellt, dass die mit dem Event verknüpfte Methode immer erst vollständig ausgeführt wird, bevor sie das nächste mal ausgeführt wird?

Vielen Dank!

17.06.2009 - 01:00 Uhr

Hallo,

anscheinend darf ich lokale Variablen nicht per XML dokumenteiren, zumindset erzeugt /// kein Template, wie es bei Klassenvariablen der Fall ist.
Warum? In längeren / komplexeren Methoden würde ich das sehr hilfreich finden - wenn ich normal kommentiere, steht das Kommentar ja nur bei der Definition der Variable, nicht überall wo ich sie benutze (wie se bei der XML Doku ja der Fall ist, wenn man mit der Maus drüber geht).

Kann man dies evtl. umstellen?

Vielen Dank!

16.06.2009 - 21:49 Uhr

Hallo,

kann mir bitte jemand verraten, welches Tool man denn aktuell nutzt, um aus der XML Dokumentation eine HTML oder besser noch CHM Dokumentation zu erstellen?
Laut Google war wohl anscheinend nDoc mal der Renner, aber das kommt mit aktuellen .Net Versionen ja nicht mehr zurecht...
Oder geht es evtl. irgendwie direkt über Visual Studio 2008 (keine Expressvesion) und ich habe etwas übersehen?

Vielen Dank!

16.06.2009 - 20:41 Uhr

Hallo,

ich habe eine Klasse erstellt, die von Panel erbt.
Nun möchte ich für die Größe des Controls nur ungerade Werte erlauben und würde dazhu gerne die Size eigenschaft überschreiben bzw. deren get / set Accessoren.
Ist das denn möglich? Weiß bisher nur wie man Methoden überschreibt, geht das bei Accessoren überhaupt bzw. vor allem bei diesem?

Vielen Dank!

10.06.2009 - 23:06 Uhr

hallo,

in letzter Zeit musste ich öfters mal P/Invoke nutzen und würde gerne den code mit einem verweis auf die doku ausrüsten. falls msdn lokal installiert ist, solte diese aufgerufen werden, wenn nicht sollte man auf die entsprechende onlineseite verwiesen werden. gibt es für die soetwas einträge soetwas wie IDs / eine entsprechende Funktion in Visual Studio bzw. was ist denn der de facto Standard zum Verweisen auf MSDN?

Vielen Dank!

10.06.2009 - 22:19 Uhr

hallo,

angenommen ich brauche ein rechteck mit 400x200 pixeln und will das rechteck über vektoren erzeugen (da das rechteck z.b. eine seite eines würfels ist), wie rechne ich dann die pixel in vektoren um bzw. kann man z.b. einen maßstab festlegen, so dass z.b. 1 0 0 (x y z Koordinaten) ein pixel in x richtung bedeutet?

vielen dank!

03.06.2009 - 01:03 Uhr

hallo,

ich werde aus der GetType() methode nicht ganz schlau, zumindest nicht in diesem kontext:

Cursor cur = new Cursor(GetType(), "Resources.cursor.cur");

Wieso benötige ich den aktuellen Typ, um eine Resource zu laden? Die Resourcen sind doch "global" in der Assembly gespeichert, unabhängig von der aktuellen Klasse? 🤔 Und GetType() gibt doch einen "qualifizierten Pfad" zurück, wofür braucht man den denn?

03.06.2009 - 01:00 Uhr

nachtrag:

Cursor cur = new Cursor(GetType(), "Resources.cursor.cur");

scheint zu funktionieren. Resources ist hierbei schlichtweg der Ordner im Projekt, den Visual Studio anlegt (evtl. gibt es auch zufällig einen gleichen namespace, ka, auf jeden fall ist es nicht der projektname!).

03.06.2009 - 00:44 Uhr

hallo,

nutze die visual c# 2008 express edition und frage mich, wie man denn bei ressourcen als buildvorgang "eingebettete ressource" als standard einstellen kann?

vielen dank!

03.06.2009 - 00:39 Uhr

[ja ich weiß, der thread ist alt]

hallo,

hat denn jemand eine idee, was bei dem obigen beispiel falsch ist? mit vollem namespace habe ich es auch schon versucht, will nicht...

fürs archiv, hier eine funktionierende lösung, wüsste nur gerne, was an der lösung aus diesem thread falsch ist...
funktionierende, alternative lösung: Eigener Cursor einbinden

18.05.2009 - 12:16 Uhr

selbes problem hier, möchte einen 3d würfel erstellen und auf jeder seite diverse controls, also praktisch pro würfelseite eine form.
hat jemand soetwas schonmal gemacht und könnte es hier posten?

14.05.2009 - 12:58 Uhr

vielen dank, ich habe das nun mal getestet, leider funktioniert es nicht so wie ich will....
clientrectangle und size geben mir für width und height das selbe aus, soweit ok.
aber für X,Y gibt mir clientrectangle 0,0 aus? sollet das für y nicht 0 + dicke der titelleiste (relativer wert) oder location.x + dicke der titelleiste (absoluter wert) sein? zumindset suche ich das verzweifelt ):

13.05.2009 - 22:03 Uhr

danke für eure antworten, aber eigeninitiative habe ich schon ergriffen, nur size macht nicht das was ich will.
meine frage war ja, wo dieser bereich beginnt (koordinaten in der form), nicht wie groß er ist. wie kann ich das denn herausfinden? vielen dank!

13.05.2009 - 21:28 Uhr

hallo winSharp93,

vieeln dank für deine antwort.
mal ganz doof gefragt, wie rufe ich das auf?
müsste eine form das nicht erben? Aber this.ClientArea (in Form1 : Form) gibt es nicht...

13.05.2009 - 19:49 Uhr

hallo,

wie kann ich den die höhe des titels einer form und die rahmendicke abfragen bzw ab wo der "zeichenbare" bereich, d.h der hauptbereich der buttons etc. beinhaltet, beginnt?

vielen dank!

12.05.2009 - 19:03 Uhr

.

12.05.2009 - 19:02 Uhr

hallo rechner, danke für deine antwort.

bei backcolor transparent wird nur die farbe des darunterliegenenden elements als hintergrundfarbe genutzt, z.b. hier ein panel mit backcolor transparent über einem button:
[siehe anhang]
wie man deutlich sieht, hat das leider wenig mit transparent zu tun.

ich habe einmal den msdn artikel gelesen und mir eine TPanel klasse gebaut:

 class TPanel : Panel
    {
        public TPanel()
        {
            SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            this.BackColor = Color.Transparent;
        } 
    }

anschließend habe ich einen button und ein tpanel zu einer windows form hinzugefügt. leider liegt nun der button praktisch über dem tpanel, in das ich einen kreis gezeichnet habe:
[siehe nächsten post]
weiß jemand wie man das korrigiert? der kreis soll über dem button liegen.

vielen dank!

12.05.2009 - 17:54 Uhr

Hallo,

kann mir bitte jemand sagen, wie ich ein Panel transparent mache?
Ich habe es bereits mit BackColor Transparent versucht, aber das bringt leider nichts ):

Vielen Dank!

12.05.2009 - 00:55 Uhr

Hallo,

ich betreibe einen Wii Controller am PC, der liefert mir bis zu 4 X, Y Koordinatenpaare (Wii Controller = Infrarot Empfänger, tracke damit 4 Infrarot Quellen, vgl. z.B. http://johnnylee.net/projects/wii/).
Nun frage ich mich, ob ich in einem C# Programm praktisch 2 Mauszeiger (jeweils der Mittelpunkt 2er X,Y Koordinatenpaare, aber die Details sollten hier auch nicht relevant sein) emulieren kann, denen ich selbst X und Y Koordinaten gebe und sage wann geklickt wurde, so dass ich mit dem Wii Controller ein ganz normales C# Programm nutzen kann?
Alternativ frage ich mich, wie ich möglichst effizient prüfe, über welchem Button ich mich grade befinde und dann entsprechend eine Aktion ausführen kann. Aktuell viele mir nur ein, alle paar Milisekunden eben zu prüfen ob ich in einem bestimmten Bereich bin, geht das irgendwie "schöner"?

Vielen Dank!

12.05.2009 - 00:49 Uhr

hallo,

folgende situation:
grafische oberfläche mit diversen buttons, soweit nichts besonderes.
darüber sollen mehrere punkte kommen, die eigentlich immer ihre position verändern (wie z.b. ein mauscursor, die daten kommen vom wii controller) d.h. also immer wieder neu gezeichnet werden müssen, die drunterliegende grafische oberfläche wird aber weitgehend nicht neu gezeichnet.
wie gehe ich am geschicktesten vor, um in meinem programm über die grafische oberfläche eben nochmals punkte drüberzulegen? mir geht es vor allem darum, nicht immer die ganze oberfläche neu zeichnen zu müssen, sondern nur die alte position eines punktes zu löschen und die neue zu zeichnen.

hoffe ich habe das einigermaßen verständlich ausgedrückt und ihr könnt mir da helfen, schonmal vielen dank!

14.02.2009 - 15:14 Uhr

hmm also ich wäre auch bereit mich mal n bisle in c++ einzuarbeiten, nur ich hab halt generell keine idee wie sowas geht, wie ich ne shell extension schreibe und vor allem wie ich die halt für genau diese aktion registriere. wie man ne shell extension schreibt, das bekmmt man wahrscheinlich noch gut über google raus...

14.02.2009 - 12:04 Uhr

danke, das ist mir schon bekannt, aber man kann die api ja per pinvoke nutzen wenn ich da richtig informiert bin? so oder so muss ich aber erstmal wissen, wo ich denn erfahre, wie sowas geht? :

13.02.2009 - 19:51 Uhr

Hallo,

würde gerne diverse Dinge an Windows selbst verbessern bzw. wissen wie das allgemein geht / wo ich erfahre mit welchen funktionen das geht. diese wären z.b.

  1. Ein eigener Copy Handler für den Windows Explorer so wie z.b. TeraCopy http://www.codesector.com/teracopy.php
  2. Die Möglichkeit, die offenen Programme in der Taskbar zu verschieben, so wie z.B. taskbarshuffle http://www.freewebs.com/nerdcave/taskbarshuffle.htm

Wie macht man denn sowas? Ich wüsste nicht, wo ich da nach den entsprechenden Funktionen oder was ich da brauche suchen müsste und ne gute Suchanfrage für Google fällt mir auch nicht ein :

Vielen Dank!

13.11.2008 - 21:32 Uhr

Hallo,

kann mir jemand sagen, wie ich per C# das Outlook Express Adressbuch und evtl. auch WAB Dateien direkt lesen und schreiben kann?

Vielen Dank!