Форум: "Прочее";
Текущий архив: 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.004 c