Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.08;
Скачать: CL | DM;

Вниз

Вопрос про 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.016 c
2-1253104843
mfender
2009-09-16 16:40
2009.11.08
Кодировка XML


8-1199266718
ТупойПрограммер
2008-01-02 12:38
2009.11.08
Запись миди файла


2-1253681952
Ksandr
2009-09-23 08:59
2009.11.08
Access без ODBC... как...???


15-1252485162
brother
2009-09-09 12:32
2009.11.08
Бутовая флешка


15-1252299382
Andy BitOff
2009-09-07 08:56
2009.11.08
Java