Форум: "Начинающим";
Текущий архив: 2009.11.08;
Скачать: [xml.tar.bz2];
ВнизВопрос про Edit1.OnKeyPress (D7) Найти похожие ветки
← →
vegarulez © (2009-09-10 13:16) [0]привет всем мастерам!
Вопрос состоит в следующем.
Почему-то непонятно почему перестало отлавливаться событие нажатия Enter в Edit.
И причём что самое интересное изредка компилю - 1-ый раз бывает сработает. А дальше нивкакую, а бывает сразу не работает... в чём дело... не могу понять...
запускаю в отладчике и по нажатию Enter он вообще даже не выполняет никаких действий, т.е. даже не заходит в процедуру... не могу понять в чём тут трабла?...if key=#13 then
Edit32.Text:="bla-bla-bla";
Причём раньше как бы всё нормуль было. внёс кое-какие изменения которые по сути никак не коснулись обработки нажатия Enter...
не могу понять в чём дело, раньше всё работало.
Какие могут быть мысли??? Предположения? Догадки? )
← →
Сергей М. © (2009-09-10 13:18) [1]Мысль одна - ты внес одному тебе известные "кое-какие изменения", которые, якобы, "никак не коснулись обработки нажатия Enter", а они взяли да "коснулись")
← →
clickmaker © (2009-09-10 13:20) [2]> могут быть мысли??? Предположения? Догадки?
Form.KeyPreview = true?
Form.OnKeyPress?
← →
Медвежонок Пятачок © (2009-09-10 13:32) [3]запускаю в отладчике и по нажатию Enter он вообще даже не выполняет никаких действий, т.е. даже не заходит в процедуру
Это называется в момент отладки или выполнения обработчик не присвоен свойству OnKeyPress
← →
vegarulez © (2009-09-17 07:17) [4]После долгих копаний в коде, выкусывании блоков, пришёл вот к такому выводу... проблема происходит после использования 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-17 09:40) [5]
> после использования Zeos компонент
Интересно, как ты умудрился к ним обратиться из юнита unit1, если
> в uses unit1 нет включений Zeos
?
← →
vegarulez © (2009-09-17 11:49) [6]Ну всмысле в Unit1 есть включение Unit2.
Я забыл это указать. Но я думал это и так понятно.
Типа Form1 и Datamodule2.Unit1
...
uses
..
unit2
...
← →
clickmaker © (2009-09-17 11:54) [7]> Вообщем вот такой кусочек. У кого какие мысли?
как может невизуальный компонент, да еще и для работы с базой, повлиять на обработчики чисто интерфейсных событий?
точно нет косяка в другом месте?
← →
Сергей М. © (2009-09-17 12:04) [8]
> всмысле в Unit1 есть включение Unit2.
Да мало ли чего там еще есть !
Это
> DataModule2.Zquery1.Sql
даже скомпилировано быть не может, если в unit1 в uses не указан юнит, где декларирован класс TZQuery, к св-ву Sql которого ты обращаешься.
До ран-тайма тут еще как до Китая)
← →
vegarulez © (2009-09-17 12:24) [9]clickmaker © (17.09.09 11:54) [7]
точно. Именно он.
Сергей М. © (17.09.09 12:04) [8]
Он бы тогда не работал и не записывал бы в базу. Логично? А код работает исправно пишет в базу всё, что требуется.
← →
Сергей М. © (2009-09-17 12:29) [10]
> Логично?
Логично.
И то что без указания в uses юнита, где декларирован внешний (по отношению к тек.юниту) идентификатор, к которому осуществляется обращение - тоже не менее логично.
← →
Сергей М. © (2009-09-17 12:30) [11]И то что без указания в uses юнита, где декларирован внешний (по отношению к тек.юниту) идентификатор, к которому осуществляется обращение, тек.юнит не м.б. скомпилирован - тоже не менее логично.
← →
Achpile © (2009-09-17 22:40) [12]Т.к. работает через раз, то обработчик может не срабатывать, если Edit неактивен... т.е. простыми словами в нем не мигает курсор...
← →
vegarulez © (2009-09-18 09:23) [13]Achpile © (17.09.09 22:40) [12]
Edit активен. При парсинге на Edit1.OnKeyPress отлавливаются и esc и backspace, и любые другие клавиши... А при нажатии Enter вообще ничего не происходит... т.е. if в OnKeyPress он вообще никак не реагирует... т.е. даже не выполняется KeyPress.
Срабатывает только первый раз - дальше не срабатывает. причём на другой форме Эдиты нормально работают. А этот не пашет пока комп не перегрузишь.
← →
vegarulez © (2009-09-18 09:26) [14]Даже если прогу перезапускаешь - всё равно. только Reset устраняет проблему.
← →
Сергей М. © (2009-09-18 10:01) [15]
> только Reset устраняет проблему
Сдается мне, что у тебя на станции завелся зверь)
← →
vegarulez © (2009-09-18 10:07) [16]KIS успешно борется с любым зверьём и выкусывание этого блока из кода тоже устраняет проблему. Только при его исполнении (этого блока) проблема остаётся. Без него всё рабит. С ним тоже всё рабит, всё пишется в БД всё пашет. Только Enter не пашет на этом Edit...
← →
Сергей М. © (2009-09-18 10:14) [17]
> Enter не пашет на этом Edit
Как же он може "пахать", если ты утверждаешь, что
> даже не выполняется KeyPress
?
И коль скоро он не выполняется, то каким тогда волшебным образом у тебя
> отлавливаются и esc и backspace, и любые другие клавиши
?
Ты же ловишь все это хозяйство в том же самом обработчике, который якобы перестает вызываться после исполнения "проблемного" кода, работающего с Zeos..
← →
vegarulez © (2009-09-18 10:51) [18]
> Ты же ловишь все это хозяйство в том же самом обработчике,
> который якобы перестает вызываться после исполнения "проблемного"
> кода, работающего с Zeos..
Я говорю по нажатии ентера, но не заходит даже в обрботчик...
всмысле на if`ы которые проверяют char кея.
Т.е. он там не отлавливается. Все остальные отлавливаются.
← →
Сергей М. © (2009-09-18 11:04) [19]Каша какая-то)..
Ставишь брейкпойнтprocedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
// <-- сюда
begin
Запусти приложение.
Передай мышью фокус контролу Edit4.
Жми ENTER.
Вопрос №1: Поймал брейкпойнт ?
Теперь жми Button16, т.е. дай выполниться твоему коду, обращающемуся к Zeos.
Верни мышью фокус контролу Edit4, если он не в фокусе.
Жми ENTER.
Вопрос №2: Поймал брейкпойнт ?
← →
vegarulez © (2009-09-22 14:29) [20]нет.
не поймал.
Ловится на всём на что жму, кроме ентера.
← →
Сергей М. © (2009-09-22 14:31) [21]Я жду отдельные ответы на вопросы 1 и 2
← →
vegarulez © (2009-09-23 07:51) [22]Удалено модератором
Примечание: п.10 и п.11
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.11.08;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.006 c