Форум: "WinAPI";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
Вниз
Надо получить позицию символа в мемо при движении мышки... Найти похожие ветки
← →
Silence (2005-07-01 16:42) [0]Мужики, помогите с САБЖЕМ!
← →
Digitman © (2005-07-01 16:46) [1]любопытно, зачем это может понадобиться ?
← →
Silence (2005-07-01 16:50) [2]Я составляю строку с именами людей и вывожу в мемо. Надо по наведению на имя курсора показать информацию о человеке, а для этого надо получить его имя, ну а для имени надобна позиция символа
← →
Digitman © (2005-07-01 16:55) [3]
> вывожу в мемо
в какой форме ? в каждой строке - одно или более имен, разделенных пробелами ? чем обосновано такое требование ? почему именно Memo и почему не выводить каждое имя отдельной строкой ?
← →
begin...end © (2005-07-01 16:58) [4]> Silence (01.07.05 16:50) [2]
EM_CHARFROMPOS
← →
Cardinal © (2005-07-01 17:08) [5]Вот функция когда-то писал, должна работать для шрифтов не
моноширинных, для любых:function memoposbypoint(p: tpoint; memo: tmemo): integer;
var
b,x,y,n,i: integer;
c: tcanvas;
begin
c := tcanvas.Create;
c.Font := memo.Font;
b := c.TextHeight("W");
y := round(p.Y div b + 1);
n := 0;
x := 0;
if memo.Lines.Count >= y then
for i := 1 to length(memo.Lines[y-1]) do
if length(memo.Lines[y-1]) >= i then
begin
b := c.TextWidth(memo.Lines[y-1][i]);
inc(n,b);
if n > p.X then
begin
x := i;
break;
end;
end;
result := 0;
for i := 0 to y-2 do
inc(result,length(memo.Lines[i]));
inc(result,x);
c.Free;
end;
← →
Cardinal © (2005-07-01 17:12) [6]Кто спросит зачем, так я псевдографический редактор писал, там мышкой как в пайнте рисовать можно было благодаря этой функции
← →
Digitman © (2005-07-01 17:14) [7]
> надо получить его имя, ну а для имени надобна позиция символа
проще заполнить именами список TListView и в обработчике OnMouseMove вызывать GetItemAt(), который вернет эл-т списка с готовым именем в св-ве Caption
и никакая "позиция символа" не нужна
← →
Silence (2005-07-01 17:24) [8]2 Cardinal спасибо
В мемо я вывожу имена через запятую, так стукнуло в голову одному человеку
← →
begin...end © (2005-07-01 17:27) [9]> Cardinal © (01.07.05 17:08) [5]
function MemoPosByPoint(P: TPoint; Memo: TMemo): Integer;
begin
Result := Memo.Perform(EM_CHARFROMPOS, 0, MAKELPARAM(P.X, P.Y)) and $FFFF
end.
Оно попроще будет. Мне так почему-то ка-а-тся.
← →
Digitman © (2005-07-01 17:41) [10]
> так стукнуло в голову одному человеку
думается, захворал он на голову, этот "человек")
← →
Silence (2005-07-01 17:48) [11]Наш отдел держит сказанное вами мнение при себе :-\
← →
Cardinal © (2005-07-01 18:06) [12]
> Наш отдел держит сказанное вами мнение при себе :-\
Все понятно, сочувствую
> Оно попроще будет. Мне так почему-то ка-а-тся.
Зато у меня нагляднее, виден весь алгоритм. Вместе с практической пользой функция преследует учебную цель :-)
P.S. Ладно, сдаюсь, ваша лучше :-)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c