baklanoid Опубликовано 31 октября, 2015 Поделиться Опубликовано 31 октября, 2015 Недавно начал изучать RAD Studio (C++Builder) и возник такой вопрос (из заголовка). Нужно, например, добавить некий стандартный код ко всем кнопкам. Если это возможно, дайте ссылку что почитать или объясните на пальцах - Спасибо! Цитата Ссылка на комментарий
0 baklanoid Опубликовано 1 ноября, 2015 Автор Поделиться Опубликовано 1 ноября, 2015 (изменено) Вроде для дельфи есть "class helpers" (http://docwiki.embarcadero.com/RADStudio/XE7/en/Class_and_Record_Helpers_%28Delphi%29), но у меня на билдере код. Изменено 1 ноября, 2015 пользователем baklanoid Цитата Ссылка на комментарий
0 magicxor Опубликовано 1 ноября, 2015 Поделиться Опубликовано 1 ноября, 2015 (изменено) Думаю, нужно что-то вроде этого: http://www.firststeps.ru/cbuilder/r.php?78 http://www.interface.ru/home.asp?artId=27410 Тут для старой версии IDE, но аналогию можно провести. P.S.: http://docwiki.embarcadero.com/RADStudio/Seattle/en/Creating_a_New_Component Изменено 1 ноября, 2015 пользователем magicxor baklanoid 1 Цитата Ссылка на комментарий
0 baklanoid Опубликовано 1 ноября, 2015 Автор Поделиться Опубликовано 1 ноября, 2015 Думаю, нужно что-то вроде этого: http://www.firststeps.ru/cbuilder/r.php?78 http://www.interface.ru/home.asp?artId=27410 Тут для старой версии IDE, но аналогию можно провести. P.S.: http://docwiki.embarcadero.com/RADStudio/Seattle/en/Creating_a_New_Component Да, спасибо, похоже это то что нужно.. Цитата Ссылка на комментарий
0 kami Опубликовано 2 ноября, 2015 Поделиться Опубликовано 2 ноября, 2015 (изменено) Вместо создания своих компонентов, можно воспользоваться таким трюком, который существует с незапамятных времен. На примере TEdit (используется в реальном проекте для ввода чисел - целых/дробных, положительных/отрицательных и не мешающий работе текстовых TEdit): 1. Создаем новый unit: unit uCustomEditForNumbers; interface uses System.Classes, FMX.Types, FMX.Edit; type TCustomEditForNumbers = class(FMX.Edit.TEdit) private FMaxLength: integer; protected procedure KeyDown(var Key: Word; var KeyChar: WideChar; Shift: TShiftState); override; public property MaxLength: integer read FMaxLength write FMaxLength; end; TEdit = class(TCustomEditForNumbers) // а вот он и трюк - теперь TEdit это не FMX.Edit.TEdit end; // а наш TCustomEditForNumbers implementation uses System.SysUtils; { TCustomEditForNumbers } procedure TCustomEditForNumbers.KeyDown(var Key: Word; var KeyChar: WideChar; Shift: TShiftState); var bAllowed: Boolean; s: string; Ch: WideChar; begin if FMaxLength > 0 then if Text.Length >= FMaxLength then if KeyChar <> #13 then KeyChar := #0; if KeyboardType = TVirtualKeyboardType.NumberPad then begin case Tag of 0: // беззнаковые целые bAllowed := (KeyChar >= '0') and (KeyChar <= '9'); 1: // знаковые целые. Надо бы проверять и положение каретки. begin s := Text; bAllowed := ((KeyChar >= '0') and (KeyChar <= '9')) or // ((KeyChar = '-') and (CaretPosition = 0) and (not s.Contains('-'))); end; 2: begin // беззнаковые Float s := Text; Ch := TFormatSettings.Create.DecimalSeparator; bAllowed := ((KeyChar >= '0') and (KeyChar <= '9')) or // ((KeyChar = Ch) and (not s.Contains(Ch))); end; 3: // знаковые Float begin s := Text; Ch := TFormatSettings.Create.DecimalSeparator; bAllowed := ((KeyChar >= '0') and (KeyChar <= '9')) or // ((KeyChar = '-') and (CaretPosition = 0) and (not s.Contains('-'))) or // ((KeyChar = Ch) and (not s.Contains(Ch))); end; else bAllowed := True; end; if not bAllowed then KeyChar := #0; end; inherited; end; 2. В uses формы/фрейма подключаем этот unit после штатного FMX.Edit Все. Новый функционал уже работает. P.S. Хоть пример и на Delphi, а не C++, но суть от этого не меняется, думаю. Изменено 2 ноября, 2015 пользователем kami baklanoid 1 Цитата Ссылка на комментарий
Вопрос
baklanoid
Недавно начал изучать RAD Studio (C++Builder) и возник такой вопрос (из заголовка).
Нужно, например, добавить некий стандартный код ко всем кнопкам.
Если это возможно, дайте ссылку что почитать или объясните на пальцах - Спасибо!
Ссылка на комментарий
4 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.