Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.48 MB
Время: 0.041 c
15-1153239518
Kerk
2006-07-18 20:18
2006.08.13
Неофициальный news-сервер FIDO


15-1153094770
Ketmar
2006-07-17 04:06
2006.08.13
никому не нужен удалёный программист?


2-1153481890
WolfRamm
2006-07-21 15:38
2006.08.13
SQL Explorer


15-1152874737
NaLom
2006-07-14 14:58
2006.08.13
Блок инета


2-1153584581
rotor
2006-07-22 20:09
2006.08.13
Направление ввода в TEdit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский