Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Delphi toolbar for IE, out of system resources 
:(
    Опции темы
phanatos
Дата 26.3.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 9.8.2006

Репутация: 1
Всего: 2



Доброе время суток, коллеги! Требуется мозговой штурм. Бэкграунд такой: пишу тулбар для Internet Explorer. В качестве заготовки взял пример с Bsalsa.com. Все замечательно работает, если бы не одно 'НО'. Если использовать глифы, имэджы или даже  просто выводить текст, используя Canvas на форму тулбара или TPanel, то при открытии нескольких окон Iexplorer с завидной периодичностью вываливаются ошибки типа: "Canvas does not allow drawing" или "Out of system resources", после чего выводимая на форму графика, либо не прорисовывается вовсе, либо рисуется "черный квадрат", либо ошибка вызывает молчаливое закрытие эксплорера, что совсем неприятно.  Частота ошибки пропорциональна интенсивности работы с графикой. Т.е. если это просто обычные SpeedButton-ы, то ошибка случается достаточно редко и при открытии большого количества окон. А если это какой-нибудь компонент, показывающий анимацию или обновляющий что-то на экране (например TProgressBar), то обычно при открытии второго-третьего-n-ого окна все и происходит. Есть большая доля вероятности, что дело в совместном доступе к GDI, а именно, разделение ресурсов в потоке, поскольку такого рода ошибки бывают, если в потоке что-то рисовать на канвасе. Внимание, вопрос: как быть? Что где можно подкрутить, чтобы заработало?
PM MAIL   Вверх
Letov
Дата 26.3.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 22.2.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 4



можно попробовать сжать графику и запускать для нее отдельный процесс.
Постораюсь помочь и выложить какой нибудь пример на http://spb-kolpino.narod.ru/programmer/index.htm
Цитата

Никогда не говори никогда



--------------------
Не бывает плохих языков программирования. Бывают плохие программисты...

PM MAIL   Вверх
phanatos
Дата 26.3.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 9.8.2006

Репутация: 1
Всего: 2



Что-то я не догоняю... VCL ведь и так в основном потоке выполняется. Как мы можем помочь ниткой, если глючит основной поток?
И вот ещё интересная штука: компилируем наш банд, запускаем эксплорер, открываем два окна эксплорера, чтобы в каждом из них появился наш тулбар. И на одном из них щелкаем заранее заготовленную кнопку, которя посылает Window-сообщение другой инстанции тулбара, чтобы уже тот, от своего имени выполнил определенный метод - т.е. показал простейшую форму из трех едитов. Так вот, с вероятностью 50% произойдет ошибка Out of system resources, 25 % - что форма покажется нормально, и ещё 25 - покажется недоинициализированная форма - либо все контролы созданы, но не инициализированы их Published свойства (т.е. просто в кучу все лежат, как при динамическом содании объектов), либо глифы на кнопках "ОК" и "Отмена" черные или не прорисованные. Т.е. такое ощущение, что в процессе инициализации формы и происходит ошибка. Скачал ради интереса демо с Shellplus.com с компонентами для создания тулбаров. Думал - раз там своя специальная форма отнаследованна, так типа все будет ок. Нет - все те же глюки замечаю и там. Причем тестировал на разных ОС и с разными версиям эксплорера (6 и 7).  Вот такое странное поведение. Где грабли, куда жаловаться?






PM MAIL   Вверх
phanatos
Дата 2.4.2007, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 9.8.2006

Репутация: 1
Всего: 2



В общем, как и предпологалось, все эти глюки решаются с помощью мьютекса. Но от понимания ситуации я далек - оба кода:

Код

  TInstallObjectFactory.Create(ComServer, TIEBandObject, CLASS_IEBandObject,
    ciMultiInstance, tmApartment);


Код

  TInstallObjectFactory.Create(ComServer, TIEBandObject, CLASS_IEBandObject,
    ciSingleInstance, tmSingle);


без защиты глючат одинаково, хотя во втором должен получиться STA с proxy. 

Может быть мне кто-нибудь растолкует, почему такое происходит?   smile  
PM MAIL   Вверх
phanatos
Дата 26.4.2007, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 9.8.2006

Репутация: 1
Всего: 2



Кто, если не мы =)
Все оказалось просто. При регистарции сервера в ключе реестра InProcServer создается ключ ThreadingModel, а это как раз признак Appartment модели. Для Single - его быть не должно. Почему всегда создается ключ ThreadingModel, я ещё не разобрался, но теперь тулбар работает как часы - милое дело =)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0715 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.