Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-1120723440
Kerk
2005-07-07 12:04
2005.08.21
Что люди ищут :)


1-1122984669
mazepa
2005-08-02 16:11
2005.08.21
progress


8-1113616597
Ivanov
2005-04-16 05:56
2005.08.21
Image из .pak - файла


1-1122271364
Korvet
2005-07-25 10:02
2005.08.21
Как сделать таймер из Label


4-1119339646
ANB
2005-06-21 11:40
2005.08.21
Что передать в качестве окна для SetForegroundWindow ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский