Autor Beitrag
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1144

Win XP
D5 Standard, D7 Pers, D2005 Pers
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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

ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1077
Erhaltene Danke: 1

Ubuntu Dapper

BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
//uses CommCtrl
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.
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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.