![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как заставить TEdit не генерить звуковой сигнал при включенном обработчике нажатий клавиш. [D5, NT4]
voronkov © (2001-12-18 12:27:00)Утомил этот трабл и не знаю как бороться. В TEdit использую обработчик нажатий клавиш OnKeyDown. Ловлю нажатия клавиш типа Enter, Escape и прочих. После нажатия таких клавиш звучит звуковой сигнал. Если стоит звуковая карта, то сигнал из набора звуковой схемы, если не стоит, то работает динамик компьютера. Пользователи воют, я сижу с ними, вою тоже. Лезть внутрь компьютеров и отрубать динамики кажется мне неспортивным. Как это затоптать?
cdaDmitriy (2001-12-18 16:15:00) [1]> panov © забыл ООП
делаешь новый компонент ( T..Edit ) один раз
procedure KeyPress(var Key: Char); override;
и его используешь
panov (2001-12-18 16:12:00) [2]>cdaDmitriy © (18.12.01 15:32)
Каждому прописываешь имя этого обработчика.
voronkov (2001-12-18 16:06:00) [3]Чуваки, всем спасибо. Не пищит комбинация с
case key of
#13: begin
...
end;
else key:=#0;
End;
в OnKeyPress, правда немного непривычно работать с этим событием, так как привык работать с константами типа VK_...
К сожалению я пишу программу с большим объемом ручного ввода и зачастую разные TEdit должны по разному реагировать на одни и теже клавиши, в противном случае можно пользоваться событиями формы. Так что ООП тут не спасает отца русской демократии.
cdaDmitriy (2001-12-18 15:32:00) [4]>> panov ©
забыл KeyPreview:=true;
и вопрос что ты будешь делать если на форме /проекте 10 ..n TEdit ?
забыл ООП
panov (2001-12-18 15:27:00) [5]И не забудь выставить
TfDocEdit.KeyPreview := True;
panov (2001-12-18 15:26:00) [6]Попробуй вот так:
procedure TfDocEdit.FormKeyPress(Sender: TObject; var Key: Char);
begin
if (Key = #27) then
begin
Key:=#0;
if (fDocEdit.ActiveControl is TEdit) then
begin
TEdit(fDocEdit.ActiveControl).Text := vPrevValue;
TEdit(fDocEdit.ActiveControl).Modified := False;
end;
end;
if (Key = #13) then
begin
Key:=#0;
Perform(WM_NEXTDLGCTL,0,0);
end;
end;
cdaDmitriy (2001-12-18 15:22:00) [7]work ?
Dmitriy(new) (2001-12-18 14:29:00) [8]TMyEdit= class(TEdit)
...
procedure KeyPress(var Key: Char); override;
...
End;
procedure TMyEdit.KeyPress(var Key: Char);
begin
case key of
#1..#12,#14..#26,#28..#255:;
else key:=#0;
End;
End;
и не "пищат".
voronkov (2001-12-18 13:19:00) [9]Пробовал вставлять в OnKeyUp key := 0, проблема осталась. Ну елы-палы, что типа делать?
Владислав (2001-12-18 13:19:00) [10]> Виктор Щербаков © (18.12.01 13:09)
Не "пищит", однако?
Еще что-нибудь придумаешь?
:)))
Виктор Щербаков (2001-12-18 13:09:00) [11]Попробуй Ctrl + S например :)
Владислав (2001-12-18 13:06:00) [12]> Виктор Щербаков © (18.12.01 13:04)
Да, но они, слава богу, и не "пищат".
Виктор Щербаков (2001-12-18 13:04:00) [13]to Владислав ©
Из хэлпа:
Keys that don"t correspond to an ASCII Char value (Shift or F1, for example) don"t generate an OnKeyPress event.
Teacher (2001-12-18 13:02:00) [14]Обрабатываю OnKeyUp, ничего не делаю кроме присвоения #0 при получении кодов, обрабатываемых в OnKeyDown.
Владислав (2001-12-18 12:58:00) [15]Так какие проблемы?
Нужно добавить OnKeyPress и Key:=#0;
Виктор Щербаков (2001-12-18 12:42:00) [16]А как быть с OnKeyDown? Недавно была такая же проблема.
Пришлось использовать RichEdit.
Anatoly Podgoretsky (2001-12-18 12:36:00) [17]Извини ошибка, думал об OnKeyPress
Anatoly Podgoretsky (2001-12-18 12:34:00) [18]Key:=#0