Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Управление COM - сервером Excel [D5, Win95/98]


Programmer1 ©   (2002-08-01 15:58:00) 

Уважаемые мастера!!! Помогите, пожалуйста, в меню Файл в Excel"е впихнуть свою команду.
Почему-то в бейсике такой макрос работает
Set SaveTemplCommand = CommandBars("File"). _
Controls.Add(Type:=msoControlButton, Id:= _
2949, Before:=7)
With SaveTemplCommand
.Style = msoButtonIconAndCaption
.FaceId = 455
.Caption = "Сохранить как шаблон"
.OnAction = "SaveDg1Proc"

End With

А когда запускаю в дельфи
NameOfControl:="File";
Type1:=1;
Id1:=1;
Before1:=7;
Temporary:=false;
SaveTemplCommand:=Excel1.CommandBars.
Item[NameOfControl].Controls.
Add(Type1,Id1,EmptyParam,Before1,Temporary);
with SaveTemplCommand do
begin
Style := 3;
FaceId := 455;
Caption := "Сохранить как шаблон";
end;

то компилятор на строке "with SaveTemplCommand do" выдает ошибку "Record, object or class required"
Метод Add как раз и возвращает ссылку на объект типа CommandBarControl. Что ему не нравится?


Programmer1   (2002-08-05 09:37:00) [1]

В коллекции
Excel1.CommandBars
всего я обнаружила 85 объектов типа CommandBar и среди них нет меню File, да и не должно быть, потому что это не строка меню, а входящий в нее управляющий элемент типа CommandBarPopup.
Заковыка в том, что метод
CommandBar.FinfdControl(....}
и свойство
CommandbBar.Controls.Item[Index]
возвращают ссылку на объект типа CommandBarControl, а не CommandBarPopup.
У объекта CommandBarControl нет свойства Controls и нельзя выполнить метод Controls.Add, а у CommandBarPopup - есть, и т.о.
с помощью CommandBarPopup.Controls.Add можно добавить команду в меню.
Как мне добраться до меню File, как CommandBarPopup?
Я пыталась делать приведение типов.
Выражение
MenuFileControl:=CommandBar.Controls.item[Index] as CommandBarPopup;
выдает ошибку "Operator not applicable to this type"
Как быть?


aus   (2002-08-02 00:30:00) [2]

ты не используй with, а конкретно указывай объект, свойства которого используешь. Для with нужен объект или запись, а не OleVariant, поэтому компилятор выдает ошибку.

SaveTemplCommand.Style := 3;
SaveTemplCommand.FaceId := 455;
SaveTemplCommand.Caption := "Сохранить как шаблон";


Vitaly   (2002-08-01 16:12:00) [3]

SaveTemplCommand:=(Excel1.CommandBars as CommandBars).
Item[NameOfControl].Controls.
Add(Type1,Id1,EmptyParam,Before1,Temporary);


Programmer1   (2002-08-01 16:09:00) [4]

var
FileName:OLEVariant;
SaveTemplCommand, NameOfControl:OLEVariant;
Type1,Id1,Before1,Temporary:OLEVariant;
FileMenuOb,Cntrls:olevariant;
Style,FaceId,Caption,OnAction, index:olevariant;


Programmer1   (2002-08-01 16:06:00) [5]

Я все объявляю как OLEVariant


Digitman   (2002-08-01 16:04:00) [6]

Ему, думаю, не нравится то же, что и мне. А мне, к примеру, не нравится, что ты не удосужилась даже привести строчку, где ты декларируешь этот самый идентификатор SaveTemplCommand.


Наверх

Титульная страница Поиск, карта сайта Написать письмо