Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2015, 14:42   #1
sergei92
Пользователь
 
Регистрация: 17.07.2015
Сообщений: 51
По умолчанию создание гаджета на c++builder6

Подскажите пожалуйста.Можно ли как-то форму закрепить на рабочем столе как гаджет, что бы она не реагировала на кнопку "свернуть все окна" в Win7. Если можно, то с примером.
sergei92 вне форума Ответить с цитированием
Старый 29.07.2015, 15:51   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну функцией SetParent() задать ей в качестве родителя рабочий стол. И поставить Border в bsnone.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2015, 20:23   #3
sergei92
Пользователь
 
Регистрация: 17.07.2015
Сообщений: 51
По умолчанию

Виталий!
А не могли бы вы примерчик приложить с комментариями.За ранее большое спасибо.
sergei92 вне форума Ответить с цитированием
Старый 29.07.2015, 20:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну это сложно. У меня Билдера нет.
Так то просто написать в OnShow что-то типа SetParent(Form1->Handle,0)
Или вместо 0 поискать хендл рабочего стола, имею ввиду подложки, где иконки отображаются.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2015, 22:08   #5
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Код:
TForm1 *Form1;
//---------------------------------------------------------------------------
bool SetToDesktop(){
        HWND listViewhwnd = FindWindowA("Progman", NULL);
        if(listViewhwnd){
                listViewhwnd = FindWindowExA(listViewhwnd, NULL, "SHELLDLL_DefView", NULL);
                if(listViewhwnd){
                        listViewhwnd = FindWindowExA(listViewhwnd, NULL, "SysListView32", NULL);
                        if(listViewhwnd){
                                Form1->BorderStyle = bsNone;
                                ::SetParent(Form1->Handle, listViewhwnd);
                                return true;
                        }
                }
        }

        return false;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        if(!SetToDesktop()) ShowMessage("Error SetToDesktop");
}
//---------------------------------------------------------------------------
Только я не уверен, что во всех версиях Windows будут именно эти классы.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).

Последний раз редактировалось Krasiosoft; 29.07.2015 в 22:12.
Krasiosoft вне форума Ответить с цитированием
Старый 31.07.2015, 08:06   #6
sergei92
Пользователь
 
Регистрация: 17.07.2015
Сообщений: 51
По умолчанию

Krasiosoft спасибо большое за помощь выручили.
И параллельно можно задать вопрос по коду.Как я понял вот этой строчкой кода "HWND listViewhwnd = FindWindowA("Progman", NULL);" переменной listViewhwnd присваем дескриптор рабочего стола?
sergei92 вне форума Ответить с цитированием
Старый 31.07.2015, 08:15   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не просто присваиваем, а сначала находим.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.07.2015, 16:37   #8
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от sergei92 Посмотреть сообщение
Как я понял вот этой строчкой кода "HWND listViewhwnd = FindWindowA("Progman", NULL);" переменной listViewhwnd присваем дескриптор рабочего стола?
Да, присваиваем дескриптор окна, но не сразу того, которое нам нужно.

Сначала ищем окно, у которого класс "Progman", далее у него ищем дочернее окно с классом "SHELLDLL_DefView", а в нем уже ищем дочернее окно с классом "SysListView32", которое нам и нужно.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).

Последний раз редактировалось Krasiosoft; 31.07.2015 в 16:40.
Krasiosoft вне форума Ответить с цитированием
Старый 01.08.2015, 03:29   #9
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Вот тема недавняя: http://www.programmersforum.ru/showthread.php?t=280604
Повторяю и тут - гаджеты не являются дочерними к рабочему столу и никак не "закрепляются" на нём. Просто окно верхнего уровня.

Опишите что вы используете (VCL, MFC, API, etc), и опишите точное поведение, которого хотите добиться.
ResourceSpace вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание гаджета на рабочий стол firstname Фриланс 5 01.03.2012 19:38
создание гаджета, не знаю куда писат gabiboi JavaScript, Ajax 2 16.12.2011 21:20
Что-то типо гаджета на рабочий стол Win 7 abzhapparovmaxat Общие вопросы Delphi 26 18.10.2011 09:43
Запуск приложения из гаджета alxd JavaScript, Ajax 1 26.02.2010 13:23
Написание гаджета для Win7 Usov Общие вопросы Delphi 14 06.01.2010 17:48