Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.10.02;
Скачать: CL | DM;

Вниз

Как TWinConontrol-у добавить свойств?   Найти похожие ветки 

 
Дмитрий С ©   (2011-06-07 08:38) [0]

Хочу добавить всем WinControl-ам свойство, но только в одном проекте. Так, чтобы их можно было редактировать через инспектор объектов на этапе проектирования. Есть идеи?


 
TUser ©   (2011-06-07 08:49) [1]

Положить локально свой модуль "Controls" или где там он описан. Ну или лучше все-таки, имхо, свой модель MyWinControl сделать и добавить его во все uses.


 
TUser ©   (2011-06-07 08:50) [2]

лучше бы я жевал, чем говорил ))


 
OW ©   (2011-06-07 08:56) [3]

путей легких не вижу
думаю, что если и возможно, то наверное, лучше будет все же найти иное решение

а зачем все танцы эти нужны, если не секрет?


 
oxffff ©   (2011-06-07 09:01) [4]

Есть.


 
Омлет ©   (2011-06-07 09:03) [5]

И как только люди умудряются придумывать себе такие интересные задачи ))


 
oxffff ©   (2011-06-07 09:05) [6]

1. Патч метакласса Twincontrol

Offset Type Description
-76 Pointer pointer to virtual method table (or nil)
-72 Pointer pointer to interface table (or nil)
-68 Pointer pointer to Automation information table (or nil)
-64 Pointer pointer to instance initialization table (or nil)
-60 Pointer pointer to type information table (or nil)
-56 Pointer pointer to field definition table (or nil)
-52 Pointer pointer to method definition table (or nil)
-48 Pointer pointer to dynamic method table (or nil)
-44 Pointer pointer to short string containing class name
-40 Cardinal instance size in bytes
-36 Pointer pointer to a pointer to ancestor class (or nil)
-32 Pointer pointer to entry point of SafecallException method (or nil)
-28 Pointer entry point of AfterConstruction method
-24 Pointer entry point of BeforeDestruction method
-20 Pointer entry point of Dispatch method
-16 Pointer entry point of DefaultHandler method
-12 Pointer entry point of NewInstance method
-8 Pointer entry point of FreeInstance method
-4 Pointer entry point of Destroy destructor
0 Pointer entry point of first user-defined virtual method
4 Pointer entry point of second user-defined virtual method
... ... ...


 
OW ©   (2011-06-07 09:07) [7]


> oxffff ©   (07.06.11 09:01) [4]
>
> Есть.

и прям с дизайнером? т.е. в ОО у любого появится?
как? (если твой путь короткий)
переписывать иерархию, пусть фиктивными классами, не выход


 
oxffff ©   (2011-06-07 09:07) [8]

2. Патч метода VMT Twincontrol.DefineProperties;
Это легче.


 
Дмитрий С ©   (2011-06-07 09:14) [9]


> oxffff ©   (07.06.11 09:07) [8]

В инспекторе поле появится в deign-time? - в этом вобщем то вся задача, а так проще хелпер сделать.


 
oxffff ©   (2011-06-07 09:15) [10]

Если нужно дополнительное поле, то и патч

-40 Cardinal instance size in bytes


 
OW ©   (2011-06-07 09:19) [11]


> И как только люди умудряются придумывать себе такие интересные
> задачи ))

легко,
от непродуманности логики, в первую очередь.
Захватив tag сразу, как число, для некоего флага, потом понадобился еще флаг. А кода уже столько и такого не структурного, безобразного, что разбираться было уже долго. У самого такая же мысль возникла.
Вывод прост - писать надо как можно лучше, всегда :)
даже когда кажется, что задача разовая и сиюминутная


 
OW ©   (2011-06-07 09:20) [12]

ну так примерно и думал, но никогда не лазил туда.
ИШ как то обмолвился в чем-то подобном, ну ваш покорный сразу и полез было, но и также сразу бросил.
Сложно и не очевидная выгода. Имхо, конечно.


 
oxffff ©   (2011-06-07 09:23) [13]


