Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: CreateOleObject + PhotoShop  (Прочитано 5482 раз)
0 Пользователей и 1 Гость смотрят эту тему.
WDMclient
Гость
« : 25-03-2010 09:15 » new

Совсем недавно сел за Делфи.

Нашел в сети кучу примеров где запуск фотошопа делается через CreateOleObject

типичный пример:

var
DS: IDispatch;
PS: IPhotoShopApplication;

begin


PS := CreateOleObject('Photoshop.Application');
Но компилятор ругается требует типа IDispatch


а если так:
PS := CreateOleObject('Photoshop.Application') As IPhotoshopApplication;
 то error интерфейс не найден

Ну ладно делаю :
DS := CreateOleObject('Photoshop.Application');

IPhotoshopApplication(DS).Quit; // ERRORS


Странно , но везде присутствует вот такой минимальный код:
PS := CreateOleObject('Photoshop.Application');
PS.Quit;



кто-нибудь может объяснить как работает функция  CreateOleObject?



Грубо , решение есть.

Но что бы ихние примеры SDK  полностью заработали нужна принять информацию из уст в уста , (из рук в руки)  как русские народные былины.

Ё ма Ё



Но задача интересная , надо как-то полключиться к событиям фотошопа , а именно сохранение
файла.

Примеров в сети и в фотопошеSDK  в упор не видно.



Елки палки я ж не знал что Variant поддерживает IDispatch

var
PS: Variant;

begin
PS := CreateOleObject('Photoshop.Application');
PS.Quit;
« Последнее редактирование: 27-03-2010 09:19 от RXL » Записан
WDMclient
Гость
« Ответ #1 : 02-04-2010 06:29 » 

//  подключение через плагин довольно простое , а вот получение имени файла полного

var  
_Control : IActionControl;
_Result : IActionDescriptor;
_Refer :  IActionReference;

hasKey :integer;

     stringValue:   WideString;
     class_:      integer;
     prop_:       integer;

begin
      _Refer   :=    PS.MakeReference;
      _Control :=    PS.MakeControlObject;

class_:= phclassDocument;
prop_ := phKeyFileReference; // вот этот параметр указажет  на ХЭНДЛ файла , но как
                             // выяснится что он укажет на строку полного имени файла.

     _Refer.PutProperty (phClassProperty, prop_);
     _Refer.PutEnumerated( class_  , phTypeOrdinal, phEnumTarget );

    _Control.GetActionProperty(_Refer , _Result);


    try
         _Result.HasKey(prop_ , hasKey); // находим параметр в таблице
     except
          // error
     end;

                if hasKey<>0  then
                begin

                   _Result.GetType(prop_ , keyType); // определим тип параметра

                   case keyType  of
                        
                        phTypePath , phTypeAlias:
                        begin
                            //  получаем полный путь в stringValue
                            _Result.GetPath (prop_, stringValue) ;
                          
                        end;
                    end;
« Последнее редактирование: 02-04-2010 08:22 от WDMclient » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines