Конференция "KOL" » Wrap text in editbox/memo
 
  • Jon © (05.02.08 00:41) [0]
    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.
  • Robt © (05.02.08 12:47) [1]
    MSDN
    Handling Wordwrap and Line Breaks
    EM_SETWORDBREAKPROC
  • =BuckLr= © (05.02.08 13:50) [2]
    In obj inspector Options - eo_NoHScroll := True ?
  • =BuckLr= © (05.02.08 13:51) [3]

    > EM_SETWORDBREAKPROC

    Это для замены стандартной процедуры переноса. Не тот случай
  • Jon © (05.02.08 21:47) [4]
    Thanks - but to be able to change dynamically at runtime like notepad (wordwrap on/off)?
  • =BuckLr= © (05.02.08 23:14) [5]
    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);
  • Дмитрий К © (06.02.08 06:12) [6]
    Recreate memo w/ or w/o eoNoHScroll
  • =BuckLr= © (06.02.08 10:34) [7]

    > Recreate memo w/ or w/o eoNoHScroll

    Зачем? Во время recreate придётся сначала создать клон компонента, затем перенести текст и все нужные свойства ВРУЧНУЮ, сохранить и восстановить положение каретки, а затем уничтожить клон. Лучше послать несколько сообщений, imho. Я уже набил шишек на свою голову :)
  • Дмитрий К © (06.02.08 10:44) [8]
    Зачем клон-то? Сохранить все что нужно во временные переменные, уничтожить, создать. А вот по поводу сообщений, что-то у меня сомнения, действительно работает?
  • Jon © (06.02.08 14:36) [9]
    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?
  • =BuckLr= © (06.02.08 15:29) [10]

    > Сохранить все что нужно во временные переменные,

    Можно и так, не спорю.


    > А вот по поводу сообщений, что-то у меня сомнения, действительно
    > работает?

    Так проверь. У меня работало с 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.
  • Дмитрий К © (06.02.08 16:01) [11]

    > Так проверь.

    Проверил. Никакой реакции.

    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= © (06.02.08 20:04) [12]
    Действительно. Оказалось, сообщения для richedit :) Ну тогда один вариант
  • Jon © (06.02.08 23:34) [13]
    Thank you all very much indeed :-)
 
Конференция "KOL" » Wrap text in editbox/memo
Есть новые Нет новых   [134467   +7][b:0][p:0.001]