Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.21;
Скачать: CL | DM;

Вниз

Надо получить позицию символа в мемо при движении мышки...   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2005.08.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
11-1105547544
Seeker
2005-01-12 19:32
2005.08.21
KOLScktComp


1-1123072822
HepB
2005-08-03 16:40
2005.08.21
Существует ли возможность хранить имя массива в переменной...?


11-1105695193
DmiSb
2005-01-14 12:33
2005.08.21
Печать страницы Excel не показывая самого Excel ?


6-1115802170
Chaser
2005-05-11 13:02
2005.08.21
Запрос Яндекса на добавление URL


14-1122647631
Alexon
2005-07-29 18:33
2005.08.21
Работа с TServerSocket/TClientSocket