-
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.
-
MSDN Handling Wordwrap and Line Breaks EM_SETWORDBREAKPROC
-
In obj inspector Options - eo_NoHScroll := True ?
-
> EM_SETWORDBREAKPROC
Это для замены стандартной процедуры переноса. Не тот случай
-
Thanks - but to be able to change dynamically at runtime like notepad (wordwrap on/off)?
-
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);
-
Recreate memo w/ or w/o eoNoHScroll
-
> Recreate memo w/ or w/o eoNoHScroll
Зачем? Во время recreate придётся сначала создать клон компонента, затем перенести текст и все нужные свойства ВРУЧНУЮ, сохранить и восстановить положение каретки, а затем уничтожить клон. Лучше послать несколько сообщений, imho. Я уже набил шишек на свою голову :)
-
Зачем клон-то? Сохранить все что нужно во временные переменные, уничтожить, создать. А вот по поводу сообщений, что-то у меня сомнения, действительно работает?
-
Thank you everyone for your input. This is the only solution that works (simplified):
procedure WordWrapOff;
var
SaveText: String;
begin
SaveText := Memo1.Text;
Memo1.Free;
Memo1 := NewEditBox(Form,[eoMultiline]);
Memo1.Text := SaveText;
end;
procedure WordWrapOn;
var
SaveText: String;
begin
SaveText := Memo1.Text;
Memo1.Free;
Memo1 := NewEditBox(Form,[eoMultiline,eoNoHScroll]);
Memo1.Text := SaveText;
end;
Is using a temporary variable (SaveText) the most efficient way for managing (large) text?
-
> Сохранить все что нужно во временные переменные,
Можно и так, не спорю.
> А вот по поводу сообщений, что-то у меня сомнения, действительно > работает?
Так проверь. У меня работало с 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.
-
> Так проверь.
Проверил. Никакой реакции. to Jonprocedure 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);
end;
-
Действительно. Оказалось, сообщения для richedit :) Ну тогда один вариант
-
Thank you all very much indeed :-)
|