Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi mehrzeilige Infobox (https://www.delphipraxis.net/130442-mehrzeilige-infobox.html)

AlexanderBrade 8. Mär 2009 17:27


mehrzeilige Infobox
 
Wenn ich eine ehrzeilige Infobox hab, wie kann ich das im Quelltext auf mehrere Zeilen verteilen, sonst meckert Delphi, das ihm die Zeile zu lang sei.

DeddyH 8. Mär 2009 17:28

Re: mehrzeilige Infobox
 
Was meinst Du mit Infobox?

AlexanderBrade 8. Mär 2009 17:31

Re: mehrzeilige Infobox
 
Delphi-Quellcode:
MessageBox(Handle,'(1) Im Leistungsblock A werden die in den beiden doppelt gewichteten Fächern in den ersten drei Kurshalbjahren erzielten Leistungen in zweifacher Wertung und die im vierten Kurshalbjahr erzielten Leistungen in einfacher Wertung angerechnet.' ,'Info',MB_OK or MB_ICONINFORMATION);

DeddyH 8. Mär 2009 17:33

Re: mehrzeilige Infobox
 
Delphi-Quellcode:
MessageBox(Handle,PChar('Dies ist die erste Zeile.'+#13#10+'Und dies die zweite.'),'Wuppdi',MB_OK or MB_ICONINFORMATION);

AlexanderBrade 8. Mär 2009 17:35

Re: mehrzeilige Infobox
 
ja das ist klar, wie das geht ist schon klar, aber wenn ich so 20x verfahre dann sagt delphi die zeile ist zu lang(länger als 1023 zeilen)

D.h. ich hab eine echt große infobox. Gibt es vielleicht Alternativen?!?

DeddyH 8. Mär 2009 17:36

Re: mehrzeilige Infobox
 
Du musst doch nur im Quelltext umbrechen.

turboPASCAL 8. Mär 2009 17:43

Re: mehrzeilige Infobox
 
Bau dir eine neue Form und klatsch eim Memo oder Label drauf, dazu einen Ok-Button.
Das ist in diesem Falle besser als eine Informations-Box als Textanzeige zu missbrauchen. ;)

DeddyH 8. Mär 2009 17:44

Re: mehrzeilige Infobox
 
Wozu eine Form, wenn es eine MessageBox auch tut?

Satty67 8. Mär 2009 17:51

Re: mehrzeilige Infobox
 
Noch schnell ein praktische Beispiel, bevor er schreibt er hat es verstanden (und mein kleiner Beitrag sinnlos wäre):
Delphi-Quellcode:
MessageBox(Handle,'(1) Im Leistungsblock A werden die in den beiden doppelt '#13+
                  'gewichteten Fächern in den ersten drei Kurshalbjahren '#13+
                  'erzielten Leistungen in zweifacher Wertung und die im '#13+
                  'vierten Kurshalbjahr erzielten Leistungen in einfacher '#13+
                  'Wertung angerechnet.' ,'Info',MB_OK or MB_ICONINFORMATION);
Ein Informations-Box hat nur einen Sinn: Textanzeige ;) (Ja OK stimmt nicht ganz...)

DeddyH 8. Mär 2009 17:53

Re: mehrzeilige Infobox
 
Das ist doch auch nur eine Textanzeige. Ich würde mir den Text evtl. als Konstante hinterlegen, im Quelltext entsprechend umbrechen und auf der Messagebox anzeigen.

AlexanderBrade 8. Mär 2009 17:58

Re: mehrzeilige Infobox
 
Und wie geht sowas, tut mir Leid...

Satty67 8. Mär 2009 18:00

Re: mehrzeilige Infobox
 
Ich dachte jetzt, er weis nur nicht, wie er lange Strings in der IDE umbricht... vor allem weil es ja eigentlich trivial ist, musste schnell ein Beispiel her. Wie er in der MessageBox umbricht wusste er ja.

Text auslagern:

Neue Unit zum Projekt (z.B. ohne Formular) -> Datei -> Neu
Delphi-Quellcode:
unit MyProject1Texte;

interface

const
  txt_MeldungZumFeldBlabla = 'Das ist Feld Blabla mit der Funktion:'#13#13+ // Zeilenumbruch in MessageBox
                             'BlubBlubBlubBlubBlub';

[...]
Dort wo die Messagebox ist die Unit in der Uses-Klauses (am besten im implementations-Teil) einbinden und:
Delphi-Quellcode:
MessageBox(Handle,txt_MeldungZumFeldBlabla ,'Info',MB_OK or MB_ICONINFORMATION);

DeddyH 8. Mär 2009 18:01

Re: mehrzeilige Infobox
 
Delphi-Quellcode:
const derText = 'Dies ist ein langer Text, '+sLineBreak+
                'der im Quältext umgebrochen werden muss';

....
MessageBox(Handle,PChar(derText),'Trallalla',MB_OK or MB_ICONERROR);

AlexanderBrade 8. Mär 2009 18:04

Re: mehrzeilige Infobox
 
Alles klar Danke vielmals!

Hansa 8. Mär 2009 18:05

Re: mehrzeilige Infobox
 
Der Text ist IMHO bereits viel zu lang, um den mit Gewalt in ein eigentlich für einzeilige Sachen gedachtes Dingens zu stecken. Außerdem würde ich mal überlegen, den Text in einer Datei zu hinterlegen und nicht in der EXE. Insofern wäre was gefordert, was LoadFromFile beherrscht. Oder wie wärs mit INI ? 8)

