powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus и автовысота TMemo
25 сообщений из 25, страница 1 из 1
Lazarus и автовысота TMemo
    #39838920
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Элементарщина, но чё-то затупил. Хочу, чтобы memo само расширялось под содержимое. Как отследить, что текст вмещается? Либо, как вариант, что скроллбар имеет полоску прокрутки?

Поиск ничего путного не дал.
Надеялся, что Scrollbars := ssAutoVertical будет следить за наличием скроллбара - фиг там, он всегда присутствует.
Range у скроллбаров обсчитывается независимо от того, есть полоска или нет.
Всякие виндовые WM_* трюки мимо кассы - мультиплатформа.
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39838978
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
memo.Align := alClient; ?
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39838999
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а может

1) невидимый TextBox (или как он там) с AutoSize=true, если есть такое свойство, конечно
2) записать туда текст
3) вызвать Application.ProcessMessages
4) определить Height / Width
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839003
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
другой способ нашел, через Label

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
UNIT Unit1;

{$mode objfpc}{$H+}

INTERFACE

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    LabelForCalculation: TLabel;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Memo1Change(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

IMPLEMENTATION

{$R *.lfm}

type
   TLabelCracker = class(TLabel);

//-----------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
   LabelForCalculation.Visible := false;
   LabelForCalculation.AutoSize := true;
   LabelForCalculation.Font.Assign(Memo1.Font);

   Memo2.Font.Assign(Memo1.Font);
end;
//-----------------------------------------------------------
procedure TForm1.Memo1Change(Sender: TObject);
var
   sText : string;
begin
   sText := TrimRight(Memo1.Text);

   Memo2.Text := sText;
   LabelForCalculation.Caption := sText;

   //без этого принудительного вызова невидимый Label не пересчитает свой размер
   TLabelCracker(LabelForCalculation).DoAutoSize(); 

   Memo2.Width := LabelForCalculation.Width + 10;
   Memo2.Height := LabelForCalculation.Height + 10;
end;
//-----------------------------------------------------------

END.
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839004
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839005
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикинуть, какой требуется RECT для текста, функцией canvas.textrect с опциями tfCalcRect,tfWordBreak и тд?
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839065
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.BorzovПрикинуть, какой требуется RECT для текста, функцией canvas.textrect с опциями tfCalcRect,tfWordBreak и тд?
+1

При этом границы Memo привязать к краям формы и увеличивать ее высоту по мере увеличения высоты текста в Memo. Гарантированно будет работать на винде, но на линуксе могут быть проблемы в некоторых ОСях при уменьшении высоты формы с большей величины на меньшую (у меня такие траблы наблюдались в Дебиане 7-9 c GTK2, на Deb 10 GTK3 - надо будет проверить).
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839078
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatormemo.Align := alClient; ?
Это никак не поможет.

Кроик Семён, мда, варианты оригинальные, видимо я давно не сталкивался с вынужденной проктостоматологией

Вариант с Canvas в итоге кое-как работает, хотя пришлось одалживать его у формы (до сих пор для меня загадка, по какой логике одним контролам выделили канвас, а другим шиш с маслом) и надеяться, что шрифты совпадают. Ну и добавить эмпирический интерлиньяж тупо константой, т.к. откуда его взять штатно я не нашел.
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839082
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Всякие виндовые WM_* трюки мимо кассы - мультиплатформа.
зависит от....
Подключи в uses LCLType, LCLIntf, LMessages - будешь приятно удивлен :)
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839131
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Вариант с Canvas в итоге кое-как работает, хотя пришлось одалживать его у формы... и надеяться, что шрифты совпадают.
где ты там нашел трудности? :)


...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839134
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сабжу:

RTFM EM_LINEFROMCHAR ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839138
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам> RTFM EM_LINEFROMCHAR ?

У него Лазарь на линухе
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839139
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Вариант с Canvas в итоге кое-как работает, хотя пришлось одалживать его у формы (до сих пор для меня загадка, по какой логике одним контролам выделили канвас, а другим шиш с маслом) и надеяться, что шрифты совпадают
А сделать свой канвас с нужным шрифтом в Лазаре нельзя?..
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839143
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Gatormemo.Align := alClient; ?
Это никак не поможет.Это как бы намёк был.
Есть же там Ancors, вот и привяжись к ним.
Например, на панельке
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839163
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gator> У него ... на линухе

А, тогда сорри.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839223
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2,

можно еще тут почитать
https://wiki.freepascal.org/Developing_with_Graphics
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839248
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докгде ты там нашел трудности? :)
Не трудности, а странное решение :) хотя, судя по всему, иначе никак. Забавно, что DrawText со всеми флагами - кросс-платформа. Но у тебя опять же расчет на то, что шрифт мемо = шрифту формы.
alekcvpА сделать свой канвас с нужным шрифтом в Лазаре нельзя?..
Наверняка можно, но не хотелось целую систему придумывать из-за такой мелочи...
Гаджимурадов РустамПо сабжу:

RTFM EM_LINEFROMCHAR ?

RichEdit же? Там-то и скроллбары нормально работают, можно тупо расширять контрол, пока скролл не исчезнет.
GatorЭто как бы намёк был.
Есть же там Ancors, вот и привяжись к ним.
Например, на панельке
Как-то не вкуриваю. Как anchors помогут расширить контрол, чтобы он вмещал текст без прокрутки?
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839275
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Но у тебя опять же расчет на то, что шрифт мемо = шрифту формы.
хорошо, вот тебе с разными шрифтами

Но у такого подхода один минус - встроенные скроллы у TMemo работать не будут, так что все придется рисаовать ручками
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839279
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокНо у такого подхода один минус
а, нет. Я забыл про WordWrap :)
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839357
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и если самому включать скроллинг по горизонтали
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839362
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2> RichEdit же?

Не понял вопроса. Он работает и с Memo.
Другое дело, что у вас Linux и как там оно
(аналоги и пр.) лично мне искать лень.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839416
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё можно сделать без кода. На панель бросить лейбл и мемо. У мемо выставить привязки в размерам панели, у панели выставить автосайз. Вордврап у мемо и лейбла привести к одиному значению. У лейбла выставить бордерспейсинг фраунд - 2 (вообще, бордерспейсинг можно потюнить). Потом в событии ОнЧендж присваивать лейблу содержимое мемо + sLineBreak; Это всё.
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839438
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамВасилий 2> RichEdit же?

Не понял вопроса. Он работает и с Memo.
Другое дело, что у вас Linux и как там оно
(аналоги и пр.) лично мне искать лень.

В MSDN отнесли к richedit, на мемо не проверял, вот и озадачился.

Kazantsev Alexey, оригинально)

Док, ты почти пересоздал мемо, остановись)).
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39839473
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Док, ты почти пересоздал мемо, остановись)).
ты бы лучше спасибо сказал, я тут за тебя ненароком всю работ сделал, лентяй


Kazantsev Alexey,

ну ты кудесник ;)
...
Рейтинг: 0 / 0
Lazarus и автовысота TMemo
    #39840128
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докты бы лучше спасибо сказал, я тут за тебя ненароком всю работ сделал, лентяй


Спасибо и всяческие респекты!
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus и автовысота TMemo
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]