Автор: X11
Дата сообщения: 04.08.2010 14:19
Подскажите, как лучше и правильнее сделать?
Мне нужно узнать активный компонент. Это может быть cxGrid, DBGridEh или др. грид.
После того, как я узнаю, я выполняю импорт в датасет, привязанный к этому компоненту.
Проблема с cxGrid`ом.
Щёлкаю по строке грида, т.к. включено свойство ImmediateEditor, то я сразу попадаю как бы в редактор.
Поэтому
ShowMessage(ActiveControl.ClassName);
выдаёт мне TcxCustomInnerTextEdit
Теперь, собственно, вопрос! Как узнать, к какому cxGrid`у или к какому cxGridTableView относится этот самый cxCustomInnerTextEdit?
ShowMessage(ActiveControl.Parent.ClassName); выдаёт TcxMaskEdit
Если выполнить TcxCustomInnerTextEdit(ActiveControl).Hide;
то этот код
ShowMessage(ActiveControl.ClassName);
потом даёт AV, т.к. получается, что никакой компонент на форме не активен.
Добавлено:
Правильным ли будет такой код
ActiveControl.Parent.Parent.ClassName
или есть более гибкие и правильные решения?
Добавлено:
Пока что сделал так. Если есть решение получше, буду весьма благодарен.
Код: if ((ActiveControl is TDBGridEh) or (ActiveControl is TFibExTreeView) or (ActiveControl is TcxGridSite) or (ActiveControl is TcxCustomInnerTextEdit)) then
begin
if (ActiveControl is TDBGridEh) then
begin
if ImportSpr(TDBGridEh(ActiveControl).DataSource.DataSet) then ShowMessage('Готово');
TDBGridEh(ActiveControl).DataSource.DataSet.Open;
end;
if (ActiveControl is TcxCustomInnerTextEdit) then
begin
if ImportSpr(TcxGridDBTableView(TcxGridSite(ActiveControl.parent.parent).gridview).DataController.datasource.dataset) then ShowMessage('Готово');
TcxGridDBTableView(TcxGridSite(ActiveControl.parent.parent).gridview).DataController.datasource.dataset.Open;
end;
if (ActiveControl is TcxGridSite) then
begin
if ImportSpr(TcxGridDBTableView(TcxGridSite(ActiveControl).gridview).DataController.datasource.dataset) then ShowMessage('Готово');
TcxGridDBTableView(TcxGridSite(ActiveControl).gridview).DataController.datasource.dataset.Open;
end;
if (ActiveControl is TFibExTreeView) then
ImportTree( TFibExTreeView(ActiveControl) );