Странная обработка событий

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Странная обработка событий

Сообщение GAMER » 28.10.2008 20:24:57

Есть Edit. В событии OnExit делается Edit.Visible:=False;
Проблема. Если я редактирую Edit и при этом нажимаю Button, то при этом не срабатывает OnClick на этом батоне.
Проверял на версиях 0.9.25. Может уже пофиксили, тогда прошу прощения. Не было возможности обновиться.
В C++Builder (и наверное в Делфи) такой проблемы нет.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Странная обработка событий

Сообщение Владимир » 28.10.2008 21:33:46

Код в студию!

Добавлено спустя 2 часа 10 минут:
Проблема "передачи" фокуса есть. Я был вынужден, например, отказаться от отслеживания нажатия нецифровых клавиш по OnKeyPress, чтобы штатно работала клавиша <Tab> - перемещение между компонентами.
Типа if not key in (...) then key=#27
Полагаю, что в твоем случае обработка OnClick "натыкается" на OnExit (могу ошибаться). К слову, знаю точно, что с обработчиками TBitButton есть проблемы - если на панели две таких кнопки,
одна с Kind:=bkOk, другая с Kind:=bkCancel - их поведение непредсказуемо. Выкинул из проекта....
Сухой остаток - под Lazarus надо писать убойный код, чтобы работал - ни Delphi, ни Kylih здесь не помощники!
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Странная обработка событий

Сообщение GAMER » 30.10.2008 14:11:53

Делаем пример:
На форму кидаем Edit1, Button1, Label1, Label2.
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Edit1Exit(Sender: TObject);
    procedure Label1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  Label1.Caption:='11';
  Edit1.Visible:=False;
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
  Edit1.Visible:=True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label2.Caption:='222';
end;

initialization
  {$I Unit1.lrs}

end.
           


Еще один прикол. При создании формы срабатывает событие OnExit для Edit1.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Странная обработка событий

Сообщение Владимир » 31.10.2008 19:47:39

У меня все нормально - при создании формы все спокойно, никаких OnExit не происходит.
Не очень понятно, где фокус при создании формы - я ставил и на кнопку, и на Edit - все штатно
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Странная обработка событий

Сообщение GAMER » 04.11.2008 13:53:55

Владимир писал(а):У меня все нормально - при создании формы все спокойно, никаких OnExit не происходит.
Не очень понятно, где фокус при создании формы - я ставил и на кнопку, и на Edit - все штатно

Как проверяли?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35

Рейтинг@Mail.ru