![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Курсор в Memo [D6, WinXP]
Ross © (2002-05-02 14:26:00)Здравствуйте. Подскажите, как в Memo при нажатии правой кнопки мыши поместить курсор в слово над котором находится курсор (то же самое как происходит с левой кнопкой мыши).
Спасибо.
Song (2002-05-11 20:48:00) [1]procedure TForm1.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Caption:=IntToStr(HiWord(TMemo(Sender).Perform(EM_CHARFROMPOS,0,MakeLParam(X,Y)))+1);
end;
Song (2002-05-11 20:36:00) [2]Да нет. Вы не поняли.
Где Вы взяли X и Y?
Они у Вас берутся от дурака. И результат возвращается не в координатах, а как результат от Perform
Ross (2002-05-11 20:31:00) [3]Делаю так:
procedure TForm1.Memo2Click(Sender: TObject);
var
x,y:integer;
begin
Memo2.Perform(EM_CHARFROMPOS,0,MakeLParam(x,y));
showmessage(inttostr(x)+"+"+inttostr(y));
end;
Вот результат независимо от места где происходит клик:
4486928+1244712
Song (2002-05-11 20:20:00) [4]А что тут не понять. Вы посылаете сообщение на TMemo, а Вам возращается номер строки над которой находится курсор мыши, координаты которого X и Y
Ross (2002-05-11 20:13:00) [5]To Song
Вы не можете мне объяснить более детально:
Memo2.Perform(EM_CHARFROMPOS,0,MakeLParam(x,y));
мне трудно понять Help.
Извините.
Спасибо.
Song (2002-05-11 19:38:00) [6]EM_CHARFROMPOS
Ross (2002-05-11 19:35:00) [7]To Song
Спасибо. Вот именно с пунктом 1 не могу справиться. Поэтому я хотел поместить курсор в слово, потом читать направо и налево до первого пробела, и тем самым определить слово. Но по моему это слишком окружно. Где-то я видел пример, но не помню.
Спасибо.
Song (2002-05-11 19:16:00) [8]1. Определите позицию в Memo, над которым TPopup всплыло.
2. Определите слово в этой строке.
Ross (2002-05-11 19:03:00) [9]To All: Спасибо большое. Это вариант, но мне нужно немножко другое: Есть мемо. При нажатии на правую кнопку мыши выпадает PopupMenu1, с словом над котором находится мышка. Я попробовал разделить это на части:
1. поместить курсор в слово.
2. "Вытащить" слово.
3. Добавить в Меню.
Может кто это уже делал, или знает как, помогите!
Заранее очень благодарен.
Malder (2002-05-03 12:01:00) [10]Almaz, ты чертовски прав ! Я тоже хотел так сделать, только немного по другому и не получилось... вот блин, торможу...
Almaz (2002-05-03 01:40:00) [11]
> Malder © (02.05.02 14:33)
> Сложный вопрос. Надо смотреть исходники TMemo и переделывать
> их...
Чего там переделывать ???? Зачем исходники ???? Все гораздо проще - обратите внимание на вопрос - там практически уже дан ответ : "Подскажите, как в Memo при нажатии правой кнопки мыши поместить курсор в слово над котором находится курсор ( то же самое как происходит с левой кнопкой мыши)."
> Ross © (02.05.02 14:26)
Необходимо создать наследника TMemo. Вот так:
type
TNoRightClickMemo = class(TMemo)
procedure WMRButtonDown(var Message: TMessage); message WM_RBUTTONDOWN;
procedure WMRButtonUp(var Message: TMessage); message WM_RBUTTONUP;
end;
...
procedure TNoRightClickMemo.WMRButtonUp(var Message: TMessage);
begin
with Message do
Result := SendMessage(Handle, WM_LBUTTONUP, wParam, lParam);
end;
procedure TNoRightClickMemo.WMRButtonDown(var Message: TMessage);
begin
with Message do
Result := SendMessage(Handle, WM_LBUTTONDOWN, wParam, lParam);
end;
А теперь можно либо поместить его в палитру компонент, либо просто динамически вставлять в форму.
Удачи.
Malder (2002-05-03 01:07:00) [12]Нет. Хитро не получилось =( Придется действительно смотреть исходники TMemo.
Только вот у меня вопрос - а нафига тебе это надо ? Что-то трудно придумать ситуацию, зачем все это нужно...
Malder (2002-05-02 20:51:00) [13]Ross, хотя можно хитро поступить... сейчас некогда, подумаю - скажу, не отчаивайся =)
Song (2002-05-02 18:16:00) [14]Нет таких функций.
Ross (2002-05-02 17:47:00) [15]
to Malder: Спасибо.
To All: Все-таки, может есть какая нибудь функция... Может кто нибудь знает?
Malder (2002-05-02 14:33:00) [16]Сложный вопрос. Надо смотреть исходники TMemo и переделывать их...