Autor |
Beitrag |
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mi 25.08.04 11:31
Hallo,
bei mir werden automatisch RichEdits erzeugt für verschiedene Texte. Diese werden später auch direkt mit RTF-formatiertem Text gefüttert. Jetzt brauche ich die Möglichkeit, herauszufinden, wie lange der Text in diesem RichEdit sein wird, also auf welche Höhe ich das RichEdit einstellen muss, damit ich keine Scrollbalken habe. Mit normaler Schrift wäre das ja relativ einfach, nur Texthöhe und Zeilenzahl. Aber mit formatiertem Text könnte das dann etwas schwieriger werden.
Hat das jemand schonmal gemacht oder hat eine Idee, wie das auf einfach Weise funktionieren könnte?
|
|
StefanH
      
Beiträge: 1144
Win XP
D5 Standard, D7 Pers, D2005 Pers
|
Verfasst: Mi 25.08.04 20:58
Zeile für Zeile durchgehen, und die jeweils höchsten Schriftgrößen addieren? oder haben andere Formatierungen auch einfluss?
_________________ "Als es noch keine Computer gab, war das Programmieren noch relativ einfach."(Edsger W. Dijkstra)
"Ich bin nicht von Sinnen, sondern ich rede wahre und vernünftige Worte." (Paulus)
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mi 25.08.04 23:40
Naja, genau das wollte ich eigentlich vermeiden, denn dann muss ich wirklich in jeder Zeile überprüfen, was die größte Schriftgröße ist und damit die Höhe bestimmen. Und das bei mehreren RichEdits, die recht viel Text enthalten könnten, da wird das dann doch recht aufwändig....
Fällt denn wirklich niemandem eine bessere Lösung ein? Irgendwie arbeitet doch auch der Scrollbalken, wenn ich da evtl. einen Wert abzapfen könnte ....
|
|
blackbirdXXX

      
Beiträge: 1077
Erhaltene Danke: 1
Ubuntu Dapper
|
Verfasst: Do 26.08.04 05:07
Gibt es einen Wert, der angibt, ob ein Scrollbalken angezeigt wird oder nicht?
Wenn es diesen Wert gibt, kannst du es mit einer Schleife machen:
Delphi-Quelltext 1: 2: 3:
| RichEdit.Height := 1; while (RichEdit.ScrollBalkenSichtbar = true) RichEdit.Height := RichEdit.Height+1; |
Da ich aber keinen solchen Wert gefunden habe, hab ich da keinen wirklichen Tipp für dich.
Aber könnten man nicht das Handle des RichEditors bestimmen und so überprüfen, ob er den Scrollbalken anzeigt?
_________________ Klein, schwarz und ärgert Techniker? Jumper!
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Do 26.08.04 10:26
für den scollbalken: www.delphipraxis.net...87_scrollbalken.html
wenn kein scrollbalken angezeigt wird, nützt dir das aber auch wenig.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var Scrollinfo: TScrollInfo; begin Scrollinfo.cbsize := sizeof(Scrollinfo); Scrollinfo.fmask := SIF_RANGE;
if GetScrollInfo(RichEdit1.Handle, SB_VERT, Scrollinfo) then label1.Caption:=inttostr(Scrollinfo.nMax) else label1.caption:=inttostr(RichEdit1.ClientHeight); end; |
oder, für das letze Zeichen im richedit, gibt allerdings die linke, obere ecke zurück, also "fehlt" eine zeile, und gescrollt darf das richedit auch nicht sein.
Delphi-Quelltext 1: 2: 3: 4: 5:
| Var pt: TPoint; begin SendMessage(RichEdit1.Handle,EM_POSFROMCHAR, longint(@pt), maxint ); label2.caption := inttostr(pt.y); end; |
wenn du beides kombinierst, kommst du vielleicht hin
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 27.08.04 14:12
Danke Keldorn, der erste Code hat mich weitergebracht. Leider habe ich das Problem mit dynamischen Zeilenumbrüchen. Sollte nämlich eine Zeile aufgrund ihrer Länge umgebrochen werden, wird sie irgendwie nicht mitgezählt, deswegen habe ich noch ein bisschen dazu addiert, bevor ich eine bessere Lösung gefunden hab.
|
|
UGrohne 
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 27.08.04 14:27
Eben hab ich die optimale Variante gefunden, einfach und effizient:
RichEdit hat ein Ereignis OnResizeRequest. Dort wird ein Rechteck übergeben, das die neuen notwendigen Ausmaße für den Text angibt. Diese Daten in dem Rectangle kann man sehr gut für diese Sache nutzen.
Vor allem ist dann auch das Problem beim Vergrößern während der Laufzeit umgangen.
|
|
|