Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.10.02;
Скачать: [xml.tar.bz2];

Вниз

Как 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.023 c
2-1307782174
Pepe
2011-06-11 12:49
2011.10.02
MPEG VBR


15-1307421536
Дмитрий С
2011-06-07 08:38
2011.10.02
Как TWinConontrol-у добавить свойств?


15-1306259758
R_R
2011-05-24 21:55
2011.10.02
Трехмерные шахматы


2-1308002107
And7
2011-06-14 01:55
2011.10.02
Edit и Skrollbar


2-1307627912
Сергей
2011-06-09 17:58
2011.10.02
Автообновление программы - Windows 7 ругается на "обновлятор"





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