Форум: "Начинающим";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
ВнизНаправление ввода в TEdit Найти похожие ветки
← →
rotor (2006-07-22 20:09) [0]Возможно ли без API-изгибов осуществить ввод ч.-л. в TEdit или TCustomEdit справа (как в калькуляторе)?
← →
Zeqfreed_ (2006-07-22 20:25) [1]
type
TRightEdit = class(TEdit)
public
procedure CreateParams(var Params : TCreateParams); override;
end;
TEdit = class(TRightEdit);
. . .
implementation
{$R *.dfm}
{ TRightEdit }
procedure TRightEdit.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_RIGHT;
end;
Не такой уж и «изгиб».
← →
palva © (2006-07-22 20:58) [2]Zeqfreed_ (22.07.06 20:25) [1]
Блеск!
А интересно, где-то в документации говорится о таком способе наследования?
← →
Zeqfreed © (2006-07-22 21:23) [3]> [2] palva © (22.07.06 20:58)
Не буду лукавить, способ я подсмотрел у Игоря Шевченко. Надо у него спросить :)
← →
Мефисто (2006-07-22 21:42) [4]
> palva © (22.07.06 20:58) [2]
В исходниках VCL сплошь и рядом, где необходимо изменить стили окон/контролов :)
← →
Ketmar © (2006-07-22 22:18) [5]говорится.
← →
rotor (2006-07-22 23:20) [6]Zeqfreed_ (22.07.06 20:25) [1]
Слов нет - круто.
Данке!
← →
Palladin © (2006-07-22 23:35) [7]
> palva © (22.07.06 20:58) [2]
Хм. Ну о наследовании в документации очень даже говорится. А метод TWinControl.CreateParams определен виртуально отнюдь не двусмысленно.
← →
Palladin © (2006-07-22 23:36) [8]
> определен виртуально
еклмн... определен виртуальным, конечно... :)
← →
Джо © (2006-07-23 06:44) [9]Ребят, специально для люмпенов вроде меня: зачем его тащить в паблик и зачем
TEdit = class(TRightEdit);
?
← →
Fay © (2006-07-23 08:08) [10]2 Джо © (23.07.06 6:44) [9]
Точно, прикольно! 8)
← →
Zeqfreed © (2006-07-23 11:29) [11]> [9] Джо © (23.07.06 06:44)
В паблик это я на «автомате», виноват. А TEdit = class(TRightEdit) это чтобы не создавать новый компонент, а изменять стандартные, объявленые ниже.
← →
Fay © (2006-07-23 12:25) [12]2 Zeqfreed © (23.07.06 11:29) [11]
> А TEdit = class(TRightEdit) это чтобы не создавать новый
> компонент, а изменять стандартные, объявленые ниже.
Не понял
← →
Zeqfreed © (2006-07-23 12:31) [13]> [12] Fay © (23.07.06 12:25)
Ну если кинуть на форму несколько эдитов и вписать код из [1] над объявлением формы, то все эдиты станут с правым выравниванием.
← →
default © (2006-07-23 12:31) [14]Джо © (23.07.06 06:44) [9]
TEdit = class(TRightEdit);
означает в принципе тоже что и написано -
TEdit отныне и навсегда есть потомок TRightEdit
эта запись эквивалента записи
TEdit = class(TRightEdit)
end;
если потом создавать экземпляры TEdit они будут фактически экземплярами TRightEdit
то есть если была бы у нас написана куча кода с TEdit и потребовалось изменить функциональность TEdit, нам не пришлось бы везде TEdit править на TRightEdit
← →
Fay © (2006-07-23 12:58) [15]
TRightEdit = class(TEdit)
...
TEdit = class(TRightEdit);
Проверил.
Никогда не думал, что такой финт прокатит. 8)
← →
Anatoly Podgoretsky © (2006-07-23 13:23) [16]В ТНТ таких мест много, сначала сбивает с толку.
← →
default © (2006-07-23 17:46) [17]после TClass2 = class(TClass1) верно TClass2=TClass1
но если надо вернуть прежний смысл имени класса?
можно использовать промежуточную "переменную"
TBuffClass = class(TClass2);
TClass2 = class(TClass1);
TClass2 = class(TBuffClass) - всё вернулось на прежние позиции
забавно, но запутать код этим можно дай боже!
TMemo = class(TEdit);
TTest = class
FObj: TMemo;
constructor Create;
end;
var
Form1: TForm1;
O: TTest;
implementation
{$R *.dfm}
constructor TTest.Create;
begin
FObj := TMemo.Create(Form1);
FObj.Left := 50;
FObj.Top := 50;
FObj.Parent := Form1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
O := TTest.Create // вылезит TEdit:)
end;
жалко, что работает только в пределах модуля:(
то есть если я поменяю какой-нибудь TCustomForm на TEdit
а этот CustomForm использует компонент из другого модуля, но будет юзаться всё-таки TCustomForm...
← →
Джо © (2006-07-23 22:02) [18]> [14] default © (23.07.06 12:31)
А, понятно, спасибо. Однако, опасно, ИМХО. Хоть и удобно иногда.
← →
GrayFace © (2006-07-24 01:12) [19]А зачем
TEdit = class(TRightEdit)
, а неTEdit = TRightEdit
?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.051 c