> Дмитрий С ©   (07.06.11 09:14) [9]
>
> > oxffff ©   (07.06.11 09:07) [8]
>
> В инспекторе поле появится в deign-time? - в этом вобщем
> то вся задача, а так проще хелпер сделать.


Терпение и патчи в нужных местах.
Твоя задача пропатчить design time Twincontrol.

>проще хелпер сделать.

И куда ты его?


 
oxffff ©   (2011-06-07 09:27) [14]


> oxffff ©   (07.06.11 09:15) [10]
> Если нужно дополнительное поле, то и патч
>
> -40 Cardinal instance size in bytes


Чтобы не патчить у каждого компонента
-40 Cardinal instance size in bytes

Жестко патчим код Tobject.NewInstance:TObject;
поскольку в основном никто не перекрывает.


 
Дмитрий С ©   (2011-06-07 09:28) [15]


> oxffff ©   (07.06.11 09:23) [13]


Ну я вобщем как-то так сейчас сделал, ибо править TWinControl рука не поднимается:


 TWinControlEditorData = class (TComponent)
 private
   FFieldName: String;
   FFieldType: TFieldType;
 end;

 TWinControlEditor = class helper for TWinControl
 private
   function GetData: TWinControlEditorData;
 public
   procedure SetupField(AFieldName: String; AFieldType: TFieldType);
 end;

function TWinControlEditor.GetData: TWinControlEditorData;
var
 I: Integer;
begin
 for I := 0 to Pred(ComponentCount) do
   if Components[I] is TWinControlEditorData then
   begin
     Result := Components[I] as TWinControlEditorData;
     Exit;
   end;
 Result := TWinControlEditorData.Create(Self);
end;

procedure TWinControlEditor.SetupField(AFieldName: String; AFieldType: TFieldType);
begin
 with GetData do
 begin
   FFieldName := AFieldName;
   FFieldType := AFieldType;
 end;
end;



 
Дмитрий С ©   (2011-06-07 09:29) [16]


> oxffff ©   (07.06.11 09:27) [14]

Иногда кажется, что ваши знания мешают вам более просто мыслить:) (надеюсь обратил внимание на смайл)


 
oxffff ©   (2011-06-07 09:35) [17]


> Дмитрий С ©   (07.06.11 09:28) [15]


Какой то очень странный код.


 
Дмитрий С ©   (2011-06-07 09:49) [18]


> oxffff ©   (07.06.11 09:35) [17]
> Какой то очень странный код.

Аргументируй, любая критика приветствуется :)


 
oxffff ©   (2011-06-07 09:55) [19]

Не принимая в расчет семантику твоего решения.

Mem leaks


> Result := TWinControlEditorData.Create(Self);



> procedure TWinControlEditor.SetupField(AFieldName: String;
>  AFieldType: TFieldType);
> begin
>  with GetData do
>  begin
>    FFieldName := AFieldName;
>    FFieldType := AFieldType;
>  end;
> end;


 
oxffff ©   (2011-06-07 10:03) [20]


> oxffff ©   (07.06.11 09:55) [19]
> Не принимая в расчет семантику твоего решения.
>
> Mem leaks


Sorry. Я не так понял видимо. mem leak нет.


 
oxffff ©   (2011-06-07 10:06) [21]


> Дмитрий С ©   (07.06.11 09:29) [16]
>
> > oxffff ©   (07.06.11 09:27) [14]
>
> Иногда кажется, что ваши знания мешают вам более просто
> мыслить:)


Есть такой момент.



Страницы: 1 вся ветка

Текущий архив: 2011.10.02;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.015 c
2-1307739095
Gu
2011-06-11 00:51
2011.10.02
Использование модулей в Uses


15-1307426451
RWolf
2011-06-07 10:00
2011.10.02
File timestamps backup/restore


2-1308084530
nord13579
2011-06-15 00:48
2011.10.02
GSM-шлюз на Huawei E1550 и voice модеме - проблемы с передачей зв


15-1307392194
Юрий
2011-06-07 00:29
2011.10.02
С днем рождения ! 7 июня 2011 вторник


15-1307548488
Rouse_
2011-06-08 19:54
2011.10.02
Может и боян, но все-же хочется поделиться ссылочкой :)