Модераторы: Vitalik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UniSynEdit для Delphi 2009, Не корректное поведение 
:(
    Опции темы
serpan
Дата 12.11.2009, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.7.2009

Репутация: нет
Всего: нет



Народ, добрый день!

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

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

Эта проблема наблюдается только у меня, или я что-то не так делаю? Что-то все используют компонент, но никто об этой проблеме не обмолвился. 
PM MAIL   Вверх
Crw
Дата 12.11.2009, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 25.2.2008

Репутация: 1
Всего: 4



Чето я такой проблемы не припоминаю.. smile 
PM MAIL   Вверх
serpan
Дата 13.11.2009, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.7.2009

Репутация: нет
Всего: нет



Все. Выкрутился.
В модуле 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;

PM MAIL   Вверх
Trakor
Дата 18.11.2009, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 22.7.2008

Репутация: нет
Всего: нет



О, у меня тоже такой баг, спасибо!
PM MAIL   Вверх
sbfactory
Дата 30.3.2010, 06:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 26.2.2010

Репутация: нет
Всего: нет



Serpan, спасибо огромное, ты меня просто выручил!
PM MAIL   Вверх
Scorp419
Дата 11.6.2010, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 11.6.2010

Репутация: нет
Всего: нет



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

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

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

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

Буду очень признателен за подробные и верные ответы. smile 
PM MAIL   Вверх
K0T9I
Дата 20.10.2010, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 20.11.2009

Репутация: нет
Всего: 2



по-некропощу 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
...

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | SynUniHighlighter и SynEdit | Следующая тема »


 




[ Время генерации скрипта: 0.1172 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.