Dein Problem 1 sollte sich auch mit einem normalen Button und der Nachricht BM_SETSTATE, mit der du das Klicken simulieren kannst, lösen lassen.
Das sieht dass etwa so aus:
Delphi-Quellcode:
procedure TForm1.Button2MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
{$j+}bPushed : Boolean = True;{$j-}
begin
if FindVCLWindow(Mouse.CursorPos) = TButton(Sender) then
begin
Button2.Perform(BM_SETSTATE,Ord(bPushed),0);
bPushed := not bPushed;
end;
end;