Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.031 c
6-1115462843
Sir
2005-05-07 14:47
2005.08.21
List + Port в FTp протоколе


4-1119763511
Гость2
2005-06-26 09:25
2005.08.21
Как недоаустить повторного открытия моего приложения?


3-1121080660
Dyakon_Frost
2005-07-11 15:17
2005.08.21
Ошибка при выводе информации в DBGrid!


3-1121004029
Ling
2005-07-10 18:00
2005.08.21
Zeos и запрс из нескольких частей


1-1122906825
Starcom
2005-08-01 18:33
2005.08.21
Как в приложении вызвать процедуру для вывода изображения из RES




   Наверх