Satty67 8. Mär 2009 18:07

Re: mehrzeilige Infobox
 
Beim aktuellen Kenntnisstand und wenn es nicht so viele Meldungen der Art sind, ist das doch OK?

Werden lange Textkonstanten nicht sowieso vom Compiler in die Ressourcen ausgelagert :gruebel:

Namenloser 8. Mär 2009 18:09

Re: mehrzeilige Infobox
 
Zitat:

Zitat von Hansa
Der Text ist IMHO bereits viel zu lang, um den mit Gewalt in ein eigentlich für einzeilige Sachen gedachtes Dingens zu stecken. Außerdem würde ich mal überlegen, den Text in einer Datei zu hinterlegen und nicht in der EXE. Insofern wäre was gefordert, was LoadFromFile beherrscht. Oder wie wärs mit INI ? 8)

Oder
Delphi-Quellcode:
resourcestring
  StrText = '...';
Als bessere Alternative zu const.

DeddyH 8. Mär 2009 18:10

Re: mehrzeilige Infobox
 
Mehr als 1024 Byte geht aber nicht bei Ressourcestrings.

Namenloser 8. Mär 2009 18:14

Re: mehrzeilige Infobox
 
Zitat:

Zitat von DeddyH
Mehr als 1024 Byte geht aber nicht bei Ressourcestrings.

Auch nicht, wenn man den String mit + zusammenfügt? :|

DeddyH 8. Mär 2009 18:15

Re: mehrzeilige Infobox
 
Nein, das hatte ich auch einmal versucht, daher weiß ich das.

jaenicke 8. Mär 2009 18:19

Re: mehrzeilige Infobox
 
Mal abgesehen davon, dass es ja wohl wenig Sinn hätte...
Für derart lange Strings sind andere Lösungen ja ohnehin sinnvoller.

Wie soll man mit so langen Strings im Quelltext noch den Überblick bewahren?

Hansa 8. Mär 2009 19:13

Re: mehrzeilige Infobox
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das Thema ist ja jetzt genug durchgekaut, aber sonntags darf man ja mal bisschen spielen. :stupid: Habe mal aus der Objektablage ein vorgefertigtes Formular genommen (irgendwas mit OkBottomDialog, in D7 bei Dialoge). Im OI Memo draufgemacht, den Borderstyle auf bsNone gesetzt und die Farbe auf clBtnFace. Und noch diese eine Zeile :

Delphi-Quellcode:
procedure TOKBottomDlg.FormCreate(Sender: TObject);
begin
  mem1.Lines.LoadFromFile('unit1.pas');
end;
Muss der Text unbedingt in die EXE, dann eben Lines.Add... verwenden und fertig. Das schreiben hier hat jetzt 5mal länger gedauert, als diese Mini-Form zusammenzuklicken.

DeddyH 8. Mär 2009 19:15

Re: mehrzeilige Infobox
 
Wobei das eine mal wieder nix mit dem anderen zu tun hat, gell?

Hansa 8. Mär 2009 19:30

Re: mehrzeilige Infobox
 
Was hat womit nichts zu tun ? :shock: Ich wollte gerade die Anfänger darauf aufmerksam machen, dass in Delphi vieles schon fertig bereitliegt und es nur benutzt/gefunden werden muss. Häufig wird auch unnötig viel rumgewurschtelt.


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