Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ShowMessage oder Format kürzt Texte (https://www.delphipraxis.net/203094-showmessage-oder-format-kuerzt-texte.html)

zeras 12. Jan 2020 16:05

Delphi-Version: 10.3 Rio

ShowMessage oder Format kürzt Texte
 
Ich nutze
Delphi-Quellcode:
ShowMessage(Format('Script für Version "%s" unter "%s" nicht gefunden!' + #10#13#10#13 + 'Abbruch!', [PLC_VER, ScriptName]));

zum Anzeigen einer Datei inkl. Pfad. Da der Pfad aber relativ lang ist, kürzt entweder ShowMessage oder Format den String des Pfades. Die fehlenden Zeichen werden durch "..." dargestellt. Diese sind aber für meine Anwendung die wichtigen Infos, da es viele Parallelpfade gibt, die ähnlich heißen.
Kann ich Delphi dazu bringen, den kompletten Pfad anzuzeigen?

hoika 12. Jan 2020 16:29

AW: ShowMessage oder Format kürzt Texte
 
Hallo,
Bau den String normal mit IntToStr zusammen.

DieDolly 12. Jan 2020 16:32

AW: ShowMessage oder Format kürzt Texte
 
Bei mir wird mit Format() nix abgeschnitten. Das scheint wohl an der Länge zu liegen. IntToStr() bringt da nicht viel. Das Problem ist ShowMessage().

Bernhard Geyer 12. Jan 2020 16:37

AW: ShowMessage oder Format kürzt Texte
 
Nimm Taskdialog (http://docwiki.embarcadero.com/Libra...gs.TTaskDialog) und lege diese langen Texte in das Property ExpandedText und als haupttext nur noch ein "Script nicht gefunden".

himitsu 12. Jan 2020 16:45

AW: ShowMessage oder Format kürzt Texte
 
Leider ein Windows-Problem, was ich auch schon ewig extrem krank finde, aber da gibt es leider keine Lösung.
Nicht-umbrechbare Wörter werden nicht umgebrochen und bei zu breit wird die Zeile abgeschnitten, selbst wenn in der Breite eigentlich noch tausende Pixel plätz wären, würde der Dialog breiter werden.

Einige Lösung, du mußt selber Trennzeichen in zu lange Wörter einfügen,
also entweder an passenden Stellen einen Zeilenumbruch oder ein Leerzeichen, oder einfach alle x zeichen ein zerospace-whitespace einfpgen, z.B. alle \ durch \+zs ersetzen, wo Windows wieder nach belieben es umbrechen kann, wenn nötig.


UND bei dem #10#13#10#13 .... entweder du machst es richtig, oder du lässt es bleiben,
denn es heißt #13#10#13#10.
Oder einfach immer nur #10, was Delphi und Windows an den meisten Stellen auch versteht.
bzw. man nehme die Konstante Delphi-Referenz durchsuchensLineBreak.
Deine Variante sind jedenfalls 3 Zeilenumbrüche #10+#13#10+#13 und hier sogar in allen möglichen Kombinationen, wo gern mal das eine oder andere Programm durchdreht, wenn es sowas bekommt.


PS: Delphi-Dialoge haben, so wie auch die Windows-Dialoge, eine Copy-Funktion drin.
Strg+C und man bekommt den Inhalt des Dialogs als Text, welcher z.B. in einen Texteditor kopiert werden kann, wo dann der komplette Text drin steht.
Das hilft auch bei ungemein vielzuvielen Zeilen, wenn der Dialog keine Scrollbar bietet.

DieDolly 12. Jan 2020 16:47

AW: ShowMessage oder Format kürzt Texte
 
Zitat:

Leider ein Windows-Problem, was ich auch schon ewig extrem krank finde, aber da gibt es leider keine Lösung.
Einfach einen eigenen Dialog mit einem eigenen TForm bauen.

himitsu 12. Jan 2020 16:58

AW: ShowMessage oder Format kürzt Texte
 
Pssst, Delphi hat eine Abwärtskompatibilität, die auch in neueren Windows manchmal zum Zuge kommt.

ShowMessage bzw. MessageDlg schalten auf VCL um verwenden statt der DialogAPI (MessageBox und Verwadte) eine TForm mit TLabel und paar TButtons,
und die kann man auch gezielt verwenden.

Witzig ist dort, dass man da z.B. auch die Captions der Buttons ändern kann.


Nur bei einem kommt diese Delphi-Funktion nicht ganz dem Windows-Styleguide hinterher,
wo z.B. Trennlinen und abgesetzte Farben zu den Buttons existieren oder wie sich im laufe der Jahre die Buttons verschoben. (mitte, links oder rechts)
Über die WinAPI hat man den Vorteil immer einen Dialog nach dem aktuellen Design/Style-Guide des OS zu bekommen
und bei dem Anderen kann man nach blieben an der Delphi-Form rumpfuschen, bevor/nachdem sie angezeigt wird.

ShowMessage -> ShowMessagePos -> MessageDlgPos -> MessageDlgPosHelp -> DoTaskMessageDlgPosHelp bzw. Delphi-Referenz durchsuchenCreateMessageDialog+DoMessageDlgPosHelp
Delphi-Quellcode:
function MessageDlgPosHelp(...): Integer;
begin
  if TOSVersion.Check(6) and UseLatestCommonDialogs and IsNewCommonCtrl and StyleServices.IsSystemStyle then
    Result := DoTaskMessageDlgPosHelp('', Msg, DlgType, Buttons, HelpCtx, X, Y, HelpFileName)
  else
    Result := DoMessageDlgPosHelp(CreateMessageDialog(Msg, DlgType, Buttons), HelpCtx, X, Y, HelpFileName);
end;

Und ja, bei Datei>Neu gibt es im Delphi auch einige Vorlagen für Dialoge (Panels und Buttons).

zeras 12. Jan 2020 19:23

AW: ShowMessage oder Format kürzt Texte
 
Danke für eure Hinweise. Ich dachte, es gibt bei ShowMessage einen Parameter, der etwas kürzt oder eben nicht.
Im Moment habe ich den String so gekürzt, damit man das besser sieht, aber später muss ich mir mal eure Hinweise näher anschauen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 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