Главная страница
    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.49 MB
Время: 0.051 c
15-1152793731
Yeg
2006-07-13 16:28
2006.08.13
Siemens AT Commands


2-1154001896
DprYg
2006-07-27 16:04
2006.08.13
Флаг синхронизации, семафор, событие


4-1145464471
Интересующийся
2006-04-19 20:34
2006.08.13
Открытие Word-овского файла


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


15-1153386030
SerJaNT
2006-07-20 13:00
2006.08.13
БЛС





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский