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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2011, 10:57   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию SetLayeredWindowAttributes включение\отключение.

http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
Цитата:
BOOL WINAPI SetLayeredWindowAttributes(
__in HWND hwnd,
__in COLORREF crKey,
__in BYTE bAlpha,
__in DWORD dwFlags
);
Код:
SetLayeredWindowAttributes(Handle,
                                $FF00FF,
                                0,
                                LWA_COLORKEY);
- Врубает прозрачный цвет.
Код:
SetLayeredWindowAttributes(Handle,
                                0,
                                128,
                                LWA_ALPHA);
- Врубает прозрачность.
Код:
SetLayeredWindowAttributes(Handle,
                                $FF00FF,
                                128,
                                LWA_COLORKEY Or LWA_ALPHA);
- Врубает и то, и другое.

Вопрос - а как отрубить все?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 31.01.2011, 11:00   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

http://msdn.microsoft.com/en-us/libr...px#layered_win

SetWindowLong для -WS_EX_LAYERED.

Или я вопроса не понял.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 31.01.2011, 11:07   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Эм... Не совсем. У меня окно "слоеное" окно создается с самого начала. Без всяких "плюшек" выглядит как обычное окно.

Предположим юзер хочет прозрачность на blue- вуаля, сделали. Хочет на red - сделали на red. Хочет 50% - сделали.

А вот если он уже НЕ ХОТЕТЬ прозрачность на blue и на любой другой цвет? Просто отрубить прозрачность без смены режима "слоености", чтобы потом лишний раз не перещелкивать? Я просто сейчас проверить практикой не могу, но насколько я могу читать сорцы флаг LWA_COLORKEY = 1, а LWA_ALPHA = 2, следоватьно, по идее
Код:
SetLayeredWindowAttributes(Handle,
                                0,
                                0,
                                0);
должно сработать? не?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 31.01.2011, 13:35   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Перегрузился под винду. Попробовал такой код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    Panel1: TPanel;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  I : Integer = 0;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Timer1.Enabled := TRUE;
 SetWindowLong(Handle,
               GWL_EXSTYLE,
               GetWindowLong(Handle,
                             GWL_EXSTYLE) Or WS_EX_LAYERED);
 Application.ProcessMessages;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Inc(I);
 Button1.Caption := IntToStr(I);
 Application.ProcessMessages;
 Case I of
  5 : Begin
        Form1.Hide;
        SetLayeredWindowAttributes(Handle,
                                   Panel1.Color,
                                   0,
                                   LWA_COLORKEY);
        form1.Show;
       End;
  10 : Begin
        Form1.Hide;
        SetLayeredWindowAttributes(Handle,
                                   0,
                                   128,
                                   LWA_ALPHA);
        form1.Show;
       End;
  15 : Begin
        Form1.Hide;
        SetLayeredWindowAttributes(Handle,
                                   $FF00FF,
                                   128,
                                   LWA_COLORKEY Or LWA_ALPHA);
        form1.Show;
       End;
  20 : Begin
        Form1.Hide;
        SetLayeredWindowAttributes(Handle,
                                   0,
                                   0,
                                   0);
        form1.Show;
       End;
 End;
end;

end.
Забавно. Первые три отрабатывает нормально, а четвертая делает так - делает всю форму прозрачной, оставляя лишь _□x.

Видимо придется лепить включение\отключение слоености.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 31.01.2011, 13:43   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

поставь переключение в режим частичной прозрачности LWA_ALPHA
но установи отсутствие прозрачности(точнее нулевая прозрачность)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.01.2011, 13:45   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
поставь переключение в режим частичной прозрачности LWA_ALPHA
но установи отсутствие прозрачности(точнее нулевая прозрачность)
Ыыыы... Как же я сам не додумался! Спасибо!
Код:
 SetLayeredWindowAttributes(Handle,
                                   0,
                                   255,
                                   LWA_ALPHA);
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Циклическое включение russian-stalker Общие вопросы C/C++ 2 04.01.2011 14:33
Нужен ярлык на включение и отключение устройства wetchislaf Помощь студентам 2 22.10.2010 21:45
Включение\отключение каналов SanekIrk Мультимедиа в Delphi 1 19.10.2009 17:10
Включение и отключение второго монитора zhefran Win Api 2 19.10.2009 14:51
отключение / включение реакции на мышь. DeKot Общие вопросы Delphi 2 29.10.2008 17:22