Главная страница
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.053 c
4-1119527962
Grief
2005-06-23 15:59
2005.08.21
почему нет WM_CloseQuery?


1-1122469493
Vasian
2005-07-27 17:04
2005.08.21
как правильно создать виртуальную канву (Tcanvas)?


3-1121148609
Aln
2005-07-12 10:10
2005.08.21
Ошибка при попытке присвоить значение ADOQuery.SQL.Text???


9-1114438472
Bryke
2005-04-25 18:14
2005.08.21
Индексы текстурных координат


3-1120743973
Mefodiy
2005-07-07 17:46
2005.08.21
Помогите новичку с SQL запросом в Oracle