Авторазмер памятки [дубликат]
Возможный дубликат:
Могу ли я сделать размер TMemo сам по тексту, который он содержит?
Нужно сделать авторазмер памятки: высота и ширина.
Я автоматически устанавливаю высоту следующим образом:
function TForm1.AutoSizeMemoY(Memo: TMemo): word;
begin
Canvas.Font := Memo.Font;
Result := Canvas.TextExtent(Memo.Lines.Strings[0]).cy * Memo.Lines.Count +
Canvas.TextExtent(Memo.Lines.Strings[0]).cy;
end;
Но я не знаю, как сделать автоматическое изменение ширины. У меня есть идея: если полоса прокрутки активирована, то увеличивайте ширину, пока она не станет неактивной, но я не знаю, как это реализовать.1 ответ:
Не самое лучшее решение, но оно работает:
function GetTextWidth(F: TFont; s: string): integer; var l: TLabel; begin l := TLabel.Create(nil); try l.Font.Assign(F); l.Caption := s; l.AutoSize := True; result := l.Width + 8; finally l.Free; end; end;
И добавьте следующий код в конец наименованием "memo1".OnChange событие в этот ответ
LineInd := Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);//focused Memo1 line Index Wd := GetTextWidth(Memo1.Font, Memo1.Lines[LineInd]); //MaxWidthLineInd = index of the line which has the largest width. //Init value of MaxWidthLineInd = 0 if MaxWidthLineInd = LineInd then Memo1.Width := Wd else begin if Wd > Memo1.Width then begin Memo1.Width := Wd; MaxWidthLineInd := LineInd; end; end;