Форум: "Основная";
Текущий архив: 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