![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Направление ввода в TEdit
rotor © (2006-07-22 20:09:00)Возможно ли без API-изгибов осуществить ввод ч.-л. в TEdit или TCustomEdit справа (как в калькуляторе)?
GrayFace (2006-07-24 01:12:00) [1]А зачем
TEdit = class(TRightEdit), а неTEdit = TRightEdit?
Джо (2006-07-23 22:02:00) [2]> [14] default © (23.07.06 12:31)
А, понятно, спасибо. Однако, опасно, ИМХО. Хоть и удобно иногда.
default (2006-07-23 17:46:00) [3]после 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...
Anatoly Podgoretsky (2006-07-23 13:23:00) [4]В ТНТ таких мест много, сначала сбивает с толку.
Fay (2006-07-23 12:58:00) [5]
TRightEdit = class(TEdit)
...
TEdit = class(TRightEdit);
Проверил.
Никогда не думал, что такой финт прокатит. 8)
default (2006-07-23 12:31:00) [6]Джо © (23.07.06 06:44) [9]
TEdit = class(TRightEdit);
означает в принципе тоже что и написано -
TEdit отныне и навсегда есть потомок TRightEdit
эта запись эквивалента записи
TEdit = class(TRightEdit)
end;
если потом создавать экземпляры TEdit они будут фактически экземплярами TRightEdit
то есть если была бы у нас написана куча кода с TEdit и потребовалось изменить функциональность TEdit, нам не пришлось бы везде TEdit править на TRightEdit
Zeqfreed (2006-07-23 12:31:00) [7]> [12] Fay © (23.07.06 12:25)
Ну если кинуть на форму несколько эдитов и вписать код из [1] над объявлением формы, то все эдиты станут с правым выравниванием.
Fay (2006-07-23 12:25:00) [8]2 Zeqfreed © (23.07.06 11:29) [11]
> А TEdit = class(TRightEdit) это чтобы не создавать новый
> компонент, а изменять стандартные, объявленые ниже.
Не понял
Zeqfreed (2006-07-23 11:29:00) [9]> [9] Джо © (23.07.06 06:44)
В паблик это я на «автомате», виноват. А TEdit = class(TRightEdit) это чтобы не создавать новый компонент, а изменять стандартные, объявленые ниже.
Fay (2006-07-23 08:08:00) [10]2 Джо © (23.07.06 6:44) [9]
Точно, прикольно! 8)
Джо (2006-07-23 06:44:00) [11]Ребят, специально для люмпенов вроде меня: зачем его тащить в паблик и зачем
TEdit = class(TRightEdit);
?
Palladin (2006-07-22 23:36:00) [12]
> определен виртуально
еклмн... определен виртуальным, конечно... :)
Palladin (2006-07-22 23:35:00) [13]
> palva © (22.07.06 20:58) [2]
Хм. Ну о наследовании в документации очень даже говорится. А метод TWinControl.CreateParams определен виртуально отнюдь не двусмысленно.
rotor (2006-07-22 23:20:00) [14]Zeqfreed_ (22.07.06 20:25) [1]
Слов нет - круто.
Данке!
Ketmar (2006-07-22 22:18:00) [15]говорится.
Мефисто (2006-07-22 21:42:00) [16]
> palva © (22.07.06 20:58) [2]
В исходниках VCL сплошь и рядом, где необходимо изменить стили окон/контролов :)
Zeqfreed (2006-07-22 21:23:00) [17]> [2] palva © (22.07.06 20:58)
Не буду лукавить, способ я подсмотрел у Игоря Шевченко. Надо у него спросить :)
palva (2006-07-22 20:58:00) [18]Zeqfreed_ (22.07.06 20:25) [1]
Блеск!
А интересно, где-то в документации говорится о таком способе наследования?
Zeqfreed_ (2006-07-22 20:25:00) [19]
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;
Не такой уж и «изгиб».