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

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

1) невидимый TextBox (или как он там) с AutoSize=true, если есть такое свойство, конечно
2) записать туда текст
3) вызвать Application.ProcessMessages
4) определить Height / Width
...
Рейтинг: 0 / 0
19.07.2019, 02:38
    #39839003
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lazarus и автовысота TMemo
другой способ нашел, через 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
19.07.2019, 02:38
    #39839004
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lazarus и автовысота TMemo
...
Рейтинг: 0 / 0
19.07.2019, 03:09
    #39839005
V.Borzov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lazarus и автовысота TMemo
Прикинуть, какой требуется RECT для текста, функцией canvas.textrect с опциями tfCalcRect,tfWordBreak и тд?
...
Рейтинг: 0 / 0
19.07.2019, 09:55
    #39839065
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Lazarus и автовысота TMemo
V.BorzovПрикинуть, какой требуется RECT для текста, функцией canvas.textrect с опциями tfCalcRect,tfWordBreak и тд?
+1

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

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

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


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

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

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

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

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

RTFM EM_LINEFROMCHAR ?

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

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

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

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

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

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

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


Kazantsev Alexey,

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


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


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