Potrzebuję pomocy. Jest taka funkcja canvas.textwidth('jakis tekst') która zwraca długość podanego tekstu w pikselach... Problem w tym, że jest to zależne od ustawionej czcionki na formie czyli form1.font a jeżeli ustawię inną czcionkę dla memo to jak sprawdzić faktyczną długość jakiegoś wiersza w memo (w pikselach oczywiście)??
Bardzo proszę o szybką pomoc
[???]
Hmm no chyba, że znacie jakąś funkcję/procedurę, która automatycznie dopasuje wys i szer memo do tekstu, który się w nim znajduję albo może jest taka właściwość?
Czyli np jak piszę tekst to memo się poszerza w prawo a jeżeli przechodzę do nowej linii to zwiększa swoją wysokość.. Jest takie coś?
Zastosuj TRichEdit zamiast TMemo i oprogramuj zdarzenie OnResizeRequest.
Memo1.canvas.textwidth() ? Zawsze zostaje stworzyć dodatkowy canvas, który nie będzie nigdzie widoczny, a będzie służyć do pobierania szerokości tekstu.
Uhh mam takie coś:
procedure TForm1.RichEdit1ResizeRequest(Sender: TObject; Rect: TRect);
begin
if Rect.Bottom>RichEdit1.BoundsRect.Bottom then
//zmianawysokosci;
end;
Znalazłem to ale nie wiem jak sprawdzić czy podczas pisania litery doszły już do prawej granicy richedita. Pomoże ktoś? Jak zamiast bottom wpiszę right to nie działa.. Nie wiem o co chodzi z tymi prostokątami..
Ani memo ani richedit nie mają właściwości canvas a nie mam pojęcia jak można zrobić żeby miały :P
A na ch... mu RichEdit do tego?
Już ktoś Ci napisał:
memo.canvas.textWidth(memo.lines[0]) - długość pierwszego wiersza w pikselach.
Oczywiście, jeśli wiersz istnieje :)
Nie ma takiego czegoś jak memo1.canvas !! Sprawdź sobie jak chcesz...
Juhas
Już Ci Quak napisał, że Memo i RichEdit nie mają Canvasa.
Quak napisał(a)
Nie wiem o co chodzi z tymi prostokątami.
TRect określa prostokąt, w którym będzie zmieszczony tekst.
Przykładowo w OnResizeRequest możesz automatycznie dopasowywać, przy stałej szerokości, wysokość RichEdit tak aby cały tekst się zmieścił:
RichEdit1.ClientHeight:=Rect.Bottom-Rect.Top;
Spoko na wysokość znalazłem już coś takiego:
with (Sender as TRichEdit) do begin
BoundsRect := Rect;
end;
Gorzej z szerokością... Na razie na szybko obsłużę onkeypress żeby ręcznie zmniejszać i zwiększać szerokość a jak będzie więcej czasu to coś pokombinuję.
Witaj,
Proponuje utworzyc sobie jakiegos Canvasa (np Bitmape) i tam ustawic czcionke taka, jaka jest ustawiona w memo, a nastepnie korzystajac z bmp.canvas.textwidth(memo.lines[0]) sprawdzac, ile zajmuje ktora linia a nastepnie brac maksimum sposrod dlugosci wszystkich linii.
bmp : TBitmap;
bmp := TBitmap.create();
bmp.canvas.font := memo.font;
int szer;
for i:= 0 to memo.lines.count-1 do
szer := max(szer, bmp.canvas.textwidth(memo.lines[i]);
bmp.Free();
// nie wiem, czy jest f-cja max, ale ja chyba umiesz sam napisac, jakby co ;p
OK, pisałem z pamięci, tak więc nie widziałem, że źli ludzie ukradli Canvasa Memo ;>
Ale po co kombinowanie z bitmapą? To trochę poronione. Wystarczy samego canvasa stworzyć. Tylko, jak się tworzy samego Canvasa, to trzeba mu dać coś, "po czym ma rysować", tak więc musisz przekazać handle'a za pomocą: GetWindowDC, czy GetDCHandle, czy coś takiego. Nie pamiętam, musiałbyś sprawdzić na msdn'ie, względnie w helpie.