• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

автоматическое расширение Richedit при вводе текста

  • Автор темы Автор темы Leos
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
L

Leos

Такая задача:
Есть RichEdit. В него вводят текст. Необходимо, чтобы если текст не помещается, RichEdit автоматически расширялся бы. То же касается и его высоты. Например, если изначально он имел высоту в одну стороку и нажали Enter, RichEdit увеличил бы свою высоту, чтобы была возможность вводить текст далее.
Заранее спасибо.
 
Нуу .. как вариант только ручками рассчитывать ширину и длину текста в контроле и изменять его размеры...

Стандартного такого точно поведения нет...
 
Хорошо, если расчитывать ручками, то для начала надо пройтись по всем символам и получить их ширину, высоту - это можно.
Но как получить определённый символ, не используя RichEdit1.SelLength?
Ведь если я вручную буду выделять символ в RichEdit'e будет ужасное мелькание.

Т.е. теперь задача как получить SelAttributes определённого символа, не выделяя его?
 
Мне кажется что возможнос тоит пересмотреть постановку задачи...

Вполне возможно что стоит придумать другое вариант ...потому ка изначально задуманно нестандартное поведение GUI...
 
<!--QuoteBegin-Barmutik+4:01:2007, 19:23 -->
<span class="vbquote">(Barmutik @ 4:01:2007, 19:23 )</span><!--QuoteEBegin-->Мне кажется что возможнос тоит пересмотреть постановку задачи...

Вполне возможно что стоит придумать другое вариант ...потому ка изначально задуманно нестандартное поведение GUI...
[snapback]52322" rel="nofollow" target="_blank[/snapback]​
[/quote]

По сути, в идеале, мне надо получить возможность ввода текста как в PhotoShop'e или аналогичных программ.

Какие у Вас есть предложения по тому, как это можно реализовать по-другому?
 
Думаю эта процедура тебе поможет:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
fnt:TFont;
len:Integer;
begin
fnt:=TFont.Create;
try
fnt.Assign(Form1.canvas.Font);
Form1.canvas.Font:=RichEdit1.Font;
len:=Form1.canvas.TextWidth(RichEdit1.text);
RichEdit1.ClientWidth:=len;
RichEdit1.Invalidate;
Form1.canvas.Font.Assign(fnt);
finally
fnt.Free;
end;
end;
 
видимо не совсем поможет, так как в RichEdit можно использовать разные шрифты для разных символов.
Что тогда? можно, конечно, по символу выводить, как у тебя в примере и складывать ширину этих символов. Но это будет очень медленно и заметно на глаз. Проверено.

может есть какой-нибудь другой метод?
 
видимо не совсем поможет, так как в RichEdit можно использовать разные шрифты для разных символов.
Что тогда? можно, конечно, по символу выводить, как у тебя в примере и складывать ширину этих символов. Но это будет очень медленно и заметно на глаз. Проверено.
Да в чем проблема? Не обрабатывай весь текст, обрабатывай только пользовательский ввод - события OnKeyUp, OnKeyPress, OnSelectionChange, OnMouseUp.
Есть еще способ, использовать событие OnResizeRequest, но тут все равно придется обрабатывать пользовательский ввод, так как при удалениях не корректно отрабатывается параметр Rect:
Код:
procedure TForm1.RichEdit1ResizeRequest(Sender: TObject; Rect: TRect);
begin
RichEdit1.ClientWidth:=Rect.Right-Rect.Left;
RichEdit1.ClientHeight:=Rect.Bottom-Rect.Top;
end;
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы