![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Редакторы компонент [D6, Win2k, WinXP]
DimaBr © (2005-10-25 12:07:00)Здравствуйте !
Пишу TComboBox + TStoredProc, где TStoredProc - субкомпонент. Нужно вывести на поверхность Field Editors. Как это сделать ?
DimaBr (2005-10-31 14:43:00) [1]
> Надо с поддержкой пакетов.
А в каком пакете его можно найти ?
Priest (2005-10-27 17:49:00) [2]Поэтому и не находит. Надо с поддержкой пакетов. А чтобы твой компонент не требовал пакетов, редактор компонента нужно в отдельном пакете клепать....
DimaBr (2005-10-27 15:47:00) [3]Priest © (27.10.05 11:26) [6]
Нет, конечно.
Priest (2005-10-27 11:26:00) [4]>>DimaBr
А ты редактор компонента билдишь с пакетами?
DimaBr (2005-10-27 08:52:00) [5]To Юрий Зотов.
Я так и пытался делать, но подключение модуля BDEReg.pas произвести не удаётся, поскольку ругается на отсутствие Report.dcu. Модет он уже скомпилирован в каком-нибудь пакете ?
Юрий Зотов (2005-10-27 03:39:00) [6]> Priest © (26.10.05 16:29) [3]
Тут другая задача. Там нужно было приспособить редактор свойства в качестве пункта меню редактора компонента, а здесь нужно приспособить редактор одного компонента к другому компоненту.
> DimaBr (26.10.05 10:46) [2]
Редактор компонента TStoredProc - все же не Fields Editor, а TStoredProcEditor (см. BDEReg.pas). Fields Editor - это лишь один из пунктов его меню.
Значит, пишем свой редактор компонента по аналогии с TStoredProcEditor, и регистрируем его для нашего компонента. Естественно, работать он должен с субкомпонентом.
Priest (2005-10-26 16:29:00) [7]Поищи здесь по форуму....Я задавал вопрос как вызвать редактор коллекции....Вот часть ветки
Юрий Зотов © (05.07.05 18:26) [2]
> Priest (05.07.05 18:03) [1]
А вот так можно вызвать редактор ЛЮБОГО свойства, не только коллекции (в данном примере это объектное свойство MyItems класса TMyComp).
type
TMyCompEditor = class(TComponentEditor)
private
FPropInfo: PPropInfo;
FPropEdit: IProperty;
procedure GetPropProc(const PropEdit: IProperty);
public
constructor Create(AComponent: TComponent; ADesigner: IDesigner); override;
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;
{ TMyCompEditor }
constructor TMyCompEditor.Create(AComponent: TComponent; ADesigner: IDesigner);
begin
inherited;
FPropInfo := GetPropInfo(GetComponent.ClassInfo, 'MyItems', [tkClass])
end;
procedure TMyCompEditor.ExecuteVerb(Index: Integer);
var
Selections: TDesignerSelections;
begin
if Index = GetVerbCount - 1 then
begin
if (FPropEdit = nil) and (FPropInfo <> nil) then
begin
Selections := TDesignerSelections.Create;
try
Designer.GetSelections(Selections);
GetComponentProperties(Selections, [tkClass], Designer, GetPropProc)
finally
Selections.Free
end
end;
if FPropEdit <> nil then
FPropEdit.Edit
end
else
inherited
end;
procedure TMyCompEditor.GetPropProc(const PropEdit: IProperty);
begin
if PropEdit.GetPropInfo = FPropInfo then
FPropEdit := PropEdit
end;
function TMyCompEditor.GetVerb(Index: Integer): string;
begin
if Index = GetVerbCount - 1 then
Result := 'MyItems Editor...'
else
Result := inherited GetVerb(Index)
end;
function TMyCompEditor.GetVerbCount: Integer;
begin
Result := inherited GetVerbCount + 1
end;
DimaBr (2005-10-26 10:46:00) [8]Fields Editor - редактор компонентаTStoredProc (очепяточка вышла). Помогите вынести его на поверхность ComboBox.
Юрий Зотов (2005-10-26 05:01:00) [9]Ни в TComboBox, ни в TStoredProc никаких полей обнаружить не удалось. Поэтому при чем тут редактор полей - пока что непонятно. Видимо, есть смысл уточнить вопрос.