Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при удалении Edit. [D7, WinXP]


Black_Tomcat ©   (2007-09-07 19:58:00) 

У меня возникла не большая проблемка. :-) Решение другое придумать можно, но просто интересно, что происходит.
Дело в том, что на EditOnChange Editнормально удаляется, а на OnEditKeyDownудаляется, но после окончания происходит ошибка "Access violation at address XXXXXXXX. Read of address XXXXXXXX". Вот то, что я написал.


procedure TCfgForm.PosHorLDblClick(Sender: TObject);
var Edit:TEdit;
begin
Edit:=TEdit.Create(Nil);

Edit.SetBounds(label2.Left-3,Labe2.Top-3,Label2.Width,Label2.Height);
Edit.Text:=PosHorL.Caption;
Edit.Tag:=1;
PrevPosition:=PosHorSB.Position;

Edit.OnChange:=EditOnChange;
Edit.OnKeyPress:=EditOnKeyPress;
Edit.OnKeyDown:=EditOnKeyDown;

Edit.Parent:=GroupBox4;
Edit.SetFocus;
end;

procedure TCfgForm.EditOnKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
Case key of
VK_ESCAPE:Case TEdit(Sender).Tag of
           1:begin
               PosHorSb.Position:=PrevPosition;
               TEdit(Sender).Free;
               Exit;
             end;
            2:begin
               PosVerSb.Position:=PrevPosition;
               TEdit(Sender).Free;
               Exit;
              end;
           end;
VK_RETURN:Case TEdit(Sender).Tag of
           1:begin
               TEdit(Sender).Free;
               Exit;
             end;
            2:begin
               TEdit(Sender).Free;
               Exit;
              end;
           end;
 end;
end;


MsGuns   (2007-09-08 22:40:00) [1]

Если динамический TEdit отображается в единственном числе, но в разных местах, лучше использовать "обычный" (т.е. созданный в дизайне), показывая его или пряча в нужный момент. В этом случае прятание лучше всего делать в его обработчике OnExit


Black_Tomcat   (2007-09-08 19:49:00) [2]

Большое спасибо.
Все понятно, буду убивать его чужими руками.


Вася Правильный   (2007-09-07 20:23:00) [3]

уничтожение объекта из собственного обработчика чревато


Инс   (2007-09-07 20:10:00) [4]

Однажды отвечал на похожий вопрос:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=46005


Наверх

Титульная страница Поиск, карта сайта Написать письмо