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


Автор: Guest 28.3.2005, 14:55
Подскажите плиззз
Код

var
   TempStr : string;
begin
   SynEdit1.SetFocus;
   TempStr := SynEdit1.Lines[SynEdit1.CaretY];
   Insert('текст который надо вставить', TempStr, SynEdit1.CaretX + 1);
end;

И не ругается и не выполняет. Раньше у меня проходило то же самое но с Memo

Автор: FRAGNATIC 28.3.2005, 16:17
Код

var
  Pos: integer;
  Buf: string;
begin
  Pos := Edit.SelStart;
  Buf := Edit.Lines.Strings[Edit.CaretY-1];
  Insert('sss', buf, Edit.CaretX);
  Edit.Lines.Strings[Edit.CaretY-1] := Buf;
  Edit.SelStart:=Pos+Length('sss');
  Edit.SetFocus();
end;

Автор: Vit 28.3.2005, 20:17
FRAGNATIC код работать будет, но не будет работать Undo...

Правильно примерно так:
Код

b, p:TBufferCoord;

b:=SynEdit1.CaretXY; //запоминаем старую позицию курсора
p:= ... //место куда надо вставить текст
SynEdit1.CommandProcessor(ecGotoXY, #0, @p); //переходим на место вставки
SynEdit1.Seltext:='строка которую надо вставить';//вставляем текст
SynEdit1.CommandProcessor(ecGotoXY, #0, @b);//возращаем курсор на прежнее место
 



P.S. Короче, при работе с SynEdit крайне нежелательно напрямую писать в SynEdit.lines, потому как такие операции невозможно будет откатить. Используйте SelText, SelStart, SelLength, и коммандный процессор для манипуляций и будет вам счастье....

PPS. Guest - ваш код на мемо тоже не будет работать

и последний PPPS. У нас есть форум по SynEdit: http://forum.vingrad.ru/index.php?showforum=170 smile
Добавлено @ 20:22
Если текст надо вставить по месту курсора, то тогда ещё проще:

Код

SynEdit1.Seltext:='текст который вставить';

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