{"id":912,"date":"2013-05-20T12:30:29","date_gmt":"2013-05-20T11:30:29","guid":{"rendered":"https:\/\/minibrain.wordpress.com\/?p=912"},"modified":"2013-05-20T12:30:29","modified_gmt":"2013-05-20T11:30:29","slug":"progressbar-fr-die-console","status":"publish","type":"post","link":"https:\/\/abramowitsch.de\/blog\/?p=912","title":{"rendered":"ProgressBar f\u00fcr die Console"},"content":{"rendered":"<p>F\u00fcr ein kleines Projekt brauchte ich einen Fortschrittsbalken f\u00fcr eine Kommandozeilen-Applikation. Ich war erstaunt, wie einfach das funktionierte und m\u00f6chte meine Erfahrungen hier teilen.<\/p>\n<p>Hier schon mal ein Blick auf das Endergebnis:<\/p>\n<p><a href=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2013\/05\/image.png\"><img loading=\"lazy\" decoding=\"async\" title=\"image\" style=\"background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border-width:0;\" border=\"0\" alt=\"image\" src=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2013\/05\/image_thumb.png\" width=\"644\" height=\"422\" \/><\/a><\/p>\n<p>Zuerst einmal m\u00fcssen die Begrenzungen des Fortschrittsbalken gezeichnet werden.<\/p>\n<p>Um den Cursor zu positionieren, kann auf die statischen Eigenschaften CursorTop und CursorLeft der Console zur\u00fcckgegriffen werden:<\/p>\n<p><a href=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2013\/05\/cursortopleft.png\"><img loading=\"lazy\" decoding=\"async\" title=\"CursorTopLeft\" style=\"border-top:0;border-right:0;background-image:none;border-bottom:0;padding-top:0;padding-left:0;border-left:0;display:inline;padding-right:0;\" border=\"0\" alt=\"CursorTopLeft\" src=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2013\/05\/cursortopleft_thumb.png\" width=\"644\" height=\"419\" \/><\/a><\/p>\n<p>Hier der Code zum Erstellen der Begrenzungen des Fortschrittsbalkens:<\/p>\n<p><font face=\"Consolas\"><em>\/\/ Create boundaries for progress bar        <br \/>Console.CursorTop = topOffset;         <br \/>Console.CursorLeft = leftOffset;         <br \/>Console.Write(&quot;[&quot;);         <br \/>Console.CursorLeft = length;         <br \/>Console.Write(&quot;]&quot;);<\/em><\/font>     <\/p>\n<p>Das sieht dann erstmal so aus:<\/p>\n<p><a href=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2013\/05\/image1.png\"><img loading=\"lazy\" decoding=\"async\" title=\"image\" style=\"background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border-width:0;\" border=\"0\" alt=\"image\" src=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2013\/05\/image_thumb1.png\" width=\"644\" height=\"422\" \/><\/a><\/p>\n<p>&#160;<\/p>\n<p>Dann f\u00fcllen wir die Begrenzungen mit dem aktuellen Fortschritt:<\/p>\n<p><font face=\"Consolas\"><\/font><\/p>\n<p><font face=\"Consolas\"><em>\/\/ Calculate size of one percent element        <br \/>float progressElementSize = ((float)length &#8211; leftOffset &#8211; 2) \/ total;<\/em><\/font><\/p>\n<p><font face=\"Consolas\"><em>\/\/ Create progress content        <br \/>int position = 1;         <br \/>Console.CursorLeft = position;         <br \/>for (int i = leftOffset; i &lt; progressElementSize * progress; i++)         <br \/>{         <br \/>&#160;&#160;&#160; Console.BackgroundColor = progressColor;         <br \/>&#160;&#160;&#160; Console.CursorLeft = position++;         <br \/>&#160;&#160;&#160; Console.Write(&quot; &quot;);         <br \/>}         <br \/>Console.BackgroundColor = ConsoleColor.Black;<\/em><\/font><\/p>\n<p>Und das sieht dann so aus:<\/p>\n<p><a href=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2013\/05\/image2.png\"><img loading=\"lazy\" decoding=\"async\" title=\"image\" style=\"background-image:none;padding-top:0;padding-left:0;display:inline;padding-right:0;border-width:0;\" border=\"0\" alt=\"image\" src=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2013\/05\/image_thumb2.png\" width=\"644\" height=\"422\" \/><\/a><\/p>\n<p>Ganz wichtig: In der letzten Zeile wird die Farbe wieder auf schwarz gesetzt, da sonst die aktuelle Schriftfarbe auf die des Fortschritts gesetzt wird.<\/p>\n<p>Abschlie\u00dfend will ich noch den aktuellen Fortschritt prozentual anzeigen:<\/p>\n<p><font face=\"Consolas\"><em>\/\/ Write progress message        <br \/>Console.CursorLeft = length + 2;         <br \/>int result = progress * 100 \/ total;         <br \/>Console.Write(customProgressMessage ?? (result + &quot;%&quot;).PadLeft(4));<\/em><\/font><\/p>\n<p>Das <font face=\"Consolas\"><em>.PadLeft(4)<\/em><\/font> habe ich angeh\u00e4ngt, damit der String nicht springt, wenn von 9% auf 10% und von 99% auf 100% gesprungen wird.<\/p>\n<p>Viel Spa\u00df damit <img decoding=\"async\" class=\"wlEmoticon wlEmoticon-smile\" style=\"border-style:none;\" alt=\"Smiley\" src=\"http:\/\/abramowitsch.de\/blog\/wp-content\/uploads\/2013\/05\/wlemoticon-smile1.png\" \/><\/p>\n<p>Download: <a title=\"http:\/\/sdrv.ms\/10HH7Pk\" href=\"http:\/\/sdrv.ms\/10HH7Pk\">http:\/\/sdrv.ms\/10HH7Pk<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>F\u00fcr ein kleines Projekt brauchte ich einen Fortschrittsbalken f\u00fcr eine Kommandozeilen-Applikation. Ich war erstaunt, wie einfach das funktionierte und m\u00f6chte meine Erfahrungen hier teilen. Hier schon mal ein Blick auf das Endergebnis: Zuerst einmal m\u00fcssen die Begrenzungen des Fortschrittsbalken gezeichnet werden. Um den Cursor zu positionieren, kann auf die statischen Eigenschaften CursorTop und CursorLeft der [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3,17,20],"tags":[35,51,60,75],"class_list":["post-912","post","type-post","status-publish","format-standard","hentry","category-net","category-sonstiges","category-visual-studio-net","tag-console","tag-fortschrittsbalken","tag-kommandozeile","tag-progress"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3Ug90-eI","_links":{"self":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/912","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=912"}],"version-history":[{"count":0,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/912\/revisions"}],"wp:attachment":[{"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=912"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=912"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/abramowitsch.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}