![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Design Time
dima_shapkin © (2004-09-09 16:17:00)Подскажите как в Design Time получить список указателей на все компоненты в проекте или хотя бы на формы?
dima_shapkin (2004-09-10 13:14:00) [1]Да я уже все понял, спасибо ToolIntf.pas forever....
FOX (2004-09-10 12:29:00) [2]Посмотри описание интерфейса TIToolServices в модуле ToolIntf.pas
dima_shapkin (2004-09-10 10:50:00) [3]Вот... Вот...
Так я же и про то :)))) ну вот ищу и не могу ничего путного найти...
Erik1 (2004-09-10 10:35:00) [4]Тебе совсем другое надо, в delphi есть спецальный интерфейсы для работы с модулями и формами проекта. Название из головы вылетело вобщем посмотри IFormDesigner и пр..
dima_shapkin (2004-09-10 10:18:00) [5]Люди, люди...
Не я это придумал, просто нужно средство позволяющее ускорить процесс разработки. Либо просто вызывается пункт меню в Дельфе или просто кидается компонент, где запускается некий код из ObjIns или из конт. меню этого компонента. "Код" просматривает все компоненты в проекте, находит нужные и собирает необходимый код, копируя все это безобразие в буфер, откуда это просто вставляется в нужное место модуля. ВСЕ!!!!
Если компонент лежит на форме, то есенно без проблем
Owner.Components, а вот с другими формами?
Хм, в Run Time то все Easy, но хочется сделать то нормально, что бы все это можно было в Design Time.
Application.Components в Design Time дает все объекты самой среды Delphi, поэтому не могу ничего придумать....
Zeqfreed (2004-09-09 19:27:00) [6]2Дима Шапкин:
Можно получить дескрипторы хоть у чего и хоть в какое время. Достаточно либо перебирать все окна EnumWindows / EnumChildWindows либо юзать что-нибудь типа WindowFromPoint / ChildWindowFromPoint... но необходимо учесть, что при запуске проги дескрипторы изменятся. Если требуется что-то сделать с окнами на форме просто для забавы, видимо такой способ подойдет.
Если я неправильно что-то понял, прошу меня извинить.
Mim1 (2004-09-09 19:24:00) [7]На понт взять пытаешся? Ну чтож, ябычно отвечаю когда меня на понт берут, только в конце ЛМД дописываю, не обессудь.
Вот процедура иницияализации одного из редакторов
procedure TWndRelEdit.Init;
Procedure AddItems(const n: TTreeNode; const rl:TCkgRel);
var i:Integer;
s : string;
nn:TTreeNode;
begin
for i:= 0 to rl.Count -1 do
begin
if rl[i].DataSet <> nil then
s := rl[i].DataSet.name + ' (' + rl[i].DataSet.TableName + ')'
else
s := '{[------]}';
nn := TreeView1.Items.AddChildObject(n,s,rl[i]);
AddItems(nn,rl[i].SubRelations);
end;
end;
Procedure AddChilds(const c:TComponent);
var i:integer;
begin
for i:= 0 to c.ComponentCount-1 do
begin
if c.Components[i] is TCkgDocCtrlBar then
ComboBox2.Items.AddObject(c.Components[i].Name, c.Components[i]);
AddChilds(c.Components[i]);
end;
end;
var i:Integer;
begin
if Relation = nil then exit;
if cmp = nil then exit;
TreeView1.Items.BeginUpdate;
try
AddItems(nil,Relation);
TreeView1.FullExpand;
finally
TreeView1.Items.EndUpdate;
end;
for i:= 0 to cmp.Owner.ComponentCount -1 do
if cmp.Owner.Components[i] is TCkgDataSet then
ComboBox1.Items.AddObject(cmp.Owner.Components[i].Name +
' (' + TCkgDataSet(cmp.Owner.Components[i]).TableName + ')',
cmp.Owner.Components[i]);
AddChilds(cmp.Owner);
end;
LMD
Anton_K (2004-09-09 19:14:00) [8]Ню ню, это вам дед мороз сказал?
Такой умный? Тогда ответь на вопрос ("Подскажите как в Design Time получить список указателей на все компоненты в проекте или хотя бы на формы?").
Mim1 (2004-09-09 19:10:00) [9]
> [8] Anton_K © (09.09.04 18:56)
Ню ню, это вам дед мороз сказал?
dima_shapkin (2004-09-09 19:08:00) [10]А когда кидаешь компонент на форму, это что красивая картинка????
Anton_K (2004-09-09 18:56:00) [11]Указатели на объекты можно получить только в Run Time!
dima_shapkin (2004-09-09 18:32:00) [12]Запущено приложение delphi32.exe, там загружен некий проект, абсолютно любым способом получить указатели на объекты(компоненты), которые присутствуют в проекте....
Блин, только не спрашивайте зачем это нужно....
dima_shapkin (2004-09-09 18:22:00) [13]1. При запуске метода из контекстного меню комопнента в design time
2. Либо при вызове визарда, эксперта, да хоть exe!!!!!!!!!!!!!! какая разница..........................
Erik1 (2004-09-09 17:54:00) [14]А может стоит задуматся над ответом? Проверочный вопрос задать, где ты собираешся пробегатся и в какой момент?
Варианты:
1) На дереве во время гнездования.
2) В программе во время выполнения
3) В форме во время помещения компонента на форму.
4) В Wizard (спец случай).
dima_shapkin (2004-09-09 17:39:00) [15]Причем здесь мой или не мой компонент?
Как "пробежаться" по всем компонентам, которые присутствуют в проекте в design time????
Erik1 (2004-09-09 17:31:00) [16]В DesignTime может работать например твой компонент. У него есть конструктор в нем бывает стоит такая проверка:
if (csDesigning in ComponentState) then
Как ты думаеш, что это значить?
dima_shapkin (2004-09-09 17:04:00) [17]Гаврила
И как позвольте узнать?
Гаврила (2004-09-09 16:54:00) [18]Так же, как и в Run Time