![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос о позиции каретки. [D7, XP]
Aral © (2006-07-29 22:33:00)У меня вопрос: мне надо узнать, где находится курсор(каретка) в тексте (я имею ввиду |), количество символов до него. Как можно это сделать?(Я хочу исползовать Insert(x, 'text') где x-кол-во символов до курсора, а 'text'- вставляемый текст.)
Alral (2006-07-30 15:44:00) [1]Ja ne znal, chto insert-dlja tseloi stroki, dumal-dlja simvolov. Spasibo chto objasnili.
Alral (2006-07-30 15:40:00) [2]Spasibo.
Gydvin (2006-07-30 11:16:00) [3]
> !_SM_! (30.07.06 00:45) [9]
Тоже самое только проще
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
i := memo1.SelStart + memo1.SelLength;
memo1.SelLength := 0;
memo1.SelStart := i;
memo1.SelText := '<HEAD>';
end;
> No, kogda ja zapuskaju programmu s pustim Memo, on vstavljaet
> ee na pervoe mesto, a kogda v memo chto-to est(vveli vo
> vremja Run), to ona ne menjaetsja(nikakogo effokta pri nazhatii
> HEAD1.Click.) Pomogite plz
Все дело в том, что процедура Insert (X, text), предназначена, для вставки целой строки, а не символов в строку. Где Х - номер на какое место хочешь вставить, Text- текст строки, которую хочешь вставлять.
В Alral © (29.07.06 23:21) [4]
Ты выясняешь номер символа где находится курсор, потом почему-то, волшебным образом решаешь, что это номер строки и вставляешь туды строку ))))). А не пашет потому, что этот самый "номер строки" выходит за пределы count строк (общего количества строк) которые в данный момент имеются , а то есть всего одна ))))
Во написал ;0)
Alral (2006-07-30 00:48:00) [4]Spasibo, seichas poprobuju
!_SM_! (2006-07-30 00:45:00) [5]Попробуй так:
procedure TForm1.Button1Click(Sender: TObject);
function InsertText(const X: Integer; S: String): String;
begin
Result:=Copy(Memo1.Lines[Memo1.CaretPos.Y], 1, X)
+S+Copy(Memo1.Lines[Memo1.CaretPos.Y], X+1, Length(Memo1.Lines[Memo1.CaretPos.Y]));
end;
begin
Memo1.Lines[Memo1.CaretPos.Y]:=InsertText(Memo1.CaretPos.X, '<HEAD>');
end;
Alral (2006-07-30 00:13:00) [6]!_SM_! Spasibo, no ja ne ponjal nekotorie veshi:
TPoint = packed record, dolzno bit TPoint:= packed record ili ja ne prav(ja ne utverzdaju, mne prosto kazetsja zdes znak prisvaivania :+ dolzen bit, ili net?),
TPoint = packed record
X: Longint;
Y: Longint;
end;
eto dolzno bit v type? Ja ne znaju, chto znachit packed record, objasnite pozaluista. Budu vam blagodaren.
!_SM_! (2006-07-30 00:06:00) [7]TPoint = packed record
X: Longint;
Y: Longint;
end;
Memo1.CaretPos: TPoint;
Следовательно
Memo1.CaretPos.X: LongInt;
Alral (2006-07-29 23:46:00) [8]Sorry za opechatku, Alral i Aral-odin i tot ze chelovek(prosto bukvu sluchaino ne napisal).
Alral (2006-07-29 23:25:00) [9]Predidushee dobovlenie po povodu otveta Gydvin.
> Loginov Dmitry © (29.07.06 23:14) [3]
>
> Memo1.CaretPos
>
Incompactible types: Integer and TPoint;
Mne nuzhno v Integer, t.k. kak ja uze skazal, ispolzujetsja Insert, po etomu peremennaja SPos: integer; Memo1.CaretPos: TPoint.
Alral (2006-07-29 23:21:00) [10]ja sdelal tak('<HTML>' dolzhen okazatsja tam, gde kursor)
procedure TForm1.HEAD1Click(Sender: TObject);
begin
SPos:=Memo1.SelStart;
Memo1.Lines.Insert(SPos, '<HEAD>');
end;
No, kogda ja zapuskaju programmu s pustim Memo, on vstavljaet ee na pervoe mesto, a kogda v memo chto-to est(vveli vo vremja Run), to ona ne menjaetsja(nikakogo effokta pri nazhatii HEAD1.Click.) Pomogite plz
Loginov Dmitry (2006-07-29 23:14:00) [11]Memo1.CaretPos
Gydvin (2006-07-29 22:49:00) [12]selstart
Alral (2006-07-29 22:47:00) [13]Imeetsja vvidu TMemo