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


Автор: BlackWeb 4.2.2008, 02:53
Привет всем... есть небольшая проблемка)) не писал на дельфи уже года 3, а тут че то решил вспомнить молодость и возродить свою прогу)) Так вот) Не могу победить проблему: 

Суть в следующем:

в SynEdit есть какой либо текст
например 
Код

привет
я программа
ну ваще


есть кнопка))) которая вставляет в редактор текст

Код

текст "@@@"


ситуация такая: я выделяю какой либо текст в редакторе, например 
Код

привет


и жму на кнопку)))

и хочется чтобы текст был вставлен в редактор, и при этомвместо @@@ был выделенный текст.... с этим проблем нет, проблема в следующем:
как мне установить позицию каретки в редакторе после выполнения вставки и преобразования на то место, где была надпись @@@?

те если я вставляю тег <b>@@@</b> то курсор автоматически вставал между тегами те <b>СЮДА</b>


Добавлено @ 02:54
извиняюсь если что то не по правилам и извиняюсь за то что это не имеет никакого отношени в унихайлайтеру, но больше не знаю где спросить)

Добавлено @ 02:56
подкинули мне тут такую процедуру))

Код


procedure TForm1.InsertText(Text: string);
var
  i, j: integer;
  s, topast, selt: string;
  p: TBufferCoord;
  Temp: TStringList;
begin
{
if Notebook1.ActivePage='2' then
modes_EditExecute(self);
}

  p := editor.CaretXY;
  Temp := TStringList.Create;
  selt := editor.SelText;
  topast := qpl3_macross_apply(Text);
  temp.Text := replaceATs(topast,editor.seltext+'@@@');
  for i := 0 to Temp.Count - 1 do
  begin
  s := Temp[i];
  j := Pos('@@@', s);
  if j > 0 then
   begin
    Delete(s, j, 3);
    Temp[i] := s;
    Inc(p.Line, i);
    if i = 0 then
      Inc(p.Char, j - 1)
    else
      p.Char := j;
     break;
   end;
  end;
  s := Temp.Text;
  i := Length(s);
  if (i >= 2) and (s[i - 1] = #13) and (s[i] = #10) then
    SetLength(s, i-2);
  Temp.Free;
  editor.SelText := s;
  if j>0 then
  begin
  editor.CaretXY := p;
  end;
  editor.SetFocus;
end;


но не работает она как надо))) частельно неправильно определяет новое положение каретки

Автор: BlackWeb 4.2.2008, 03:38
вот прога что я делаю... сырая и глючная альфа
http://rapidshare.com/files/88976309/ce_mitsar_alpha1.rar.html
чтобы понять проблему))) попробуйте поюзать побольше вставку из панели Htm

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