Windows7 taskbar И CBuilder 6
www.rsdn.ru/article/winshell/taskbar7.xml
на мой взгляд там, довольно таки хорошо всё расписано, но как это реализовать в CBuilder 6, если это возможно конечно?
По-любому есть и другой механизм.Я всего лишь указал автору,что можно поискать ещё.COM-механизм поддерживается в BCB,ну и хостить .NET тоже никто не мешает
Ну не обязательно же придерживаться этой статьи на RSDN.:D
А вообще поверхностный поиск в гугле очень часто выдавал вот такую строчку:
«Windows API Code Pack для Microsoft .NET Framework»
Что как бы намекает…;)
С этого места поподробней!
Тогда надо сразу об этом писать.
«Windows API Code Pack для Microsoft .NET Framework»
Что как бы намекает…;)
На что?
Извращенничать собрались?
Вовсе нет:)
MathCAD хостит же.Правда,там .NET только для интерфейса,но не суть
По вопросам хостинга–к hardcase'у.Собственно,он мне про это и рассказывал
MathCAD хостит же.Правда,там .NET только для интерфейса,но не суть
По вопросам хостинга–к hardcase'у.Собственно,он мне про это и рассказывал
А ты спроси его, насколько целесообразно этим заниматься.
На то, что без дотНета не обойдёшься.:(
А вообще, можно просто перейти на CBuilder который может создавать приложения использующие дотНет. Кажется уже 2006й это может делать, но я ещё не успел его толком изучить, так что не берусь утверждать наверняка…
Хотя тот же QIP2010 написан на Делфи со всеми свистоперделками Win7, откуда можно сделать вывод, что и на билдере это возможно. Вопрос только на каком?
www.rsdn.ru/article/winshell/taskbar7.xml
на мой взгляд там, довольно таки хорошо всё расписано, но как это реализовать в CBuilder 6, если это возможно конечно?
Микрософт поставляет компоненты для работы с оболочкой Windows 7 в виде привязок к MFC и .NET. На остальных им конечно же пофиг. Впрочем, всегда можно глянуть на Shell API, а также на функции, к которым привязывается .NET (Reflector покажет), но меня смущает что автор говорил о COM-интеропе в самом начале статьи, возможно все не так примитивно и просто.
По вопросам хостинга–к hardcase'у.Собственно,он мне про это и рассказывал
Хостинг .NET оправдан в системах такого уровня как SqlServer, VisualStudio или MathCAD, где присутствует большая часть неуправляемого кода.
Меня смущает, слово «COM-объекты» в этом тексте. Билдер же может с ними работать, если я не ошибаюсь? Может в этом направлении покопать? Только вот через какие такие «COM-объекты» всё это работает? Кстати приложение созданное в Билдере не является дотНет приложением и, как мне кажется, «реализация управляемых оберток» ему не нужна. Или нужна?:confused:
Хотя тот же QIP2010 написан на Делфи со всеми свистоперделками Win7, откуда можно сделать вывод, что и на билдере это возможно. Вопрос только на каком?
Насколько я знаю CppB для .NET нету. Есть Delphi.NET, поддержку начали внедрять начиная с версии 2006, тот же QIP и был скорее всего написан на одной из последних версий оной. RAD Studio 2010 насколько знаю хорошо приспособлена под Вин 7, можно попробовать. Там даже есть спец студия Delphi Prism для этих целей. Но язык там - Delphi.
Следовательно, чисто теоретически можно, и без дотНета обойтись, и без апдейта Билдера? Только выяснить, что за КОМ-объекты и можно приступать к их трепанации?
Ну только если вам больше делать нечего то можете и поковырять :)
Это и есть тот самый искомый КОМ-объект?
В любом случае я погуглю информацию получше.:) По мере продвижения буду инфу в этот тред сливать.
Это интерфейс к нему.
Я тут кстати на эту тему один исходник для VC скачал и в нём нашёл такую строчку:
Сдаётся мне, что если выдернуть этот заголовок из студии, например, 2010й, которая наверняка умеет работать с таскбаром Win7, и подключить его к проекту (разумеется закоментив всё явно не оносящееся к делу), то можно обойтись и без COM-объектов. Хотя и в CBuilder2010, тоже как я понял, подобный файлик есть.
Неужто всё так просто, или мне просто так кажется?:confused:
Какой смысл пользоваться устаревшими инструментами?
Ты вообще гонишь пургу уже, ничего личного, но факт :)
Тебе нужно понять, что такое .NET, Win32, COM-объекты и интерфейсы. А иначе тебя такими поисками в соседнюю галактику унесет, в иные, так сказать, миры. :D
только давай по сути, не надо тут ерундой засорять
Сдаётся мне, что если выдернуть этот заголовок из студии, например, 2010й, которая наверняка умеет работать с таскбаром Win7
Проще (в смысле без гаданий) из SDK для Win 7. Вытащи просто описание интерфейса (с родителями если надо) и GUID(ы) к нему, запихни в отдельный h-файл. Если заморочишься и напишешь библиотеку типов из которой можно будет сгенерить код в том числе и для дельфины, я поставлю плюсик :)
то можно обойтись и без COM-объектов
хе-хе, все же совсем без них не обойдется
Неужто всё так просто, или мне просто так кажется?:confused:
да ничего сложного
[/FONT]
[FONT=Tahoma]Ну тут уж извините! Универсальных критериев для определения «ерунды» нет! :D[/FONT]
[FONT=Tahoma] [/FONT]
[FONT=Tahoma]О первых результатах расскажу после выходных, ибо мне до моей виндосемь по прямой ~60 км (а по дорогам и того более).[/FONT]
[FONT=Tahoma][/FONT]
[FONT=Tahoma]P.S. Я кстати уже нарыл примеры по пользованию фичей таскбара на ASM'е. Но для меня это китайская грамота :(.[/FONT]
taskbarGUID.cpp:
#include <objbase.h>
extern "C" const IID IID_ITaskbarList3 =
{ 0x0EA1AFB91, 0x09E28, 0x04B86, { 0x090, 0x0E9, 0x09E, 0x09F, 0x08A, 0x05E, 0x0EF, 0x0AF } };
extern "C" const CLSID CLSID_TaskbarList 3=
{ 0x56FDF344, 0xFD6D, 0x11D0, { 0x095, 0x08A, 0x000, 0x060, 0x097, 0x0C9, 0x0A0, 0x090 } };
И собственно Unit1.cpp:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
HRESULT hr;
LPVOID pTaskbar;
CoInitialize(NULL);
hr = CoCreateInstance(CLSID_TaskbarList3,
NULL,
CLSCTX_INPROC_SERVER,
IID_ITaskbarList3,
&pTaskbar);
if(hr==S_OK) ShowMessage("OK!");
//На следующей строчке выскакивает ошибка
pTaskbar->SetProgressValue(Handle,"TBPF_ERROR",50);
CoUninitialize();
}
И, при компиляции, получаю вот такую ошибку:
Если я конечно правильно перевёл, то в справке написано, что с левой стороны от стрелки должен быть указатель (хотя как тут можно перевести неправильно?)
In C++ a -> operator is allowed.
Думаю, мой вопрос уже понятен: что здесь неправильно?
И, кстати, киньте кто-нибудь файлики shobjidl.h и ShlObj.h из Visual Studio 2010 или С++ (Delphi) Builder 2010?
"TBPF_ERROR"...
кавычки убери
____________
***Мне тут пришла мысль, что необходимо явно объявить состояние прогрессбара, но как это сделать?
Кстате инклюдить цпп-файл тоже..
Вот поэтому я и прошу кинуть мне пару файликов из Studio'10 или Builder'10 в которых всё это уже описано соответствующими константами, дефайнами и прочей…
Поясни что не так? Что это за тип такой LPVOID? И с чем его едят? А насчёт разыменования… Тут я просто копипастил…
Ну какая разница какое расширение у файла? Хоть *.jopa_jopskaya
там будет! Это ж принципиальной роли не играет! А вообще, если серьёзно, тут я тоже копипастил.
LPVOID это нетипизированный указатель (void *). Вообще с такими знаниями тебе рановато что-то делать, впору что-то читать :).
Раньше у меня и такой-то возможности не было и ведь чему-то я научился!
<оффтоп>
Правда это самообразование даёт свои плоды: я так и не понял в каких случаях мне нужно писать some_var=0; , а в каких *some_var=0;
</оффтоп>
Правда это самообразование даёт свои плоды: я так и не понял в каких случаях мне нужно писать some_var=0; , а в каких *some_var=0;
Вот потому иди и читай. Форум - не справка, уясни это!
Хватит флеймить в теме.
Выдрано из shobjidl.h, на ВСВ2009 (где нет ITaskbarList3) компилится без вопросов...
[LEFT][COLOR=Silver]Или я слишком самоуверен?[/COLOR]
[/LEFT]
[COLOR=Silver]Или я слишком самоуверен?[/COLOR]
Я бы все же вырезал лишь необходимое, поместил бы куда-то отдельно, создал бы отдельный класс для применения прогресса на кнопке...
И если делать грамотно, нужно написать обработку сообщения TaskbarButtonCreated и разрешить его для evaluated привилегий, как советует мелкософт.