AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi ShowMessage mit ungewollten Zeilenumbruch
Thema durchsuchen
Ansicht
Themen-Optionen

ShowMessage mit ungewollten Zeilenumbruch

Ein Thema von H.Bothur · begonnen am 8. Jun 2023 · letzter Beitrag vom 8. Jun 2023
Antwort Antwort
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#1

ShowMessage mit ungewollten Zeilenumbruch

  Alt 8. Jun 2023, 10:57
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
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#2

AW: ShowMessage mit ungewollten Zeilenumbruch

  Alt 8. Jun 2023, 11:02
...
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
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
969 Beiträge
 
Delphi 6 Professional
 
#3

AW: ShowMessage mit ungewollten Zeilenumbruch

  Alt 8. Jun 2023, 11:02
Hmm..

Versuche mal

  Arbeitsverzeichnis := StringReplace(Arbeitsverzeichnis, ' ', '*', [rfReplaceAll, rfIgnoreCase]);
StringReplace ist eine Function, die den 'neuen', 'geänderten' String zurück gibt....
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

AW: ShowMessage mit ungewollten Zeilenumbruch

  Alt 8. Jun 2023, 11:45
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: ShowMessage mit ungewollten Zeilenumbruch

  Alt 8. Jun 2023, 15:36
Hmm..

Versuche mal

  Arbeitsverzeichnis := StringReplace(Arbeitsverzeichnis, ' ', '*', [rfReplaceAll, rfIgnoreCase]);
StringReplace ist eine Function, die den 'neuen', 'geänderten' String zurück gibt....
Danke - Blindheit sei mein !

Gruss
Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#6

AW: ShowMessage mit ungewollten Zeilenumbruch

  Alt 8. Jun 2023, 15:47
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

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
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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 8. Jun 2023 um 16:14 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 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