![]() |
Ein weiteres kleines Problem
Hi,
ich möchte meine automatische Text-Unterstreichung noch etwas verfeinern. Und zwar sollte man auch den "Freiraum" vor der Überschrift frei bestimmen können. Dazu habe ich die Prozedur wie folgt erweitert:
Delphi-Quellcode:
program textautomatischunterstreichen2;
{$APPTYPE CONSOLE} uses SysUtils; //001----Procedure-------Anfang-------------- procedure MyWriteLn(leer,text:string); var i:byte; begin write(leer); writeln(text); for i:=1 to length(leer) do write(#32); for i:=1 to length(text) do write(#196); writeln; end; //001----Procedure--------Ende---------------- //-------Hauptprogramm----Anfang-------------- begin MyWriteLn(' ','DasisteineUeberschrift'); readln; end. //-------Hauptprogramm----Ende---------------- So weit so gut, allerdings möchte ich anstelle von den in der Zeile 23:
Delphi-Quellcode:
verwendeten Leerzeichen via Tastatur, eine "Zählschleife" verwenden.
MyWriteLn(' ','DasisteineUeberschrift');
Als ich nun die besagte Zeile 23 gegen diese:
Delphi-Quellcode:
mit "Zählschleife" ersetzte, wollte er das Programm nicht mehr compilieren.
MyWriteLn(for i:=1 to 20 do write(#32),'DasisteineUeberschrift');
Jetzt stellt sich für mich die Frage, was ich machen kann damit es auch mit einer "Zählschleife" funktioniert. freundliche Grüße coly546 |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Moin, Moin,
die Schleife muss in die Prozedur, du übergibst nur die Schleifenobergrenze als Integer (oder Byte). |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Wie wär's damit:
Delphi-Quellcode:
Writeln(StringOfChar(#32, i), myString);
Writeln(StringOfChar(#32, i), StringOfChar('_', Length(myString)); |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Schön, damit ist's einfacher
- ich gehe aber davon aus, dass es coly546 primär um das "Selberbauen" geht. |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Ja, ähm, glaub ich ja auch. Ein anderer Vorschlag: Bau deine MyWriteln-Function doch so um, dass du ihr einfach nur die Länge des Leerstrings an Stelle des Strings selbst übergibst.
[Edit] Mit Leerstring meine ich natürlich nicht '', sondern einen String aus Leerzeichen :zwinker: [/Edit] |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Zitat:
die ich im Moment auch verstehe "durchfummeln". Trotzdem danke tomsel. Wenn ich die Schleife in die Prozedur mache, befindet sich der Strich aber am linken Bildrand.
Delphi-Quellcode:
//001----Procedure-------Anfang--------------
procedure MyWriteLn(leer,text:string); var i:byte; begin for i:=1 to 20 do write(#32); writeln(text); for i:=1 to length(leer) do write(#32); for i:=1 to length(text) do write(#196); writeln; end; //001----Procedure--------Ende---------------- //-------Hauptprogramm----Anfang-------------- begin MyWriteLn('','DasisteineUeberschrift'); readln; end. //-------Hauptprogramm----Ende---------------- Ich müsste das glaube so machen, dass er nochmal die selbe Anzahl für die Leerzeichen wie oben angegeben, für die Anzahl der Leerzeichen verwendet für den Bereich vor den Strichen (#196). Dann müsste es ja so aussehen:
Delphi-Quellcode:
//001----Procedure-------Anfang--------------
procedure MyWriteLn(leer,text:string); var i:byte; begin for i:=1 to 20 do write(#32); writeln(text); for i:=1 to length(text) do write(#196); for i:=1 to length(leer) do write(#32); writeln; end; //001----Procedure--------Ende---------------- //-------Hauptprogramm----Anfang-------------- begin MyWriteLn('','DasisteineUeberschrift'); readln; end. //-------Hauptprogramm----Ende---------------- Nur irgendwie geht das trotzdem nicht. :wall: Zitat:
|
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Delphi-Quellcode:
Siehe Kommentare oben, was fällt dir da auf? :zwinker:
//001----Procedure-------Anfang--------------
procedure MyWriteLn(leer,text:string); var i:byte; begin for i:=1 to 20 do write(#32); writeln(text); // hier schreibst du 20 Leerzeichen for i:=1 to length(leer) do // hier verwendest du statt 20 die Länge von leer write(#32); for i:=1 to length(text) do write(#196); writeln; end; //001----Procedure--------Ende---------------- //-------Hauptprogramm----Anfang-------------- begin MyWriteLn('','DasisteineUeberschrift'); // als leer übergibst du hier einen String der Länge 0 readln; end. //-------Hauptprogramm----Ende---------------- |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Nun, du bist der Lösung ja schon sehr nah! Du musst die Unterstreichung genau so beginnen wie die Textausgabe. Also: Zuerst Leerzeichen, dann Text, noch 'mal Leerzeichen, dann Unterstriche. Die Zahl der Leerzeichen übergibst du der Prozedur, also in etwa so
Delphi-Quellcode:
procedure MyWriteln(AnzLeerzeichen:Byte;Text:String);
var i : Byte; begin for i:=1 to AnzLeerzeichen do write(' '); writeln(Text); for i:=1 to AnzLeerzeichen do write(' '); for i:=1 to length(Text) do write('-'); end; |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Musst du alles ausplaudern? Er wollte doch selber denken. :mrgreen:
|
Re: Ausgabe (Text) automatisch unterstreichen lassen?
:oops: Na, manchmal ist ein kleiner Schubs auch nicht schlecht, dann ist der Kopf für die nächste Herausforderung frei. Wenn man zu lange an einer Stelle herumdoktert ist das auch nicht motivierend. Schwer einzuschätzen, wann so ein Zeitpunkt erreicht ist. Grundsätzlich gebe ich dir Recht!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz