Форум по Delphi программированию

 



Вернуться   Форум по Delphi программированию > C/C++ > C++ Builder
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.03.2020, 10:05
Maetsky Maetsky вне форума
Прохожий
 
Регистрация: 06.11.2018
Сообщения: 8
Версия Delphi: Delphi 2009
Репутация: 10
По умолчанию Прозрачность формы-гаджета

Решил сделать гаджет-песочные часы. Вставил на форму Image1, в нём Bitmap с изображением песочных часов. Те области часов, которые должны быть прозрачными, я залил красным цветом. Далее задал свойства формы:
Код:
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form1->Color=255;
Form1->TransparentColor=true;
Form1->TransparentColorValue=255;
}
//---------------------------------------------------------------------------
Пока всё хорошо. Далее вставил найденный в Интернете код, позволяющий убрать системные кнопки окна, значок моего приложения в панеле задач, сделать так, чтобы моё окно не сворачивалсоь и его можно было перемещать левой мышкой:
Код:
//---------------------------------------------------------------------------
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("Ошибка SetToDesktop");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
		  int X, int Y)
{
  long SC_DRAGMOVE = 0xF012;
  if(Button == mbLeft) {
  ReleaseCapture();
  SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);
  }
}
//---------------------------------------------------------------------------
Теперь мой гаджет стал красным, прозрачность исчезла, т.е. свойство Form1->TransparentColor=true не работает. Тогда я задал свойство TransparentColor=true в инспекторе объектов в свойствах формы. При запуске приложения форму вообще перестало быть видно. Строка, из-за которой перестала работать прозрачность формы:
Код:
::SetParent(Form1->Handle, listViewhwnd);
Язык C++Builder 2009. Операционная система Windows Vista. Какими мыслями поделитесь, в каком направлении мне рыть? Попробую в других операционных системах и других версиях C++Builder.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:18.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2020

ВКонтакте   Facebook   Twitter