![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Немигающая каретка: возможно ли это?
lookin © (2005-09-10 19:39:00)Сабж...
lookin (2005-09-10 23:13:00) [1][12] Virgo_Style © (10.09.05 22:34)
>>То есть, если не пытаться сделать ее немигающей, то она мигает, но видна
>>как раз-таки все то время, когда и где должна быть?
Как раз если сделать ее "немигающей" путем [1], то она просто исчезает при вводе любого символа, хотя дол ввода остается немигающей
Virgo_Style (2005-09-10 22:34:00) [2]lookin © (10.09.05 22:15) [11]
То есть, если не пытаться сделать ее немигающей, то она мигает, но видна как раз-таки все то время, когда и где должна быть?
Хм... Странно...
lookin (2005-09-10 22:15:00) [3][10] Virgo_Style © (10.09.05 22:13)
>>При вычислении координаты каретки она точно не выходит за пределы поля ввода?
Абсолютно, она может оказаться вне поля зрения, но всегда в поле ввода...
Вообще у меня даже все проще, при наборе текста в видимой области каретка мигает (или исчезает, при миллисекундах оченна больших), но появляется в точности там, где надо...
Virgo_Style (2005-09-10 22:13:00) [4]Хм, получил похожий эффект.
procedure TForm1.Memo1Change(Sender: TObject);
var p:TPoint;
begin
GetCaretPos(p);
SetCaretPos(p.x-10,p.y);
end;
При вводе символа в тот момент, когда каретка в начале строки, она стала исчезать (что, в принципе, логично).
При вычислении координаты каретки она точно не выходит за пределы поля ввода?
lookin (2005-09-10 21:41:00) [5][7] Virgo_Style © (10.09.05 21:37)
Что любопытно - в моем окошке каретка исчезает после ввода символа, хотя в дельфях - остается.... Почему бы это?
lookin (2005-09-10 21:39:00) [6][7] Virgo_Style © (10.09.05 21:37)
Может я чего-то не так делаю?
Virgo_Style (2005-09-10 21:37:00) [7]Практически весь мой код содержится в [1] %-)
Еще поставил SetCaretPos в Memo.OnChange, вот и все.
Может, я чего неправильно делаю, потому и работает? :o)
lookin (2005-09-10 21:17:00) [8][5] Zeqfreed © (10.09.05 21:09)
Например, если это что-то объяснит:
//создание каретки
procedure TMacro.PaintCaret;
begin
if CreateCaret(Window.Handle,0,2,Step.y) then begin
ShowCaret(Window.Handle);
SetCaretPos(LeftMargin,0);
SetCaretBlinkTime(300000);
end;
end;
//сдвиг каретки при вводе символа
procedure TMacro.WindowKeyPress(Sender: TObject; var Key: Char);
begin
GetCaretPos(p);
...вычисляется новое значение p
SetCaretPos(p.x,p.y);
end;
Zeqfreed (2005-09-10 21:09:00) [9]lookin © (10.09.05 20:53) [4]
Virgo_Style © (10.09.05 20:34) [3]
Коды в студию, для сравнения :)
lookin (2005-09-10 20:53:00) [10][3] Virgo_Style © (10.09.05 20:34)
Эх, у меня выявляет... Т.е. я так считаю, судя по видимому...
Virgo_Style (2005-09-10 20:34:00) [11]lookin © (10.09.05 20:16) [2]
Хм... Это было бы неприятно :-) А откуда это следует? Я ничего такого не нашел, и эксперимент вроде ничего такого не выявляет...
lookin (2005-09-10 20:16:00) [12][1] Virgo_Style © (10.09.05 20:08)
Ну, насколько я понял, SetCaretPos сбрасывает состояние каретки на обратное.
Virgo_Style (2005-09-10 20:08:00) [13]Насколько я понимаю, после
SetCaretBlinkTime(MaxInt);она не погаснет 24 дня. Этого мало? %-)