В нашей компании мы используем очень мощного потомка TCustomButton.
Для нового приложения мне нужна кнопка, которая в основном ведет себя как «Speedbtn», у которой нет TabStop и, особенно, не крадет фокусдругих элементов управления, таких как, например, TEdit.Мне бы очень хотелось, если бы я мог просто манипулировать нашим потомком TCustomButton, чтобы мне не пришлось писать совершенно новый компонент кнопки, для которого мне пришлось бы реализовать много вещей, которые уже предлагает наш потомок TCustomButton (например,Корпоративный дизайн и т. Д.)
Я знаю, что это непростая задача, потому что, насколько я понимаю, решение о том, что нажатие на кнопку вызывает сообщение, чтобы сосредоточиться (что крадет фокус)Tedit), зависит от реестра в Windows ("TCustomButton.CreateParams" ??).
Если возможное решение слишком много взломать, я, вероятно, даже не буду использовать его в нашей системе,но я все еще был бы весьма заинтересован в этом, потому что я любопытный человек:).
В любом случае, вот мой пример: у меня есть TForm, который содержит только TEdit и потомка TCustomButton, который уже потерялфункциональность (которая изначально была потомком TButtonControl), чтобы получить фокус, если WM_LBUTTONDOWN или WM_LBUTTONDBLCLK появляется в WndProc.
type
TMyBtn = class (TCustomButton)
//
// ... A lot of self-written stuff
//
protected
procedure WndProc(var Message: TMessage); override;
public
//
// ... A lot of self-written Properties
//
end;
type
TForm2 = class(TForm)
Edit1: TEdit;
Button1: TMyBtn;
end;
implementation
procedure TMyBtn.WndProc(var Message: TMessage);
var
hProc : procedure (var Message: TMessage) of object;
begin
// Skip TButtonControl.WndProc and call
// TWinControl.WndProc instead if Message type
// is WM_LBUTTONDOWN or WM_LBUTTONDBLCLK
if not (csDesigning in ComponentState) then
begin
case Message.Msg of
WM_LBUTTONDOWN, WM_LBUTTONDBLCLK:
begin
TMethod(hProc).Code := @TWinControl.WndProc;
TMethod(hProc).Data := Self;
hProc( Message);
exit;
end;
end;
end;
inherited WndProc(Message);
end;
Что я могу сделать, чтобы TEdit не терял фокус, если TEdit имеет фокус, и я нажимаю на потомка TCustomButton (кроме отключения кнопки илипереориентация TEdit и т. д.)
Большое спасибо за любую помощь заранее.
Если мне не удалось правильно описать мой вопрос, не стесняйтесь задавать мне любые вопросы.