Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ausgabe (Text) automatisch unterstreichen lassen? (https://www.delphipraxis.net/114912-ausgabe-text-automatisch-unterstreichen-lassen.html)

coly546 4. Jun 2008 08:06

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:
MyWriteLn('           ','DasisteineUeberschrift');
verwendeten Leerzeichen via Tastatur, eine "Zählschleife" verwenden.
Als ich nun die besagte Zeile 23 gegen diese:
Delphi-Quellcode:
MyWriteLn(for i:=1 to 20 do write(#32),'DasisteineUeberschrift');
mit "Zählschleife" ersetzte, wollte er das Programm nicht mehr compilieren.



Jetzt stellt sich für mich die Frage, was ich machen kann damit es auch mit einer "Zählschleife" funktioniert.



freundliche Grüße
coly546

taaktaak 4. Jun 2008 08:13

Re: Ausgabe (Text) automatisch unterstreichen lassen?
 
Moin, Moin,
die Schleife muss in die Prozedur, du übergibst nur die Schleifenobergrenze als Integer (oder Byte).

tomsel 4. Jun 2008 08:23

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));

taaktaak 4. Jun 2008 08:30

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.

tomsel 4. Jun 2008 08:53

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]

coly546 4. Jun 2008 09:25

Re: Ausgabe (Text) automatisch unterstreichen lassen?
 
Zitat:

Zitat von taaktaak
Schön, damit ist's einfacher
- ich gehe aber davon aus, dass es coly546 primär um das "Selberbauen" geht.

Richtig, ich als Anfänger möchte mich da erstmal mit einer "ausführlicheren" Schreibweise,
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:

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 Zwinkern [/Edit]
hmmm...ist nur die Frage wie ich das umsetzen soll :(

tomsel 4. Jun 2008 09:32

Re: Ausgabe (Text) automatisch unterstreichen lassen?
 
Delphi-Quellcode:
 //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----------------
Siehe Kommentare oben, was fällt dir da auf? :zwinker:

taaktaak 4. Jun 2008 09:36

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;

tomsel 4. Jun 2008 09:38

Re: Ausgabe (Text) automatisch unterstreichen lassen?
 
Musst du alles ausplaudern? Er wollte doch selber denken. :mrgreen:

taaktaak 4. Jun 2008 09:46

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.
Seite 2 von 3     12 3      

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