Показать сообщение отдельно
  #28  
Старый 06.11.2013, 20:01
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Решился переписать этого паучка, используя winapi и gdi+
Не получается передать форме прозрачность от png

Код:
procedure initialized;
Var
x_pos,y_pos:integer;
GPImage:TGPImage;
Stream          : TStream;
Aptr            : IStream;
begin
Randomize;
x_pos := getsystemmetrics(sm_cxscreen) div 2 - 50;    //Центр экрана - форма
y_pos := getsystemmetrics(sm_cyscreen) div 2 - 30;    //Центр экрана - форма
INST := GetModuleHandle(nil);
  with WinClass do
  begin
   Style := CS_HREDRAW or CS_VREDRAW; //стиль класса главного окна
   hIcon := LoadIcon(INST, MAKEINTRESOURCE('MAINICON')); //иконка программы
   lpfnWndProc := @WindowProc; //назначение обработчика сообщений
   hInstance := INST;
   hbrBackground := COLOR_BTNFACE + 1; //цвет окна
   lpszClassName := WndClassName; //класс окна
   hCursor := LoadCursor(0, IDC_ARROW); //активный курсор
  end;
InitCommonControls;
Windows.RegisterClass(WinClass); //регистрация класса в системе
Handle := CreateWindowEx(0, WndClassName, WndClassName,
WS_POPUP or WS_VISIBLE or WS_EX_LAYERED or WS_EX_TOPMOST, x_pos , y_pos, 100, 60, 0, 0,INST, nil); //Создание главного окна

DC:=GetDC(Handle); //Определяем контекст
GraphicsGDIPlus:=TGPGraphics.Create(DC);  //Создаём графику на контексте
try
  Stream := TResourceStream.Create(HInstance, 'SPLASH_'+inttostr(Random(7)), RT_RCDATA); //Загрузка PNG из ресурсов
    try
      Aptr := TStreamAdapter.Create(Stream, soReference) as IStream; //Грузим стрим в интерфейс
      GPImage:=TGPImage.Create(aptr);  //Создаём картинку из интерфейса
      GraphicsGDIPlus.DrawImage(GPImage, 0, 0, 512, 1024); //выводим на контекст
  finally
  Aptr := nil; //Освобождаем интерфейс
  Stream.Free;
  end;
finally
//Execute(A);
end;
end;

так отрисовывается на форме... а как сюда прозрачность прикрутить?

Использовать то что в изначальном VLC паучке -
Код:
UpdateLayeredWindow(Handle, 0, nil, @BitmapSize, Bitmap.Canvas.Handle,
   @BitmapPos, 0, @BlendFunction, ULW_ALPHA);

Не понял как её прикрутить,... крутил вертел, - пустая форма получается
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием