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

Вниз

Курсор в Memo   Найти похожие ветки 

 
Ross ©   (2002-05-02 14:26) [0]

Здравствуйте. Подскажите, как в Memo при нажатии правой кнопки мыши поместить курсор в слово над котором находится курсор (то же самое как происходит с левой кнопкой мыши).
Спасибо.


 
Malder ©   (2002-05-02 14:33) [1]

Сложный вопрос. Надо смотреть исходники TMemo и переделывать их...


 
Ross ©   (2002-05-02 17:47) [2]


to Malder: Спасибо.
To All: Все-таки, может есть какая нибудь функция... Может кто нибудь знает?


 
Song ©   (2002-05-02 18:16) [3]

Нет таких функций.


 
Malder ©   (2002-05-02 20:51) [4]

Ross, хотя можно хитро поступить... сейчас некогда, подумаю - скажу, не отчаивайся =)


 
Malder ©   (2002-05-03 01:07) [5]

Нет. Хитро не получилось =( Придется действительно смотреть исходники TMemo.
Только вот у меня вопрос - а нафига тебе это надо ? Что-то трудно придумать ситуацию, зачем все это нужно...


 
Almaz ©   (2002-05-03 01:40) [6]


> 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 12:01) [7]

Almaz, ты чертовски прав ! Я тоже хотел так сделать, только немного по другому и не получилось... вот блин, торможу...


 
Ross ©   (2002-05-11 19:03) [8]

To All: Спасибо большое. Это вариант, но мне нужно немножко другое: Есть мемо. При нажатии на правую кнопку мыши выпадает PopupMenu1, с словом над котором находится мышка. Я попробовал разделить это на части:
1. поместить курсор в слово.
2. "Вытащить" слово.
3. Добавить в Меню.

Может кто это уже делал, или знает как, помогите!
Заранее очень благодарен.


 
Song ©   (2002-05-11 19:16) [9]

1. Определите позицию в Memo, над которым TPopup всплыло.
2. Определите слово в этой строке.


 
Ross ©   (2002-05-11 19:35) [10]

To Song
Спасибо. Вот именно с пунктом 1 не могу справиться. Поэтому я хотел поместить курсор в слово, потом читать направо и налево до первого пробела, и тем самым определить слово. Но по моему это слишком окружно. Где-то я видел пример, но не помню.
Спасибо.


 
Song ©   (2002-05-11 19:38) [11]

EM_CHARFROMPOS


 
Ross ©   (2002-05-11 20:13) [12]

To Song
Вы не можете мне объяснить более детально:
Memo2.Perform(EM_CHARFROMPOS,0,MakeLParam(x,y));
мне трудно понять Help.
Извините.
Спасибо.


 
Song ©   (2002-05-11 20:20) [13]

А что тут не понять. Вы посылаете сообщение на TMemo, а Вам возращается номер строки над которой находится курсор мыши, координаты которого X и Y


 
Ross ©   (2002-05-11 20:31) [14]

Делаю так:

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:36) [15]

Да нет. Вы не поняли.
Где Вы взяли X и Y?
Они у Вас берутся от дурака. И результат возвращается не в координатах, а как результат от Perform


 
Song ©   (2002-05-11 20:48) [16]

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;



Страницы: 1 вся ветка

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

Наверх




Память: 0.5 MB
Время: 0.015 c
3-73032
vopros
2002-04-26 12:13
2002.05.23
Как инсталяшку сдлать с бaзой Access?


3-73054
serg72
2002-04-27 10:19
2002.05.23
ADO (dBase) как создать цифрофое поле определ.размера.


1-73153
VJar
2002-05-13 20:59
2002.05.23
Программное перемещение фокуса


3-73039
rvs1
2002-04-26 16:01
2002.05.23
Dbgrid ---- пустая дата=01.01.0001


1-73284
xrip
2002-05-11 01:26
2002.05.23
Как сделать глобальные хоткеи?