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

Вниз

Дабл Клик в Memo   Найти похожие ветки 

 
Vdovin-AV@yandex.ru   (2002-09-20 13:51) [0]

Народ как прогдамно в Memo симетировать "Дабл Клик" мышки,
т.е. надо установить курсор на слово сдедать "Дабл Клик"
и чтобы слово выделилось, только все это надо сделать при
помощи кода...


 
Alx2   (2002-09-20 13:58) [1]

>Vdovin-AV@yandex.ru (20.09.02 13:51)

Надо выделить, или именно сымитировать выделение мышкой?

Если просто выделить, то может, лучше использовать
Memo.SelStart и Memo.SelLength для выделения текста?



 
Vdovin-AV@yandex.ru   (2002-09-20 14:12) [2]

Надо именно выделить.
При помощи Memo.SelStart и Memo.SelLength я это
уже сделал и вроде работает, но мне ненравится этот
корявый подход... Хотелось бы узнать как это реализованно
в Memo.
Задача вообщем состоит в том, члобы по горячей клавише
выделялось слово в Memo на котором находится курсор...


 
Separator   (2002-09-20 14:13) [3]

В мемо так и сделано.

Програмно вызвать DblClick очень просто. Сначало сделай обрабочик этого события:

procedure TForm1.Memo1DblClick(Sender: TObject);
begin
//Что-то делать
end;

а потом:

procedure TForm1.Button1Click(Sender: TObject(;
begin
Memo1DblClick(Memo1)
end


 
Separator   (2002-09-20 14:17) [4]

Еще в TMemo усть такое свойство:
property CaretPos: TPoint read GetCaretPos write SetCaretPos;


 
qube   (2002-09-20 14:24) [5]

Ну ничего себе корявый подход! Выделить с пом. SelStart -- это коряво, а вот сымитировать double click -- другое дело :). Ну, тогда предлагаю вариант:

SendMessage(Memo1.Handle,WM_MBUTTONDBLCLK,MK_LBUTTON, Y shl 16 or X);


 
Рыжик   (2002-09-20 14:34) [6]

TMemo по DoubleClick-у делает Select, а не по Select-у генерирует DoubleClick. Вызывать DoubleClick только для того, чтобы сделать Select - гораздо более коряво, чем использовать SelStart & SelLength.


> Separator © (20.09.02 14:13)

Это не есть иммитация DoubleClick-а. Это вызов обработчика этого события. Selection при этом не изменится.


 
Vdovin-AV@yandex.ru   (2002-09-20 14:37) [7]

to qube:
пробовал
SendMessage(Memo1.Handle,WM_MBUTTONDBLCLK,MK_LBUTTON, Y shl 16 or X);
чего-то не выделяется...
--------------------------------------------------------------------------------


 
qube   (2002-09-20 14:40) [8]

да это шутка была, хотя должно работать...
а вместо Y и Х у тебя что?


 
Separator   (2002-09-20 14:40) [9]

> Рыжик
А я и не писал при имитацию дблклика, я писал как вызвать его обработчик
>Vdovin-AV@yandex.ru
а зачем тебе выделять именно DblClick?


 
Vdovin-AV@yandex.ru   (2002-09-20 14:47) [10]

Для Рыжика:
Корявость не в использовании SelStart и SelEnd и т.п.,
а в определении начала и конца слова в текущей позиции текста.
А по DoubleClick Memo это делает самостоятельно.
Так зачем изобретать велосипед ?


 
Separator   (2002-09-20 14:50) [11]

Один совет:
Нажми Ctrl+TMemo.SelStart и Ctrl+TMemo.SelLength


 
Vdovin-AV@yandex.ru   (2002-09-20 14:51) [12]

to qube:
X, Y это координаты курсора в Memo.


 
qube   (2002-09-20 14:57) [13]

Шутка вышла неудачная. У меня тоже не работает :(. Думаю..


 
Alx2   (2002-09-20 15:35) [14]

На клавишу F2 выделяется слово на котором стоит курсор в Memo3
Предупреждаю: в коде много мусора :) Писал урывками :)

procedure TForm1.Memo3KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
const
CharSet = ["a".."z", "A".."Z", "А".."Я", "а".."я","0".."9"];
var Start, LineNum, Cols, Count: Integer;
S: string;
begin
if key = vk_f2 then
begin
Start := -1;
Memo3.Perform(EM_GETSEL, integer(@Start), 0);
if Start > -1 then
begin
LineNum := memo3.Perform(EM_LINEFROMCHAR, Start, 0);
if (LineNum >= 0) and (LineNum < Memo3.Lines.Count) then
begin
Cols := Start - memo3.Perform(EM_LINEINDEX, LineNum, 0);
if Cols > 0 then
begin
S := Memo3.Lines[LineNum];
if Cols > Length(S) then Cols := Length(S);
while (Cols > 0) and (S[Cols] in CharSet) do begin dec(Cols); dec(Start); end;
Memo3.selstart := Start;
Count := 0;
inc(Cols);
while (Cols <= length(S)) and (S[Cols] in CharSet) do
begin
inc(Cols);
inc(Count);
end;
Memo3.SelLength := Count;
end;
end;
end;
end;
end;




 
Alx2   (2002-09-20 16:00) [15]

>Vdovin-AV@yandex.ru (20.09.02 14:12)
Исправил парочку глюков. Теперь вроде-бы все политкорректно :)

procedure TForm1.Memo3KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
const
CharSet = ["a".."z", "A".."Z", "А".."Я", "а".."я","0".."9"];
var Start, LineNum, Cols, Count: Integer;
S: string;
begin
if key = vk_f2 then
begin
Start := -1;
Memo3.Perform(EM_GETSEL, integer(@Start), 0);
if Start > -1 then
begin
LineNum := memo3.Perform(EM_LINEFROMCHAR, Start, 0);
if (LineNum >= 0) and (LineNum < Memo3.Lines.Count) then
begin
Cols := Start - memo3.Perform(EM_LINEINDEX, LineNum, 0);
if Cols >= 0 then
begin
S := Memo3.Lines[LineNum];
if Cols > Length(S) then Cols := Length(S);
while (Cols > 0) and (S[Cols] in CharSet) do begin dec(Cols); dec(Start); end;
Memo3.selstart := Start;
Count := 0;
inc(Cols);
while (Cols <= length(S)) and (S[Cols] in CharSet) do
begin
inc(Cols);
inc(Count);
end;
Memo3.SelLength := Count;
end;
end;
end;
end;
end;



 
Kibitzer   (2002-09-20 17:09) [16]


> Alx2 © (20.09.02 16:00)
> Исправил парочку глюков. Теперь вроде-бы все политкорректно :)

Действительно работает. Даже лучше чем DblClick у TMemo - меня всегда раздражало что TMemo выделяет кроме слова и пробелы после него :(
Этот кусок кода я себе сохраню :)))



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

Форум: "Основная";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
6-8106
Beglec
2002-07-31 11:25
2002.10.03
По моему тематику про интернет пора выделить


1-8045
Itap
2002-09-22 15:58
2002.10.03
Быстрый поиск в RichEdit


1-7949
Ionv
2002-09-24 07:57
2002.10.03
Помогите с фурье преобразованиями


3-7817
Старик
2002-09-12 11:01
2002.10.03
Запрос


14-8115
Anatoly Podgoretsky
2002-09-07 03:15
2002.10.03
Что нового в Delphi 7





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