Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi ShowMessage mit ungewollten Zeilenumbruch (https://www.delphipraxis.net/213165-showmessage-mit-ungewollten-zeilenumbruch.html)

H.Bothur 8. Jun 2023 09:57

ShowMessage mit ungewollten Zeilenumbruch
 
Moin,

ich stelle hier mal zwei Fragen zusammen rein weil ich nicht weiß ob die evtl. zusammengehören:

Folgender Sourcecode:

Delphi-Quellcode:
  if not SysUtils.DirectoryExists(ArbeitsVerzeichnis) then
  begin
    Arbeitsverzeichnis := 'd:\h.bothur\entw\anw\soern 2datev\v7.0\Soe2Datev';
    StringReplace(Arbeitsverzeichnis, ' ', '*', [rfReplaceAll, rfIgnoreCase]);
    ShowMessage('Falsches Verzeichnis im INI-String !' +#13 +'Programm wird beendet' + #13 + 'Verzeichnis: ' +Arbeitsverzeichnis);
    Application.Terminate;
  end;
Erwarten würde ich jetzt als Ausgabe:

Falsches Verzeichnis im INI-String !
Programm wird beendet
Verzeichnis: d:\h.bothur\entw\anw\soern 2datev\v7.0\Soe2Datev


ich bekomme aber:

Falsches Verzeichnis im INI-String !
Programm wird beendet
Verzeichnis: d:\h.bothur\entw\anw\soern
2datev\v7.0\Soe2Datev

Sprich:

1) Das Stringreplace ersetzt das Leerzeichen nicht durch einen '*' - warum nicht ?
2) Woher kommt der Zeilenumbruch beim Leerzeichen ?

Danke
Hans

Incocnito 8. Jun 2023 10:02

AW: ShowMessage mit ungewollten Zeilenumbruch
 
Zitat:

Zitat von H.Bothur (Beitrag 1523180)
...
Delphi-Quellcode:
  if not SysUtils.DirectoryExists(ArbeitsVerzeichnis) then
  begin
    Arbeitsverzeichnis := 'd:\h.bothur\entw\anw\soern 2datev\v7.0\Soe2Datev';
    StringReplace(Arbeitsverzeichnis, ' ', '*', [rfReplaceAll, rfIgnoreCase]);
    ShowMessage('Falsches Verzeichnis im INI-String !' +#13 +'Programm wird beendet' + #13 + 'Verzeichnis: ' +Arbeitsverzeichnis);
    Application.Terminate;
  end;
...
1) Das Stringreplace ersetzt das Leerzeichen nicht durch einen '*' - warum nicht ?
...

Doch, aber du speicherst das nicht wieder zurück:
Delphi-Quellcode:
  if not SysUtils.DirectoryExists(ArbeitsVerzeichnis) then
  begin
    Arbeitsverzeichnis := 'd:\h.bothur\entw\anw\soern 2datev\v7.0\Soe2Datev';
    Arbeitsverzeichnis := StringReplace(Arbeitsverzeichnis, ' ', '*', [rfReplaceAll, rfIgnoreCase]);
    ShowMessage('Falsches Verzeichnis im INI-String !' +#13 +'Programm wird beendet' + #13 + 'Verzeichnis: ' +Arbeitsverzeichnis);
    Application.Terminate;
  end;
Und "ja", das ShowMessage mach bei Leerzeichen einfach irgendwann Zeilenumbrüche (WordWrap), wenn die Zeile "zu lang wird".
Frag mich aber nicht, was "zu lang" ist. Ich habe mich damit abgefunden. 😅

LG Incocnito

HolgerX 8. Jun 2023 10:02

AW: ShowMessage mit ungewollten Zeilenumbruch
 
Hmm..

Versuche mal

Delphi-Quellcode:
  Arbeitsverzeichnis := StringReplace(Arbeitsverzeichnis, ' ', '*', [rfReplaceAll, rfIgnoreCase]);

StringReplace ist eine Function, die den 'neuen', 'geänderten' String zurück gibt....

himitsu 8. Jun 2023 10:45

AW: ShowMessage mit ungewollten Zeilenumbruch
 
Zu langer Text wird an vielen Stellen automatisch umgebochen.

Teilweise kann man dort z.B. die Space (Leerzeichen) durch einen NonBreakingSpace (#160) ersetzen,
falls es in der Komponente/API keinen Option dafür gibt, wie z.B. das WordBreak im TMemo.

H.Bothur 8. Jun 2023 14:36

AW: ShowMessage mit ungewollten Zeilenumbruch
 
Zitat:

Zitat von HolgerX (Beitrag 1523182)
Hmm..

Versuche mal

Delphi-Quellcode:
  Arbeitsverzeichnis := StringReplace(Arbeitsverzeichnis, ' ', '*', [rfReplaceAll, rfIgnoreCase]);

StringReplace ist eine Function, die den 'neuen', 'geänderten' String zurück gibt....

Danke - Blindheit sei mein ! :-)

Gruss
Hans

himitsu 8. Jun 2023 14:47

AW: ShowMessage mit ungewollten Zeilenumbruch
 
Da es vom * keine groß-/kleingeschriebene Version gibt, ist das rfIgnoreCase unnötig,
und da ich schreibfaul bin und das rfReplaceAll auch nicht haben mag, benutze ich einfach die neuere API Delphi-Referenz durchsuchenReplaceStr

Delphi-Quellcode:
Arbeitsverzeichnis := ReplaceStr(Arbeitsverzeichnis, ' ', #160);
bzw. Delphi-Referenz durchsuchenReplaceText falls doch CaseInsensitiv.

oder gar die noch neueren StingHelper ala StringVariable.Replace(...)
https://docwiki.embarcadero.com/Libr....TStringHelper
Delphi-Quellcode:
ShowMessage('Falsches Verzeichnis im INI-String !'#10'Programm wird beendet.'#10'Verzeichnis: ' + Arbeitsverzeichnis.Replace(' ', #160));


Ab einer gewissen Breite gibt es dennoch einen Zwangsumbruch (außer du hast auch einen UltraWide-Monitor mit mehr Platz)
und genauso kann man auch andersrum "Sollbruchstellen" einfügen (z.N. WBR WordBreak oder SHY Soft-Hyphen), damit es an definierter Stelle umbricht, falls nötig.


https://en.wikipedia.org/wiki/Non-breaking_space


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz