Перейти к содержанию
  • 0
Servantik

TMemo. Не отображается курсор при изменении размера

Вопросы

Delphi Rio.
На пустую форму небольшого размера кладу TabSheet с одной страницей, выровненный alTop. На TabSheet кладу TMemo, также выровненное alTop. При создании формы ставлю Memo1.WordWrap := true;
При максимизации формы ширина зоны, в которой показывается курсор, остается неизменной, несмотря на то, что ширина 
TMemo увеличивается. Как это побороть?

Test1.7z

Поделиться сообщением


Ссылка на сообщение

Рекомендуемые сообщения

  • 1

У меня помогло так:

procedure TForm1.FormResize(Sender: TObject);
begin
 Memo1.WordWrap := false;
  Memo1.WordWrap := true;
end;

С Уважением Олег.

Поделиться сообщением


Ссылка на сообщение
  • 0

Большое спасибо!  Очень интересно. Но что делать, если событие FormResize не порождается?
Например, TabSheet имеет Align = alNone и его ширина увеличивается при нажатии на кнопку? Я пробовал вставить вашу магию в события Resize TabSheet и Memo, но она не сработала.

Test1.7z

Поделиться сообщением


Ссылка на сообщение
  • 0

Можно и на кнопку:

procedure TForm1.Button1Click(Sender: TObject);
begin
  TabControl1.Width := TabControl1.Width+200;
  Memo1.WordWrap := false;
  Memo1.WordWrap := true;
end;

Поделиться сообщением


Ссылка на сообщение
  • 0

Спасибо! Но при перекидке WordWrap туда и обратно исчезает курсор. Если сделать SetFocus, то он показывается на 0й позиции Memo. Хотя CaretPosition остается неизменной (той, которая была до клика на кнопку). С этим можно отбороться?  

procedure TForm1.Button1Click(Sender: TObject);
var cpO: TCaretPosition;
begin
  TabControl1.Width := TabControl1.Width+200;
  cpO := Memo1.CaretPosition;
  Memo1.WordWrap := false;
  Memo1.WordWrap := true;
  Memo1.SetFocus;
  Memo1.CaretPosition := cpO;
end;

Поделиться сообщением


Ссылка на сообщение
  • 0

Так у Вас в переменной cpO Х=0 и Y=0.

Предлагаю почитать здесь:

https://progi.pro/delphi-memo-pochemu-kursor-vsegda-idet-vlevo-10314416

С Уважением Олег.

Поделиться сообщением


Ссылка на сообщение
  • 0

Она равна 0, если курсор не был внутри TMemo.
Сначала нажмите Button2 (чтобы выставить курсор в TMemo на не0ю позицию, например, 70). Потом Button1, чтобы получить глюк. Прилагаю проект.

Test1.7z

Поделиться сообщением


Ссылка на сообщение
  • 0

Для варианта с кнопкой могу еще предложить Memo1.Width := Memo1.Width+1 - реально размер не изменится (Memo.Align=Top), но все что надо оно сделает...

К сожалению в реальном приложении никакой кнопки не будет...  и скорее всего надо будет что то делать в событиях OnResize или OnResized формы или Memo... а там ничего что было предложено выше не работает...

Поделиться сообщением


Ссылка на сообщение
  • 0

