제가 만들려는 프로그램이 여러폼을 가지고 있는데,
폼에 사용되는 툴바의 버튼에 지정되는 비트맵들이 동일합니다.
그래서, 이 비트맵들을 dll의 리소스로 만들고, dll에서 이 리소스의 handle를 return하는 함수 GetBitmap을 만들었습니다.
그런데, 직접 툴바버튼의 Glyph의 handle에 함수로부터 넘겨받은 handle을
직접지정하면 첫번째로 지정되는 버튼에는 반영이 되나, 둘째버튼부터 아무런 반응도 나타나질 않더군요.
근데, 누군가가 이 핸들을 비트맵에 지정하고 이 비트맵을 이용하라 하여서
그런 코드를 짜버렸는데 에러가 납니다. ("Bitmap image is not valid")
...
procedure SetBtnImg;
var
b: TBitmap;
begin
b := TBitmap.Create;
b.handle := GetBitmap('P100');
btnA100.Glyph.Assign(b);
b.handle := GetBitmap('P101');
btnA101.Glyph.Assign(b);
b.handle := GetBitmap('P101'); <- 여기서 에러가 납니다.
btnB101.Glyph.Assign(b);
b.Free;
end;
...
뭐가 문제까요?
델파이 헬프에도 나와 있는데 그렇게 직접 핸들을 억세스하는 것은 에러를 야기시킬수 있다는 군요...
툴바를 쓰신다면 이미지리스트를 쓰시면 될거같군요...
비트맵핸들을 지정하고 또 다시 Assign을 사용할 바에야 각각의 비트맵을 로드하는 것하고 아무런 차이가 없는거 같은데요. 이런건 자원 공유라고 하기는 쪼금 힘들거 같은데...
제생각에는 이런식으로 자원을 공유가 된다고 해도 그 효과는 아주 미미하리라 생각되는군요...
그냥 LoadFromResource등의 메소드를 이용해서 리소스에서 읽어들이세요...
^^ 항상 즐코하세요...