Problem beim Einfügen eines Strings in ein Memo

    Problem beim Einfügen eines Strings in ein Memo

    Hallo zusammen,
    habe bisher keine Erfahrung mit Memos, die zur Laufzeit mit unterschiedlichem Text gefüllt werden, daher frage ich hier mal nach: Neben einem Panel, das nach Bedarf ein- oder ausgeblendet wird, befindet sich ein Memo, das die je nach Bildschirmauflösung unterschiedlich große Restbreite des Formulars ausfüllen soll. Auf dem Panel werden Werte eingegeben, die nach Berechnung in einen String eingefügt werden, der im Memo als 'Antwort' angezeigt werden soll. Dieser Text ist üblicherweise länger als das Memo breit. Obwohl ich Memo1.Wordwrap auf true gesetzt habe, wird der ganze Text immer in einer Zeile dargestellt, von der nur so viel zu lesen ist, wie die Breite des Memos erlaubt. Ich habe das mit Memo1.Text:=Antwort als auch mit Memo1.Lines.Add(Antwort) versucht. Gibt es vielleicht noch eine andere Möglichkeit, edie Antwort in einem Fenster oder einem anderen Objekt variable Texte vollständig lesbar anzuzeigen?
    Vielen Dank,
    mfG Gelmo
    Hi Gelmo

    Wenn du Leerzeichen in deinem Text hast und Wordwrap true ist, wird dr Text auch dann umbrochen, wenn nicht explizit #13#10 oder Linebreak eingeefügt wird.
    Ohne Leerzeichen wird die Zeile zu Ende geschrieben.

    Gruss
    Delbor
    roase.ch/

    Was wirklich zählt, ist Intuition. Albert Einstein

    ________________

    Delbor alias Zoran
    Hallo Delbor,
    ich habe mal eine kleine Demo geschrieben, ohne Probe, vielleicht mit Flüchtigkeitsfehlern, aber das Prinzip wird deutlich. Meines Erachtens kann es nicht nur an den Leerzewichen liegen, denn die kommen offensichtlich in der Antwort zu Hauf vor.

    Delphi-Code

    1. var
    2. E1, E2, E3 : ShortString; // Eingaben in Edit1, 2 und 3
    3. Antwort : String;
    4. Ber1 : Real; // Berechnungsergebnis
    5. Procedure Button1.Click ...
    6. begin
    7. Ber1:=StrtoFloat(E1)*StrtoFloat(E2)/StrtoFloat(E3);
    8. Antwort:='Wenn '+E1+' Arbeiter '+E2' Stunden arbeiten müssen,';
    9. Antwort:=Antwort+' dann müssen '+E3+' Arbeiter '+FloattoStr(Trunc(Ber1*100+0.5)/100);
    10. Antwort:=Antwort + 'Stunden arbeiten.';
    11. Memo1.Clear;
    12. Memo1.WordWrap:=true;
    13. // Memo1.Lines.Add(Antwort);
    14. Memo1.Text:=Antwort;
    15. end;
    16. end;

    Ein solcher Text wird so nicht umgebrochen.
    Zunächst aber vielen Dank
    Gelmo
    Ich habs auch gerade noch gemacht : Standard in Delphi 5 ist Umbruch
    Glückauf

    Herr, wirf Hirn vom Himmel

    Ein Leben ohne Möpse ist möglich, aber sinnlos ( Loriot )
    Der beste Platz für Politiker ist das Wahlplakat. Dort ist er tragbar, geräuschlos und leicht zu entfernen ( Loriot )

    Es gibt Leute, die fühlen sich überall gedemütigt, wo sie nicht frech sein dürfen ( Otto Weiss )
    Hi Gelmo

    Ich hab mir auh ein kleines Testprogrämchen mit 2 Prozeduren geschrieben:

    Delphi-Code

    1. procedure TForm1.Button1Click(Sender: TObject);
    2. begin
    3. Memo1.WordWrap := NOT Memo1.WordWrap;
    4. end;
    5. procedure TForm1.Button2Click(Sender: TObject);
    6. begin
    7. if Button2.Caption = 'Text eintragen' then
    8. begin
    9. Memo1.Text := 'Franz jagt im total verwahrlosten Taxi quer durch Bayern.';
    10. Button2.Caption := 'Text löschen'
    11. end
    12. else
    13. begin
    14. if Button2.Caption = 'Text löschen' then
    15. begin
    16. Memo1.clear;
    17. Button2.Caption := 'Text einttragen'
    18. end;
    19. end;
    20. end;

    Mit einem dritten Button könntest du dir anzeigen lassen, wie sich das
    Memo mit und ohne Bildlaufleisten verhält. Im Anhang die Oberfläche
    meines kleinen Tests.,
    Fremdkomponenten können einander nicht beeinflussen, wenn sie nahe beieinander oder sogarübereinander liegen. Das können sie nur, wenn sie per code miteinander kommunizieren.

    Gruss
    Delbor
    Bilder
    • Memotest.PNG

      7,67 kB, 313×363, 99 mal angesehen
    roase.ch/

    Was wirklich zählt, ist Intuition. Albert Einstein

    ________________

    Delbor alias Zoran
    Auch unter Delphi XE klappt es im Testprogramm. Im Prinzip enthält mein Programm außer dem Panel und den Editfeldern mit den Kontrollroutinen, die dafür sorgen, dass nur Zahlen eingegeben werden können, nur eine solche ButtonClick-Prozedur. Und da funktioniert es noch nicht.
    Werde mich später weiter darum kümmern, da ich am Wochenende unterwegs bin.
    Bis dahin vielen Dank und ein schönes Wochenende
    MfG Gelmo
    Wenn du TMemo.Text verwendest, musst du die Steuerzeichen für einen Zeilenumbruch an der Stelle auch in den String eintragen, der an TMemo.Text übergeben wird. also etwa so:

    Quellcode

    1. Antwort:='Wenn '+E1+' Arbeiter '+E2' Stunden arbeiten müssen,' + #13#10;
    2. Antwort:=Antwort+'dann müssen '+E3+' Arbeiter '+FloattoStr(Trunc(Ber1*100+0.5)/100) +#13#10;
    3. Antwort:=Antwort + 'Stunden arbeiten.' + #13#10;


    Umgehen kannst du das, wenn du jeden Teilsting mit der Methode Add an das TMemo hängst:

    Quellcode

    1. Memo1.Add('Wenn '+E1+' Arbeiter '+E2' Stunden arbeiten müssen,' );
    2. Memo1.Add('dann müssen '+E3+' Arbeiter '+FloattoStr(Trunc(Ber1*100+0.5)/100))
    3. Memo1.Add('Stunden arbeiten.' )


    Grüße
    Mikhal
    Computer erleichtern die Arbeit -
    und die Welt ist eine Scheibe!