![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос про Edit1.OnKeyPress (D7) [D7, XP]
vegarulez © (2009-09-10 13:16:00)привет всем мастерам!
Вопрос состоит в следующем.
Почему-то непонятно почему перестало отлавливаться событие нажатия Enter в Edit.
И причём что самое интересное изредка компилю - 1-ый раз бывает сработает. А дальше нивкакую, а бывает сразу не работает... в чём дело... не могу понять...
запускаю в отладчике и по нажатию Enter он вообще даже не выполняет никаких действий, т.е. даже не заходит в процедуру... не могу понять в чём тут трабла?...
if key=#13 then
Edit32.Text:='bla-bla-bla';
Причём раньше как бы всё нормуль было. внёс кое-какие изменения которые по сути никак не коснулись обработки нажатия Enter...
не могу понять в чём дело, раньше всё работало.
Какие могут быть мысли??? Предположения? Догадки? )
vegarulez (2009-09-23 07:51:00) [1]Удалено модератором
Примечание: п.10 и п.11
Сергей М. (2009-09-22 14:31:00) [2]Я жду отдельныеответы на вопросы 1 и 2
vegarulez (2009-09-22 14:29:00) [3]нет.
не поймал.
Ловится на всём на что жму, кроме ентера.
Сергей М. (2009-09-18 11:04:00) [4]Каша какая-то)..
Ставишь брейкпойнт
procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);// <-- сюда
begin
Запусти приложение.
Передай мышью фокус контролу Edit4.
Жми ENTER.
Вопрос №1: Поймал брейкпойнт ?
Теперь жми Button16, т.е. дай выполниться твоему коду, обращающемуся к Zeos.
Верни мышью фокус контролу Edit4, если он не в фокусе.
Жми ENTER.
Вопрос №2: Поймал брейкпойнт ?
vegarulez (2009-09-18 10:51:00) [5]
> Ты же ловишь все это хозяйство в том же самом обработчике,
> который якобы перестает вызываться после исполнения "проблемного"
> кода, работающего с Zeos..
Я говорю по нажатии ентера, но не заходит даже в обрботчик...
всмысле на if`ы которые проверяют char кея.
Т.е. он там не отлавливается. Все остальные отлавливаются.
Сергей М. (2009-09-18 10:14:00) [6]
> Enter не пашет на этом Edit
Как же он може "пахать", если ты утверждаешь, что
> даже не выполняется KeyPress
?
И коль скоро он не выполняется, то каким тогда волшебным образом у тебя
> отлавливаются и esc и backspace, и любые другие клавиши
?
Ты же ловишь все это хозяйство в том же самом обработчике, который якобы перестает вызываться после исполнения "проблемного" кода, работающего с Zeos..
vegarulez (2009-09-18 10:07:00) [7]KIS успешно борется с любым зверьём и выкусывание этого блока из кода тоже устраняет проблему. Только при его исполнении (этого блока) проблема остаётся. Без него всё рабит. С ним тоже всё рабит, всё пишется в БД всё пашет. Только Enter не пашет на этом Edit...
Сергей М. (2009-09-18 10:01:00) [8]
> только Reset устраняет проблему
Сдается мне, что у тебя на станции завелся зверь)
vegarulez (2009-09-18 09:26:00) [9]Даже если прогу перезапускаешь - всё равно. только Reset устраняет проблему.
vegarulez (2009-09-18 09:23:00) [10]Achpile © (17.09.09 22:40) [12]
Edit активен. При парсинге на Edit1.OnKeyPress отлавливаются и esc и backspace, и любые другие клавиши... А при нажатии Enter вообще ничего не происходит... т.е. if в OnKeyPress он вообще никак не реагирует... т.е. даже не выполняется KeyPress.
Срабатывает только первый раз - дальше не срабатывает. причём на другой форме Эдиты нормально работают. А этот не пашет пока комп не перегрузишь.
Achpile (2009-09-17 22:40:00) [11]Т.к. работает через раз, то обработчик может не срабатывать, если Edit неактивен... т.е. простыми словами в нем не мигает курсор...
Сергей М. (2009-09-17 12:30:00) [12]И то что без указания в uses юнита, где декларирован внешний (по отношению к тек.юниту) идентификатор, к которому осуществляется обращение, тек.юнит не м.б. скомпилирован - тоже не менее логично.
Сергей М. (2009-09-17 12:29:00) [13]
> Логично?
Логично.
И то что без указания в uses юнита, где декларирован внешний (по отношению к тек.юниту) идентификатор, к которому осуществляется обращение - тоже не менее логично.
vegarulez (2009-09-17 12:24:00) [14]clickmaker © (17.09.09 11:54) [7]
точно. Именно он.
Сергей М. © (17.09.09 12:04) [8]
Он бы тогда не работал и не записывал бы в базу. Логично? А код работает исправно пишет в базу всё, что требуется.
Сергей М. (2009-09-17 12:04:00) [15]
> всмысле в Unit1 есть включение Unit2.
Да мало ли чего там еще есть !
Это
> DataModule2.Zquery1.Sql
даже скомпилировано быть не может, если в unit1 в uses не указан юнит, где декларирован класс TZQuery, к св-ву Sql которого ты обращаешься.
До ран-тайма тут еще как до Китая)
clickmaker (2009-09-17 11:54:00) [16]> Вообщем вот такой кусочек. У кого какие мысли?
как может невизуальный компонент, да еще и для работы с базой, повлиять на обработчики чисто интерфейсных событий?
точно нет косяка в другом месте?
vegarulez (2009-09-17 11:49:00) [17]Ну всмысле в Unit1 есть включение Unit2.
Я забыл это указать. Но я думал это и так понятно.
Типа Form1 и Datamodule2.
Unit1
...
uses
..
unit2
...
Сергей М. (2009-09-17 09:40:00) [18]
> после использования Zeos компонент
Интересно, как ты умудрился к ним обратиться из юнита unit1, если
> в uses unit1 нет включений Zeos
?
vegarulez (2009-09-17 07:17:00) [19]После долгих копаний в коде, выкусывании блоков, пришёл вот к такому выводу... проблема происходит после использования Zeos компонент (Zquery) находящихся в datamodule2 (Unit2).
unit Unit2;
interface
uses
SysUtils, Classes, ZConnection, ZDataset, DB, ZAbstractRODataset,
ZAbstractDataset, ZAbstractTable;
...
Теперь собственно Form1 (unit1)
unit1
... // в uses unit1 нет включений Zeos: ZConnection, ZDataset, DB, ZAbstractRODataset, ZAbstractDataset, ZAbstractTable; Может просто следует их ещё сюда добавить?
procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
If Key=#13 then // типа нажат ентер
Begin
Button16.SetFocus;
Button16.Font.Style:=[fsbold,fsunderline];
End;
if (key=#8) and (length(Edit4.Text)=0) then // типа нажат backspace
Begin
Edit3.SetFocus;
Edit3.SelStart:=length(Edit3.Text);
End;
if Key=#27 then // типа нажат esc
Stock_CancelClick(Application);
end;
procedure TForm1.Button16Click(Sender: TObject);
begin
if length(Edit4.text)>0 then
Try
dt:=FormatDateTime('DD.MM.YYYY hh:mm:ss',Now());
try
if DataModule2.Zquery1.Active then
DataModule2.Zquery1.Close;
dbwork(Edit4.Text); // процедурка просто формирует prov[0,1]
{ // Блок после которого Enter не пашет, всё остальное работает и esc и backspase
DataModule2.Zquery1.Sql.Text:='insert into `t1` (`id`,`name`) values ('+prov[0]+','+prov[1]+')';
DataModule2.Zquery1.ExecSQL;
DataModule2.Zquery1.Sql.Text:='update `cfg` set `count_id`='+num+'';
DataModule2.Zquery1.ExecSQL;
}
Application.MessageBox(PChar('Отработало.'), 'Предупреждение',MB_ICONINFORMATION + MB_OK);
except
on E:Exception do
Begin
Application.MessageBox(PChar('Ошибка записи в базу данных!'+#10+E.message+#10+dt),PChar(Application.Title), MB_ICONWARNING + MB_OK);
DataModule2.ZQuery1.close;
End;
end; // try
Finally
Stock_CancelClick(Application);
End; // Try
end;
Вообщем вот такой кусочек. У кого какие мысли?
Медвежонок Пятачок (2009-09-10 13:32:00) [20]запускаю в отладчике и по нажатию Enter он вообще даже не выполняет никаких действий, т.е. даже не заходит в процедуру
Это называется в момент отладки или выполнения обработчик не присвоен свойству OnKeyPress