Форум: "Начинающим";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];
ВнизУправление с клавиатуры & Найти похожие ветки
← →
Johnnnnn (2009-09-30 09:42) [0]В общем, при добавлении к названию клавиши символа &, нажимая на букву которая стоит после символа & на клавиатуре, вызывается процедура привязанная к кнопке, как можно отключать и включать эту возможность, чтобы к примеру можно было в мемо что-то ввести? Первое что приходит на ум это убирать в цикле &, из названия кнопок, но как его потом расставлять обратно если он может быть в середине названия? Есть какое-то простое решение для этого?
← →
DrPass © (2009-09-30 09:47) [1]
> В общем, при добавлении к названию клавиши символа &, нажимая
> на букву которая стоит после символа & на клавиатуре, вызывается
> процедура привязанная к кнопке
А что, разве это как-то мешает вводить в мемо? Или как обычно, пишем о проблеме в форум после того, как ее придумал, а не после того, как она возникла?
← →
Johnnnnn (2009-09-30 10:02) [2]мешает, я незнаю почему но когда давно в универе учил делфи то там было про то что клавиши вызываются при нажатии ALT плюс символ после знака & у меня же почемуто оно срабатывает без ALT - пользуюсь Delphi 6
← →
sniknik © (2009-09-30 10:23) [3]> почемуто оно срабатывает без ALT
не надо есть варенье над клавиатурой, капнул и alt залип...
← →
DrPass © (2009-09-30 10:44) [4]
> Johnnnnn (30.09.09 10:02) [2]
> там было про то что клавиши вызываются при нажатии ALT плюс
> символ после знака & у меня же почемуто оно срабатывает
> без ALT - пользуюсь Delphi 6
Что, и когда текст в Memo вводишь, тоже срабатывают? Не ври
← →
Юрий Зотов © (2009-09-30 11:04) [5]> Johnnnnn (30.09.09 10:02) [2]
Срабатывание кнопки без Alt происходит, когда фокус ввода стоит на этой кнопке. Если же фокус ввода стоит в Memo, то кнопка срабатывает именно с Alt, поэтому мешать вводу в Memo она не может.
А включать/отключать акселераторы можно так:
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormDblClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FEnableAccelChars: boolean;
procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;
end;
implementation
{$R *.dfm}
var
i: integer = 0;
procedure TForm1.Button1Click(Sender: TObject);
begin
Inc(i);
Caption := IntToStr(i)
end;
procedure TForm1.CMDialogChar(var Message: TCMDialogChar);
begin
if FEnableAccelChars then
inherited
end;
procedure TForm1.FormDblClick(Sender: TObject);
begin
FEnableAccelChars := not FEnableAccelChars;
Caption := BoolToStr(FEnableAccelChars, True)
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FormDblClick(Sender)
end;
← →
Johnnnnn (2009-09-30 15:30) [6]
> А включать/отключать акселераторы можно так:
Спасибо вот как раз то что нужно. в мемо не мешает я не проверил у меня с webbrowserom неполучалось вводить я подумал что и с мемо такаяже ерунда. Спасибо еще раз.
← →
Johnnnnn (2009-09-30 16:30) [7]Нда видно рано я спасибо сказал чтото я немогу в этом коде разобраться можно както попроще нажал на кнопку акселераторы вырубились нажал еще раз включились?
← →
Johnnnnn (2009-09-30 18:56) [8]Эх разьяснил бы кто?
← →
Johnnnnn (2009-09-30 20:53) [9]В общем кому может пригодиться? Как говориться за неумной головою нет ногам покоя
var
ai:array of string;
delhotkeyrun:boolean;
procedure delhotkey();
var
i, i1, i2:integer;
s,s1,s2:string;
begin
i2:=0;
if (delhotkeyrun) then begin
delhotkeyrun:=false;
setlength(ai, form1.ComponentCount-1);
for i:=0 to form1.ComponentCount-1 do begin
if (form1.Components[i] is TButton) then begin
s:=(form1.Components[i] as TButton).caption;
for i1:=0 to length(s) do begin
s1:=s[i1];
if s1="&" then begin
ai[i2]:=(form1.Components[i] as TButton).name+"///"+s;
inc(i2);
s:=copy(s, 0, i1-1)+copy(s, i1+1, length(s));
break;
end;
end;
(form1.Components[i] as TButton).caption:=s;
end;
end;
end else begin
delhotkeyrun:=true;
for i:=0 to form1.ComponentCount-1 do begin
if (form1.Components[i] is TButton) then begin
for i1:=0 to length(ai)-1 do begin
s:=copy(ai[i1], 1, pos("///",ai[i1])-1);
s1:=copy(ai[i1], pos("///",ai[i1])+3, length(ai[i1]));
s2:=(form1.Components[i] as TButton).name;
if s=s2 then (form1.Components[i] as TButton).caption:=s1;
end;
end;
end;
end;
end;
initialization
delhotkeyrun:=true;
← →
Юрий Зотов © (2009-09-30 21:51) [10]> Johnnnnn (30.09.09 16:30) [7]
> чтото я немогу в этом коде разобраться
Это плохо - код-то ведь очень простой. Делайте выводы - наверное, самое время книжки по Delphi полистать?
> можно както попроще
Проще уж некуда. Кстати, Ваш вариант сложнее, а кроме того он отключает только кнопки и не позволяет включить их обратно.
> нажал на кнопку акселераторы вырубились нажал еще раз включились
Вот именно это у меня и происходит при двойном щелчке по самой форме.
← →
Johnnnnn (2009-09-30 22:03) [11]Насчет книжек согласен только когда их читать... Я просто понять не могу что именно там отключает его по всей видимости эта процедура CMDialogChar но ее вызова я нигде не нашел... Вот только что собрал новый проэкт с вашим кодом, да все работает в том у меня почемуто когда жал shift+cntl+c выдавало кауюто ошибку на етой процедуре procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR; я ее и так и так а она нивкакую:) А то что я скинул у меня работает и на вкл и на выкл.
← →
Юрий Зотов © (2009-09-30 23:14) [12]> Johnnnnn (30.09.09 22:03) [11]
> Насчет книжек согласен только когда их читать...
На поиск и скачку книги Тейксейры и Пачеко уйдет 15 минут. На ее чтение - неделя. А на программирование и "вслепую" (как сейчас) Вы потратите годы. Так что выгоднее?
> что именно там отключает его по всей видимости эта процедура
> CMDialogChar но ее вызова я нигде не нашел.
И не найдете. Это процедура обработки сообщения CM_DIALOGCHAR, которое получает форма при нажатии любого акселератора. Она вызывается неявно, поэтому искать ее вызов бесполезно, этот механизм надо просто знать - вот, кстати, для чего нужны книжки.
> у меня почемуто когда жал shift+cntl+c выдавало кауюто ошибку
Когда ошибка перестанет быть "какой-то", а будет прочитан и понят ее текст - тогда станет ясна и ее причина. У меня никаких ошибок не возникает. Возможно, потому, что у меня на форме нет ничего, кроме кнопки, а у Вас есть еще что-то - вот это "что-то" и дает ошибку.
← →
Johnnnnn (2009-10-01 15:49) [13]Спасибо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c