Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо