Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Автоподбор высоты TMemo


Автор: Romero 17.12.2005, 17:17
Нужно подобрать высоту Memo так, чтобы текст помещался полностью. При этом учесть то, что высота не обязательно будет равняться высота_строки*кол-во_строк, так как возможен автоперенос строк.
Какие идеи по этому поводу?

Автор: Zero 17.12.2005, 18:58
Цитата(Romero @ 17.12.2005, 18:17)
Какие идеи по этому поводу?

Установи свойство ScrollBars в ssHorizontal или ssBoth для универсальности.

Автор: Albinos_x 17.12.2005, 20:43
идея приблизительно такова(если не делать как сказал Zero):
Код

procedure TForm1.Memo1Change(Sender: TObject);
var p:integer;
begin
p:=trunc(abs(Memo1.Font.Height))+trunc(abs(Memo1.Font.Height)/3);
Memo1.ClientHeight:=trunc(abs(Memo1.Font.Height)/3)+(Memo1.Lines.Count)*p;
end;

вычисляем занимаемую высоту
Код

p:=trunc(abs(Memo1.Font.Height))+trunc(abs(Memo1.Font.Height)/3);

где:
Код

abs(Memo1.Font.Height)

высота шрифта в пикселях
Код

trunc(abs(Memo1.Font.Height)/3)

эт я пытался вычислить межстрочное растояние считая что оно равно 1/3 от размера шрифта.
Код

Memo1.ClientHeight:=trunc(abs(Memo1.Font.Height)/3)+(Memo1.Lines.Count)*p;

вначале делаю поправку на межстрочное расстояние

PS: на шрифте 8 MS Sans Serif работает нормально, на шрифте 19 Niagara Solid через 8 строчек набегает ещё одна лишняя, кроме того непонятно почему, если количество строчек больше отображаемых в самом начале, то на этом шрифте при первом нажатии на кнопку происходит однократное увеличение на 5 строчек, но потом нормально.

PSS: в коде не забудь добавить проверку на количество строчек -> если количество строчек меньше 1, то ничего не делать(или установить размер по одной строчке)

Автор: Romero 20.12.2005, 12:14
Albinos_x
Спасибо за идею! Примерно так и сделал

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)