Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Непонятная ошибка


Автор: denisg729 11.9.2012, 09:24
Подскажите пожалуйста, где ошибка в этом коде
Код

procedure btnFndClick(Sender: TObject); 
var dt: TDateTime;
begin            
    if (me1.Text <> '') and (not TryStrToDate(me1.EditText,dt)) then
    begin    
        errorMsg('Ошибка ввода даты выдачи!');        
        exit;
    end;


*me1 - TMaskEdit

Вылетает ошибка
http://s1.ipicture.ru/

Автор: kami 11.9.2012, 09:58
me1 указывает в никуда.

Возможные причины (навскидку):
1. me1 не создан 
2. был вызов me1.Free, соответственно me1 уничтожен, а ссылка на него не обnilена

Автор: lomaster 11.9.2012, 10:17
Цитата
procedure btnFndClick(Sender: TObject); 

Так нельзя.

Автор: Rennigth 15.9.2012, 22:22
Цитата(lomaster @  11.9.2012,  10:17 Найти цитируемый пост)

Так нельзя. 

Почему?  Кто мне запретит? smile 

Автор: lomaster 15.9.2012, 23:12
Запретить никто не может, но и работать не будет.
Потому что процедуры на события имеют семантику как : .. of object. А это обязывает.

Автор: kami 15.9.2012, 23:23
Цитата(lomaster @  15.9.2012,  23:12 Найти цитируемый пост)
но и работать не будет

Займусь немножко буквоедством smile
ТС нигде не сказал, что это обработчик события. Посему такое вполне имеет место быть:

Код

implementation
var
  me: TMaskEdit;
...
procedure btnFndClick(Sender: TObject);
...

initialization
  btnFndClick(nil);

Другое дело, что подобное можно отнести к $%#коду.

Автор: Rennigth 15.9.2012, 23:35
Цитата(lomaster @  15.9.2012,  23:12 Найти цитируемый пост)
А это обязывает. 

Рекомендует, советует, ..., но никак не обязывает.
Код

type
  TForm1 = class(TForm)
    btn1: TButton;
    procedure FormCreate(Sender: TObject);
  end;
var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure btnFndClick(Sender: TObject);
begin
  ShowMessage('ляляля');
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  lbtnClickEvent: TNotifyEvent;
begin
  TMethod(lbtnClickEvent).Code := @btnFndClick;
  TMethod(lbtnClickEvent).Data := nil;
  btn1.OnClick := lbtnClickEvent;
end;



Я понимаю что это "не хорошо", но в редких случаях такое приходиться делать.

Автор: lomaster 15.9.2012, 23:35
kami, Ну это понятно.. тогда где весь код? а предположил исходя из предложенного(!). Можно кончно было написать - "а где весь код", но  уже спросили в 1 посте
Цитата

Другое дело, что подобное можно отнести к $%#коду. 
 А тут и спорить не с чем ;)

Добавлено через 3 минуты и 8 секунд
Цитата

 TMethod(lbtnClickEvent).Code := @btnFndClick;
 Ну вот, как и говорил, нельзя так...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)