전에 올렸던 질문 내용 입니다.
아래에 에러가 발생하는 경우를 적어보았습니다.
------------------------------------------------------
디자인시 판넬위에 버튼 컴포넌트를 두고 자신을 클릭했을 경우
procedure TMainForm.Button1Click(Sender: TObject);
begin
Button1.Free; <-- 에러가 발생하지 않습니다.
end;
그런데 동적생성을 하고
NewBtn := TButton.Create(Self);
with NewBtn do begin
Parent := Panel1;
Name := 'Btn1';
Top := 100;
Left := 100;
Visible := True;
OnClick := NewBtnClick;
end;
procedure TMainForm.NewBtnClick(Sender: TObject);
begin
TButton(Sender).Free; <- Access Violation 에러 발생
end;
이유가 무엇일까요?
디자인시에 생성했던 버튼은 자신을 클릭시 Free가 가능하고
프로그램 실행시 동적생성했던 버튼은 자신을 클릭했을 때 Violation 에러가 발생하는데,
어떤 해결 방법이 없을까요?
한번 봐주세요.. ^^;;;
------------------------------------------------------------
에러 발생 이유
------------------------------------------------------------
위의 내용이 전에 질문드렸던 내용인데..
다른 님들은 실행하면 에러가 없었다고 하더라구요.. 이상해서 저두 깨끗한 폼에 똑같은 코딩으로 해보았더니 에러가 발생하지 않더군요.
이것저것 테스트를 하다보니 제가 만지던 폼에는 TSpeedButton 이 있었습니다.
그 스피드버튼의 Glyph 속성에 이미지를 넣었었는데 그것 때문에 에러가 발생하네요.
Glyph 속성의 이미지를 클리어 시키고 하면 에러가 발생하지 않습니다.
이미지를 불러올 수 있는 컴포넌트들(TImage,TSpeedButton,TBitBtn등)을 이미지 불러오지 않고 사용하면 에러가 발생하지 않습니다만,
이미지를 Glyph이나 Picture 속성에 불러오면 에러가 발생하네요.
물론 생성하는 버튼은 그냥 TButton이구요, 한폼에 위의 컴포넌트들에 이미지가 불려져 있으면 에러가 발생한다는겁니다.
무슨 이유인지 좀 부탁드립니다. 왜 그럴까요?
무척 궁금하네요....