[Delphi] Canvas - zawijanie wierszy

0

Mam dosc spory blok tekstu, chce go wyrysowac na formie lub gdzies indziej ale zeby zawijal mi wiersze, czyli jak tekst sie nie zmiesci w jednej lini to niech przechodzi do kolejnej, jak to zrobic?

0

Fragment z Delphi 6 dla każdego:
Kolejnym nieocenionym znacznikiem funkcji DrawText jest DT_CALCRECT. Powoduje on obliczenie wyso-kości prostokąta niezbędnej do pomieszczenia w jego wnętrzu określonego tekstu. Przy zastosowaniu tego znacznika Windows oblicza i zwraca niezbędną wysokość, ale nie wyświetla tekstu. Programista informuje Windows o szerokości, jaką powinien posiadać prostokątny obszar, a system na tej podstawie oblicza wysokość niezbędną do pomiesz-czenia tekstu. W rzeczywistości modyfikowane są również współrzędne lewego dolnego narożnika wspomnianego prostokąta (cała ta komunikacja odbywa się w ramach czwar-tego parametru wywołania). Jest to szczególnie użyteczne w przypadku wypisywania tekstu składającego się z wielu linii.
Poniższy przykład ilustruje zastosowanie znacznika DT_CALCRECT:

var
	R: TRect;
	S: string;
beign
	R:=Rect(20,50,150,200);
	S:='Jest to bardzo długi tekst, który zostanie umieszczony '+
			'w kilku liniach tekstu.';
 	
     DrawText(Canvas.Handle, PChar(S), -1, R, DT_CALCRECT 
      or DT_WORDBREAK);
 	
     Canvas.Brush.Style:= bsSolid;
	Canvas.Rectangle(R.left, R.top, R.right, R.bottom);
	Canvas.Brush.Style:=bsClear;
	DrawText(Canvas.Handle, PChar(S), -1, R, DT_WORDBREAK);
end;

Zauważ, że w drugim parametrze funkcji DrawText łańcuch S jest rzutowany na typ PChar. Jest to niezbędne, ponieważ funkcja DrawText wymaga przekazania jej tekstu w postaci wskaźnika do tablicy znaków, a nie w postaci zwykłego łańcucha (string).

1 użytkowników online, w tym zalogowanych: 0, gości: 1