![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Wrap text in editbox/memo
Jon © (2008-02-05 00:41:00)How can I toggle word-wrap in a multi-line edit box (memo in mck)?
In the VCL I can use the WordWrap property. Is there a KOL equivalent?
I can change the style with WS_HSCROLL but the text is not wrapped.
Jon (2008-02-06 23:34:00) [1]Thank you all very much indeed :-)
=BuckLr= (2008-02-06 20:04:00) [2]Действительно. Оказалось, сообщения для richedit :) Ну тогда один вариант
Дмитрий К (2008-02-06 16:01:00) [3]
> Так проверь.
Проверил. Никакой реакции.
to Jon
procedure ToggleWordWrap;
var s: string; wp: TWindowPlacement; cp: Integer;
begin
wp.length := SizeOf(TWindowPlacement);
GetWindowPlacement(memo.Handle, @wp);
s := memo.Text;
cp := memo.SelStart;
memo.Free;
if memo.Style and WS_HSCROLL = WS_HSCROLL then
memo := NewEditbox(form, [eoMultiline, eoNoHScroll])
else
memo := NewEditbox(form, [eoMultiline]);
memo.Text := s;
memo.SelStart := cp;
SetWindowPlacement(memo.Handle, @wp);
//memo.Focused := True;
end;
=BuckLr= (2008-02-06 15:29:00) [4]
> Сохранить все что нужно во временные переменные,
Можно и так, не спорю.
> А вот по поводу сообщений, что-то у меня сомнения, действительно
> работает?
Так проверь. У меня работало с richedit. я придерживаюсь мнения, что гораздо лучше послать несколько сообщений, чем создавать объект заново. А в случае Jon'а, наверное, будет лучше способ с пересозданием объекта.
> Is using a temporary variable (SaveText) the most efficient
> way for managing (large) text?
I think, yes.
SaveText := Memo1.Text - the text should not be copied, pointer to Memo1.Text will be assigned to SaveText.
Jon (2008-02-06 14:36:00) [5]Thank you everyone for your input.
This is the only solution that works (simplified):
procedure WordWrapOff;
var
SaveText: String;
begin
SaveText := Memo1.Text;
// Save Memo1 position, size, etc...
Memo1.Free;
Memo1 := NewEditBox(Form,[eoMultiline]);
// Restore Memo1 position, size, etc...
Memo1.Text := SaveText;
end;
procedure WordWrapOn;
var
SaveText: String;
begin
SaveText := Memo1.Text;
// Save Memo1 position, size, etc...
Memo1.Free;
Memo1 := NewEditBox(Form,[eoMultiline,eoNoHScroll]);
// Restore Memo1 position, size, etc...
Memo1.Text := SaveText;
end;
Is using a temporary variable (SaveText) the most efficient way for managing (large) text?
Дмитрий К (2008-02-06 10:44:00) [6]Зачем клон-то? Сохранить все что нужно во временные переменные, уничтожить, создать. А вот по поводу сообщений, что-то у меня сомнения, действительно работает?
=BuckLr= (2008-02-06 10:34:00) [7]
> Recreate memo w/ or w/o eoNoHScroll
Зачем? Во время recreate придётся сначала создать клон компонента, затем перенести текст и все нужные свойства ВРУЧНУЮ, сохранить и восстановить положение каретки, а затем уничтожить клон. Лучше послать несколько сообщений, imho. Я уже набил шишек на свою голову :)
Дмитрий К (2008-02-06 06:12:00) [8]Recreate memo w/ or w/o eoNoHScroll
=BuckLr= (2008-02-05 23:14:00) [9]try:
None
EditBox.Perform(EM_SHOWSCROLLBAR, SB_VERT, 0);
EditBox.Perform(EM_SHOWSCROLLBAR, SB_HORZ, 0);
Both
EditBox.Perform(EM_SHOWSCROLLBAR, SB_VERT, 1);
EditBox.Perform(EM_SHOWSCROLLBAR, SB_HORZ, 1);
Vert
EditBox.Perform(EM_SHOWSCROLLBAR, SB_VERT, 1);
EditBox.Perform(EM_SHOWSCROLLBAR, SB_HORZ, 0);
Horz
EditBox.Perform(EM_SHOWSCROLLBAR, SB_VERT, 0);
EditBox.Perform(EM_SHOWSCROLLBAR, SB_HORZ, 1);
Jon (2008-02-05 21:47:00) [10]Thanks - but to be able to change dynamically at runtime like notepad (wordwrap on/off)?
=BuckLr= (2008-02-05 13:51:00) [11]
> EM_SETWORDBREAKPROC
Это для замены стандартной процедуры переноса. Не тот случай
=BuckLr= (2008-02-05 13:50:00) [12]In obj inspector Options - eo_NoHScroll := True ?
Robt (2008-02-05 12:47:00) [13]MSDN
Handling Wordwrap and Line Breaks
EM_SETWORDBREAKPROC