AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memo Zeilenanzahl begrenzen

Ein Thema von Ruffy87 · begonnen am 10. Mär 2006 · letzter Beitrag vom 11. Mär 2006
Antwort Antwort
Ruffy87

Registriert seit: 12. Jan 2006
45 Beiträge
 
Delphi 6 Professional
 
#1

Memo Zeilenanzahl begrenzen

  Alt 10. Mär 2006, 23:49
hallo,

Mein Grundgedanke:
Ich brauche eine Komponente mit der ich mehrzeiligen Text eingeben kann.
Diesen Text viel ich nachher in ein Label(mit WordWrap) einfügen.

Nun mein Programm:
Das Label ist ja auf eine bestimmte Anzahl von Zeilen begrenzt(Also durch seine Größe).
Aber nicht z.B. die Memo oder RichEdit Komponente. Füge ich jetzt einen zu langen Text von
der Memo in das Label, zeigt mir das Label natürlich nicht alles an.

Wie kann ich die Zeilen bei einer Memo Komp. einschränken?

Die Eigenschaft MaxLength begrenzt nur die Zeichen. Deshalb kann ich diese nicht benutzen.

Mit freundlichen Grüßen

Stefan
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

Re: Memo Zeilenanzahl begrenzen

  Alt 11. Mär 2006, 03:27
Und zwar kannst du dazu das OnChange-Ereignis verwenden:
Delphi-Quellcode:
procedure TForm1.Memo1Change(Sender: TObject);
var
  grenze, i : Integer;
begin
  // Wie viele Zeilen darf das Memo nicht überschreiten
  grenze := 5;
  if Memo1.Lines.Count > grenze then
    for i := (Memo1.Lines.Count - 1) downto grenze do Memo1.Lines.Delete(i);
end;
Habs grad so aus dem Kopf hingeschrieben, müsste aber funktionieren!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Memo Zeilenanzahl begrenzen

  Alt 11. Mär 2006, 06:44
Ich sehe dabei folgendes Problem:

Label.Text ist ein String, den Du Dir aus den Memo.Lines zusammenstellst. Wieviel Platz dieser String im Label benötigt, hängt aber m.E. nicht unbedingt von der Länge des Strings ab. Zwei Strings mit gleicher Länge werden vermutlich unterschiedlich große Labels benötigen, wenn der eine String überwiegend kurze, der zweite aber überwiegend lange Wörter enthält. Bei WordWrap wird ja nicht getrennt, sondern das ganze Wort in die nächste Zeile geschrieben, so dass viele lange Wörter im zweiten String zu viel leerem Platz in den einzelnen Zeilen führen können. Dadurch werden natürlich mehr Zeilen benötigt.

Ich kann das leider nicht ausprobieren, da ich hier im Büro kein Delphi installiert habe. Nachdem ich noch Anfänger bin, weiß ich auch nicht, ob sich mein Lösungsvorschlag realisieren lässt. Ich würde es so versuchen:

Statt des Labels ein weiteres Memo verwenden. Die Hintergrundfarbe des Anzeige-Memos auf die Farbe der übergeordneten Komponennte (z.B. eines Panels, auf dem das Memo liegt) setzen. ReadOnly := true. TabStop := false. Größe wie das Eingabe-Memo. Jetzt muss nur noch verhindert werden, dass in das Eingabe-Memo mehr geschrieben wird als erlaubt. Ich weiß nicht aus dem Stegreif, wie man die Eingabe in ein Memo begrenzen kann - vielleicht so: "if Memo1.Lines.Count > MaxZeilenzahl then Memo1.ReadOnly := true" ?!

Ich hoffe, ich liege nicht allzu falsch.

mfg gfjs
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Memo Zeilenanzahl begrenzen

  Alt 11. Mär 2006, 09:17
Hallo Stefan,

ich würde so vorgehen:

Delphi-Quellcode:
function TextIsFitting(const text: String; c: TCanvas): Boolean;
var
  r: TRect;
begin
  with c do
  begin
    r := ClipRect;
    DrawText(Handle, PAnsiChar(text), Length(text), r,
      // zum Anpassen schau in den Win32 SDK unter DrawText
      DT_CALCRECT + DT_LEFT + DT_WORDBREAK
    );
    Result := r.Bottom <= ClipRect.Bottom;
  end;
end;

procedure TDemoForm.MemoChange(Sender: TObject);
begin
  if TextIsFitting(Memo.Text, MultiLineLabel.Canvas)
    then Memo.Font.Color := clBlack
    else Memo.Font.Color := clRed;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Ruffy87

Registriert seit: 12. Jan 2006
45 Beiträge
 
Delphi 6 Professional
 
#5

Re: Memo Zeilenanzahl begrenzen

  Alt 11. Mär 2006, 12:16
Danke, ihr habt mir echt gut weiter geholfen!

Klappt einwandfrei.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

Re: Memo Zeilenanzahl begrenzen

  Alt 11. Mär 2006, 15:10
Hey.

Was mir auf die schnelle noch eingefallen ist: Und zwar musst du auch noch drauf aufpassen, dass wenn man einen Text, der von mir aus über die gewünschte Zeilenlänge geht, per Strg+V eingefügt wird dann auch abgefangen wird!

mfg shark
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  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 23:53 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