Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.05.23;
Скачать: [xml.tar.bz2];

Вниз

Курсор в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
1-73241
TPavel
2002-05-10 10:02
2002.05.23
Перемещение файла


4-73435
sammy
2002-03-19 08:25
2002.05.23
Как закрыть другое приложение?


1-73113
Lesha
2002-05-12 21:44
2002.05.23
Меню как в IE


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


1-73134
MisterBin
2002-05-12 12:23
2002.05.23
Каким образом можно осуществить такую подсказку:





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский