Как я могу создать Delphi TSpeedButton или SpeedButton в C# 2.0?
Я пытаюсь дублировать функцию «без фокуса», когда кто-то нажимает кнопку. Причина: я пытаюсь создать встроенную клавиатуру в приложении Windows. Эта клавиатура должна иметь возможность отправлять нажатие клавиши элементу управления, находящемуся в фокусе, до нажатия кнопки клавиатуры.





это помогает? Похоже, вам придется обрабатывать событие OnPaint, а не фокусироваться ...
Обычная кнопка .net 2.0 частично поддерживает функции TSpeedbutton:
Не обрабатывает:
Эти два связаны, вы можете унаследовать от кнопки и нарисовать ее владельцем, добавив функции «Вниз» и «Группировать».
Codeproject имеет пример кнопок владельца.
Мне интересно, хотите ли вы создать элемент управления, такой как TSpeedButton, или вам просто нужен такой же конечный результат ...
Программирование с нуля, безусловно, возможно, но я бы взялся за это только в качестве обучающего упражнения.
Предполагая, что вы хотите достичь аналогичного конечного результата ...
TSpeedButton Delphi отличался от стандартного TButton, который разработчики сочли полезным - он был плоским, не фокусировался и потреблял меньше ресурсов, чем обычная кнопка (поскольку у него не было базового дескриптора Windows).
Что из этого важно для вас?
Если вам просто нужна плоская кнопка, которая не принимает фокус, используйте обычную кнопку с FlatStyle = Flat (или PopUp) и TabStop = false. Вы можете настроить глиф, задав либо свойство Image, либо комбинацию ImageList и ImageIndex / ImageKey.
Альтернативой этому может быть поиск существующего компонента кнопки, который соответствует вашим потребностям - одним местом для поиска может быть Krypton Toolkit (бесплатное использование, см. http://www.componentfactory.com/toolkit_buttoncontrols.php).
Если вы хотите уменьшить количество ресурсов, потребляемых вашим приложением, скорее всего, вы получите лучшую отдачу, если будете искать в другом месте.
Еще во времена Windows 3.1 (Delphi 1) и Windows 95 (Delphi 2) количество доступных дескрипторов было строго ограничено с максимальным количеством доступных для всей системы. Сегодня, с Windows XP и Vista, количество доступных дескрипторов намного больше, и их количество приходится на процесс, а не на всю систему. Если вы не создадите тысячи и тысячи кнопок, вы вряд ли когда-нибудь приблизитесь к тому, чтобы закончиться.
Использование кнопки и установка для свойства TabStop значения false работает только при нажатии на форму ...
Если вам нужна (как и мне) кнопка, которая не выбирается при нажатии на нее, я нашел только один способ сделать это.
Я сделал это так, чтобы создать подкласс класса Button и в конструкторе, вызвав SetStyles и тем самым установив для Selectable значение false, например:
public class ButtonNoFocus : Button
{
public ButtonNoFocus()
: base()
{
base.SetStyle(ControlStyles.Selectable, false);
}
}
Это сработало для меня и идеально, если вы, например, есть панель управления с кнопками, выполняющими действия с выбранным объектом ...
Какие именно функции вы пытаетесь воспроизвести?