Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > SynUniHighlighter и SynEdit > UniSynEdit для Delphi 2009


Автор: serpan 12.11.2009, 08:56
Народ, добрый день!

Скачал компонет UniSynEdit отсюда
http://mh-nexus.de/downloads/UniSynEdit.zip

Компонент в Delphi 2009 установился на ура. Но вот сразу наткнулся на странное поведение. Положил компонент на формочку и запустил программку. При нажатии на Enter, курсор не переходит на новую строку. Более того, если напечатать символ, и попробовать нажать Enter перед ним, то символ переходит на следующую строку, а курсор так и остается на своем месте. 

Эта проблема наблюдается только у меня, или я что-то не так делаю? Что-то все используют компонент, но никто об этой проблеме не обмолвился. 

Автор: Crw 12.11.2009, 20:34
Чето я такой проблемы не припоминаю.. smile 

Автор: serpan 13.11.2009, 08:46
Все. Выкрутился.
В модуле SynEdit.pas в процедуре ExecuteCommand добавил две строчки:

Код

procedure TCustomSynEdit.ExecuteCommand(Command: TSynEditorCommand; AChar: WideChar;
  Data: pointer);
begin
...
              if Command = ecLineBreak then
              begin
                // --------------
                SetCaretX(0);          // <------------ Перемещаем курсор в начало строки 
                SetCaretY(CaretY + 1); //<------------ Перемещаем курсор на следующую строку
                // --------------
                if SpaceCount2 > 0 then
                begin
                  SpaceBuffer := Copy(Lines[BackCounter], 1, SpaceCount2);
                  InternalCaretXY := BufferCoord(1, CaretY +1);
...
end;

Автор: Trakor 18.11.2009, 20:09
О, у меня тоже такой баг, спасибо!

Автор: sbfactory 30.3.2010, 06:17
Serpan, спасибо огромное, ты меня просто выручил!

Автор: Scorp419 11.6.2010, 11:24
Здравствуйте.Мой друг пишет программу и хочет использовать исходники Synedit или UniSynEdit, однако непонятны некоторые нюансы (лицензионное соглашение не нашли):

1.Нужно ли выкладывать (и куда, и как) переделанные по-своему исходники?

2.Если он интегрирует код SynEdit (или UniSynEdit) со своим кодом, и получается так, что после этого код SynEdit перестает работать, без его программы,
то что, он обязан выкладывать в том числе и код своей программы, так чтобы у других обновленные исходники SynEdit могли работать?

3.Если он в самом SynEdit ничего не менял, то может ли он и не выкладывать и никому не предоставлять исходники?

Буду очень признателен за подробные и верные ответы. smile 

Автор: K0T9I 20.10.2010, 15:42
по-некропощу smile 
при описанном выше способе решения проблемы, возникает другая проблема, а именно, некорректный перевод каретки на новую строку в случае когда вначале строки стоят знаки табуляции или пробелы:
решение проблемы с учетом Undo/Redo
Код

procedure TCustomSynEdit.ExecuteCommand(Command: TSynEditorCommand; AChar: WideChar;
  Data: pointer);
begin
...
                fUndoList.AddChange(crLineBreak, Caret, Caret, '', smNormal);
                if Command = ecLineBreak then
                begin
                  if SpaceCount2 > 0 then
                  begin
                    SpaceBuffer := Copy(Lines[BackCounter], 1, SpaceCount2);
                    InternalCaretXY := BufferCoord(1, CaretY+1);
                    for I := 1 to Length(SpaceBuffer) do
                      if SpaceBuffer[I] = #9 then
                        CommandProcessor(ecTab, #0, nil)
                      else
                        CommandProcessor(ecChar, SpaceBuffer[I], nil);
                  end
                  else
                  begin
                    // --------------
                   SetCaretX(0);          // <------------ Перемещаем курсор в начало строки 
                   SetCaretY(CaretY + 1); //<------------ Перемещаем курсор на следующую строку
                  // --------------
                  end;
                end;
                //fUndoList.AddChange(crLineBreak, Caret, Caret, '', smNormal); строку переместили выше if Command = ecLineBreak
...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)