linka i due eventi del bottone onMouseDown e onMouseUp allo stesso evento e scrivi;
var img : Tbitmap;
begin
img:=TBitmap.Create;
if Shift = [ssLeft]
then img.LoadFromFile('C:\Programmi\Borland\Images\Butt ons\bookopen.bmp')
else img.LoadFromFile('C:\Programmi\Borland\Images\Butt ons\bookshut.bmp');
BitBtn1.Glyph:=img;
forse è il caso di crearti due variabili di istanza che crei e carici una sola volta, cmq come ti ho scritto funziona... poi vedi tu.
Se hai problemi sono qua.