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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы при вставки из буфера... Проблемы с рус-символами и подсветкой 
:(
    Опции темы
Sportsmen
  Дата 19.11.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 3.11.2006
Где: Раша Родина наша- Старый Оскол

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



При вставке из буфера текста не распознает рус-символы - ставит "?" и почему-то не все теги подсвечивает(html)?
PM MAIL ICQ   Вверх
Seldon
Дата 20.11.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
При вставке из буфера текста не распознает рус-символы - ставит "?"

вот изменённый мною TCustomSynEdit.PasteFromClipboard, мои изменения помечены комментариями {Seldon}{/Seldon}
Код

procedure TCustomSynEdit.PasteFromClipboard;
var
  AddPasteEndMarker: boolean;
  vStartOfBlock: TBufferCoord;
  vEndOfBlock: TBufferCoord;
  StoredPaintLock: integer;

{$IFNDEF SYN_CLX}
  PasteMode: TSynSelectionMode;
  Mem: HGLOBAL;
  P: PChar;
{$ENDIF}
{Seldon}
  PW:PWideChar;
  Len:Integer;
  Str:String;
{/Seldon}
begin
  if not CanPaste then
    exit;
  DoOnPaintTransient(ttBefore);
  BeginUndoBlock;
  AddPasteEndMarker := False;
  try
{$IFDEF SYN_CLX}
{$ELSE}
    // Check for our special format first.
    if Clipboard.HasFormat(SynEditClipboardFormat) then begin
      Clipboard.Open;
      try
        Mem := Clipboard.GetAsHandle(SynEditClipboardFormat);
        P := GlobalLock(Mem);
        if P <> nil then
        try
          fUndoList.AddChange(crPasteBegin, BlockBegin, BlockEnd, '', smNormal);
          AddPasteEndMarker := True;
          if SelAvail then begin
            fUndoList.AddChange(crDelete, fBlockBegin, fBlockEnd, SelText,
              fActiveSelectionMode);
          end;

          // Our format: SelectionMode value followed by text.
          // See CopyToClipboard
          PasteMode := PSynSelectionMode(P)^;
          inc(P, SizeOf(TSynSelectionMode));
          if SelAvail then
          begin
            vStartOfBlock := BlockBegin;
            vEndOfBlock := BlockEnd;
            fBlockBegin := vStartOfBlock;
            fBlockEnd := vEndOfBlock;
            // Pasting always occurs at column 0 when current selection is
            // smLine type
            if fActiveSelectionMode = smLine then
              vStartOfBlock.Char := 1;
          end
          else
            vStartOfBlock := CaretXY;

          SetSelTextPrimitiveEx(PasteMode, P, True);
          vEndOfBlock := BlockEnd;
          if PasteMode = smNormal then
            fUndoList.AddChange(crPaste, vStartOfBlock, vEndOfBlock, SelText,
              PasteMode)
          else if PasteMode = smColumn then
            // Do nothing. Moved to InsertColumn
          else if PasteMode = smLine then
            if CaretX = 1 then
              fUndoList.AddChange(crPaste, BufferCoord(1, vStartOfBlock.Line),
                BufferCoord(CharsInWindow, vEndOfBlock.Line - 1), SelText, smLine)
            else
              fUndoList.AddChange(crPaste, BufferCoord(1, vStartOfBlock.Line),
                vEndOfBlock, SelText, smNormal);
        finally
          GlobalUnlock( Mem );
        end
        else
          raise ESynEditError.Create('Clipboard paste operation failed.');
      finally
        Clipboard.Close;
      end;
    // If our special format isn't there, check for regular text format.
    end else
    {Seldon}
    if Clipboard.HasFormat(CF_UNICODETEXT) then
    begin
      Clipboard.Open;
      try
        Mem:=Clipboard.GetAsHandle(CF_UNICODETEXT);
        PW:=GlobalLock(Mem);
        if PW<>nil then
        try
          fUndoList.AddChange(crPasteBegin, BlockBegin, BlockEnd, '', smNormal);
          AddPasteEndMarker := True;
          if SelAvail then
          begin
            fUndoList.AddChange(crDelete, fBlockBegin, fBlockEnd,
              SelText, fActiveSelectionMode);
          end
          else
            ActiveSelectionMode := SelectionMode;
          vStartOfBlock := BlockBegin;
          vEndOfBlock := BlockEnd;
          fBlockBegin := vStartOfBlock;
          fBlockEnd := vEndOfBlock;
          
          Len:=Length(PW);
          SetLength(Str,Len);
          WideCharToMultiByte(0,0,PW,Len,PAnsiChar(Str),Len,nil,nil);
          SetSelTextPrimitiveEx(SelectionMode,PAnsiChar(Str),true);
        
          if fActiveSelectionMode <> smColumn then
            fUndoList.AddChange(crPaste, vStartOfBlock, BlockEnd, SelText, fActiveSelectionMode);
        finally
          GlobalUnlock(Mem);
        end;
      finally
        Clipboard.Close;
      end;
    end
    else
{/Seldon}
     if Clipboard.HasFormat(CF_TEXT) then begin
{$ENDIF}
      fUndoList.AddChange(crPasteBegin, BlockBegin, BlockEnd, '', smNormal);
      AddPasteEndMarker := True;
      if SelAvail then
      begin
        fUndoList.AddChange(crDelete, fBlockBegin, fBlockEnd,
          SelText, fActiveSelectionMode);
      end
      else
        ActiveSelectionMode := SelectionMode;
      vStartOfBlock := BlockBegin;
      vEndOfBlock := BlockEnd;
      fBlockBegin := vStartOfBlock;
      fBlockEnd := vEndOfBlock;
      SetSelTextPrimitive(Clipboard.AsText);
      if fActiveSelectionMode <> smColumn then
        fUndoList.AddChange(crPaste, vStartOfBlock, BlockEnd, SelText, fActiveSelectionMode);
{$IFDEF SYN_CLX}
{$ELSE}
    end;
{$ENDIF}
  finally
    if AddPasteEndMarker then
      fUndoList.AddChange(crPasteEnd, BlockBegin, BlockEnd, '', smNormal);
    EndUndoBlock;
  end;

  // ClientRect can be changed by UpdateScrollBars if eoHideShowScrollBars
  // is enabled
  if eoHideShowScrollBars in Options then
  begin
    StoredPaintLock := fPaintLock;
    try
      fPaintLock := 0;
      UpdateScrollBars;
    finally
      fPaintLock := StoredPaintLock;
    end;
  end;

  EnsureCursorPosVisible;
  // Selection should have changed...
  StatusChanged([scSelection]);
  DoOnPaintTransient(ttAfter);                                                
end;

это должно решить проблему. 

Цитата
и почему-то не все теги подсвечивает(html)

какую версию SynUni используешь? запости сюда текст, который вставляешь и файл подсветки, который используешь.
--------------------
MiBEditor v2.Alpha 10 - Программерский редактор
PM MAIL WWW   Вверх
Sportsmen
Дата 20.11.2006, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 3.11.2006
Где: Раша Родина наша- Старый Оскол

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



Цитата(Seldon @  20.11.2006,  14:21 Найти цитируемый пост)
вот изменённый мною TCustomSynEdit.PasteFromClipboard

Извени, но я не пойму откуда это и куда?
PM MAIL ICQ   Вверх
Seldon
Дата 20.11.2006, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



в файле SynEdit.pas есть класс TCustomSynEdit, у него есть метод PasteFromClipboard, который отвечает за вставку текста из буфера. для корректной работы с русскими (и не только) символами, его надо изменить. в моём посте приведена уже изменённая версия. т.е. в файле SynEdit.pas  найди метод TCustomSynEdit.PasteFromClipboard и замени его моим.
--------------------
MiBEditor v2.Alpha 10 - Программерский редактор
PM MAIL WWW   Вверх
Sportsmen
Дата 21.11.2006, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 3.11.2006
Где: Раша Родина наша- Старый Оскол

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



А это подействует, если я использую SynMemo? smile 
PM MAIL ICQ   Вверх
navykeds
Дата 21.11.2006, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Sportsmen @  21.11.2006,  00:14 Найти цитируемый пост)
А это подействует, если я использую SynMemo?  


А ты попробуй smile

P.S: подействует, базовый класс для TSynMemo — TSynEdit.
PM MAIL   Вверх
Sportsmen
  Дата 21.11.2006, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 3.11.2006
Где: Раша Родина наша- Старый Оскол

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



Цитата

какую версию SynUni используешь? запости сюда текст, который вставляешь и файл подсветки, который используешь.

SynUni 2.0.b4lite. Ну например
Код

<noscript><!--этот выделил-->
<a href="http://..." target=_blank><!--этот тоже-->
// все остальные теги проигнорировал
<img src="http://..." border=0 width=200 height=350></a>
</noscript>

</td></tr></table>
<br>
<iframe style="width: 200px; height: 190px" frameborder=0 marginheight=0 marginwidth=0 scrolling="NO" src="..."></iframe>

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


 




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


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

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