Спасибо! Мне такое тоже в голову не пришло (:.
Да. Конечно же, в реальном приложении не будет кнопок, и нужно будет перехватывать все возможные изменения размера, чтобы вызывать "костыли". Но это все равно лучше, чем ничего.

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От Azaz
      Delphi 10.4
      Кидаю TEdit или TMemo на форму, стиль стандартный. При старте выделения текста курсор сменяется с палочки на стандартную стрелку....
      Как воспроизвести: нажать на компонент любой кнопкой мыши и не отпускать кнопку, не двигать мышь. Если сдвинуть мышь в нажатом состоянии или отжать кнопку - курсор восстанавливается
      Никто не решил эту проблему? Копал исходники, но для TEdit там как-то запутанно все...
    • От Azaz
      Delphi 10.4
      Кидаю TEdit или TMemo на форму, стиль стандартный. При старте выделения текста курсор сменяется с палочки на стандартную стрелку....
      Как воспроизвести: нажать на компонент любой кнопкой мыши и не отпускать кнопку, не двигать мышь. Если сдвинуть мышь в нажатом состоянии или отжать кнопку - курсор восстанавливается
    • От Anasazi
      Всем привет. Столкнулся со следующей проблемой после активации tedit при попытке создать любое намерение (для набора номера или открытия ссылки) программа наглухо зависает. И наоборот после создания и выполнения намерения, если перейти к tedit происходит глухое зависание. Тоже самое происходит и с memo.
      Проблема похожа на описанную в этой теме, но решение из нее не помогает
      Чем заменить tedit не знаю, пробовал все возможные варианты. Функции работы с намерениями рабочая и если не активировать tedit то все работает отлично.
      Пробовал на разных устройствах, результат тот же. Правда на всех устройствах был Android 5.
       
      Подскажите пожалуйста, возможно ли под android создать диалоговое окно с вводом текста? Или может быть есть еще какие-нибудь способы ввода текста?
       
    • От walexw
      Можно ли изменить цвет холста TMemo не прибегая к стилям?
      Как вариант попробовал цветной прямоугольник под TMemo подложить и выставил прозрачность.
      Для примера вроде получилось, но как только выставил TMemo - Align отличный от None, TMemo тут же опять
      становится белым игнорируя прозрачность.
      В чем смысл таких заморочек и что посоветуете по моему вопросу?
      Спасибо!
    • От walexw
      rad studio 10 seattle
      Проблема такая, форма на экране смартфона расположена горизонтально, по вертикали места маловато.
      В верху надпись, под ней поле для ввода счета игры, под ней кнопки OK - Cancel
      Под ними мемо поле для комментария игры (требование заказчика). Ширина, от левого края до правого.
      Если палец касается мемо-поля, появляется клавиатура на пол экрана, алгоритм поднимает vertScrollBox с мемо-полем
      над клавиатурой, кнопки уходят над экран.
      Мемо-поле можно вводить до бесконечности, причем нажатие Enter вполне допустимо, переход на новую строчку.
      Поле ползет вверх и вверх, а как закончить? Как дать команду завершить ввод мемо-текста и вернуть кнопки OK - Cancel?
      Я не имею опыта разработки программ под смартфоны.
      Прошу опытных разработчиков, посоветуйте, как мне поступить в моей ситуации.
      (На клавиатуре нет кнопки "закрыть клавиатуру")
    • От FeLDMARShaL
      Создам тему без привязке к конкретному компоненту, т.к. речь пойдет сразу о двух.
      Нужно реализовать 2 прозрачных компонента (Edit и Memo). Сейчас это реализованно моим стелем. Но хочется иметь нативное быстродействие у этих контролов. Можно ли сделать эти контролы нативными (выставив Свойство ControlType=Platform) и сделать их одновременно полностью прозрачными? Есть ли какой нибуть способ?
    • От Равиль Зарипов (ZuBy)
      Здравствуйте!
       
      Хотелось бы узнать подробней об этом баге

       
      программа была запущена в течении нескольких часов, и вот выдало такой баг
       
      как лечить? или какое максимальное кол-во символов оно может содержать?
      в Мемо был лог, который писался в течении всего этого времени, но на скрине его нет.
      бывает еще такое проявление когда Мемо не рендерит текст и даже фон, просто принимает фон формы, остается толька каретка
    • От Alexander616
      Доброго времени суток.
      У меня возникли проблемы с TMemo, пытаюсь сделать что-то наподобие поля ввода в чате.
      При переходе на новую строку и при авто-переносе текста (wordwrap), поле должно автоматически регулировать высоту, но до определённого размера.
      Для этого на событие "ChangeTracking" добавил контроль :
      procedure TfMain.MemoSendTextChangeTracking(Sender: TObject); const Offset = 20; begin MemoSendText.ScrollTo(MemoSendText.Caret.Pos.X, MemoSendText.Caret.Pos.Y, True); if LayoutSendBox.Height < 100 then LayoutSendBox.Height := MemoSendText.ContentBounds.Height + Offset; end; "LayoutSendBox" - представляет собой контейнер, в котором находится само поле, у которого в параметре Align указанно "Client", то-есть при изменении высоты контейнера соответственно меняется высота самого поля. Функция Wordwrap у поля - включена, как и ShowScrollBars, т.е. если поле растягивается больше допустимого размера, появляется скрол бар и при дальнейшем вводе текста поле скролится вниз, при помощи процедуры "ScrollTo"

      Проблема состоит в следующем: 
      После того как поле TMemo достигает своего максимального размера и начинает опускаться вниз при продолжении ввода текста, скрол бар начинает прыгать после введения каждого символа, т.е. после ввода первого символа поднимается наверх на пару пикселей, так, что нижней части последней строчки становится не видно (хотя если проскролить поле вниз, нижняя часть отображается), а при вводе следующего символа всё становится на место. 

      Может кто-нибудь подсказать в чём проблема? 
       
    • От loony-pants
      Проблема такая: необходимо реализовать поиск по базе через  TComboEdit,  т.е. как на Яндексе - во время ввода слова, снизу открывается подсказка с возможными  вариантами (желательно без buttonclick). 
      Вообще изначально результаты планируется брать из memo, и выводить их как подсказку снизу.
    • От konung
      Собственно - сабж. Не знаю как корректно это называют. В нативных контролах это выглядит так:
       

       
      При редактировании даже не большого текста этой штуки крайне не хватает. И в TEdit и в прочих контролах ввода. В т.ч. - нет возможности "протянуть" курсор, если введено текста больше чем возможно отобразить. Возможно ль его как-то включить? Или, быть может, есть иной способ отображения этого дела? Как осуществлять "протяжку" текста?
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...