Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];

Вниз

RichEdit и позиционирование курсора   Найти похожие ветки 

 
тихий вовочка   (2004-02-10 23:14) [0]

У меня задача найти все теги, перед которыми нет пробелов и добавить пробелы. Находить - нахожу, добавляю тоже замечательно, но не омгу пользователю показать где меняю - не работает выделение нужного куска. Где я ошибся?
procedure TForm1.FormDblClick(Sender: TObject);
var
i,pos:integer;
Sum : integer;
S : string;
begin
Sum:=0;
with Form1.RxRichEdit1 do
begin
SetFocus;
HideSelection:=false;

for i:=0 to Lines.Count-1 do
begin
s:=Lines[i];
pos:=AnsiPos("<",s);
if(pos>1)then
begin
if((s[pos-1]<>" ")and(s[pos+1]<>"/")) then
begin
SelStart:=Sum;
SelLength:=Length(s)-1;
Insert(" ",s,pos);
ListBox1.Items.Add(s);
end;
end;

Sum:=Sum+Length(s)+1;
end;
end;

end;


 
Maxud   (2004-02-10 23:39) [1]

После этого:

> SelStart:=Sum;
> SelLength:=Length(s)-1

Добавь:
SelAttributes.Style := [fsBold];


 
тихий вовочка   (2004-02-11 06:58) [2]

И как это повлияет на выделение? У меня проблема в том, что SelStart оказывается вовсе не там, где надо, то есть выделяется вовсе не та строка, в которой найден "<". Где-то при подсчете общего кол-ва символов я вру. Попробовал еще такой кусок
RxRichEdit1.SetFocus;
rxrichedit1.HideSelection:=false;
for i:=1 to Length(RxRichEdit1.Text)
do
begin
if(RxRichEdit1.Text[i]="<") then
begin
RxRichEdit1.SelStart:=i-1;
RxRichEdit1.SelLength:=1;
ShowMessage("test");
end;
end;
Тоже выделяет все, что угодно, но только не текст с тегом


 
TUser   (2004-02-11 08:04) [3]

Вместо
Sum:=Sum+Length(s)+1;
надо
Sum:=Sum+Length(s)+3;

Кроме того, перед этой строчкой надо снова получить s:=Lines[i], т.к. длина этой строки могла поменяться.


 
Defunct   (2004-02-11 21:27) [4]

Вот функция позиционирования на нужный символ:


// На входе ACol, ARow - координаты X,Y символа в RichEdit
// возвращает позицию для SelStart
Function TForm1.LocateCharPos(ACol,ARow:Integer):Cardinal;;
Var I:Integer;
Begin
If (ARow<=RichEdit.Lines.Count) Then
If (ACol<Length(RichEdit.Lines.Strings[ ARow ])) Then
Begin
CharPos := ACol;
For I:=0 To ARow-1 Do
Begin
CharPos := CharPos + Length(RichEdit.Lines.Strings[i])+2
End;
Located := True;
End Else
Begin
CharPos := 0;
Located := False;
End;
Result := CharPos;
End;


Переменные CharPos и Located объвлены в TForm1 как

CharPos : Cardinal; // Позиция для SelStart в RichEdit
Located : Boolean; // Указывает на то, что символ в этих
координатах есть


А вот процедура выделения требуемого места в RichEdit

Procedure TForm1.SetSel(SelStart, SelEnd:Integer);
Var CharRange: TCharRange;
Begin
CharRange.cpMin := SelStart;
CharRange.cpMax := SelEnd;
SendMessage(RichEdit.Handle, EM_EXSETSEL, 0, Longint(@CharRange));
End;


Тип и константа:


WM_USER = $0400;
EM_EXSETSEL = WM_USER + 55;

TCharRange = record
cpMin: Longint;
cpMax: LongInt;
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.03 c
1-79914
hamster
2004-02-08 16:23
2004.02.25
Мышь


1-79899
Qwer
2004-02-10 09:30
2004.02.25
Совместимость


14-80097
sad
2004-02-02 09:49
2004.02.25
Вопрос


3-79548
NoName
2004-01-29 22:37
2004.02.25
Хранимая процедура


8-80037
Boris&Doris
2003-10-13 14:14
2004.02.25
Midi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский