Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Здравствуйте, где-то видел вопрос, но уже не могу найти где... Одним словом он меня заинтирестовал.
Суть вопроса: "Как сделать прозрачным часть окна инсталлятора, где расположены кнопки, но чтоб кнопки были видны."
Пример
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Code]
const
  GWL_EXSTYLE   = -20;
  WS_EX_LAYERED = $00080000;
  LWA_COLORKEY  = $00000001;

// задаёт прозрачность окна
function SetLayeredWindowAttributes(hwnd: hWnd; crKey: TColor; bAlpha: byte; dwFlags: DWORD): Boolean;
  external 'SetLayeredWindowAttributes@user32.dll stdcall';
// считывает инфоpмацию об окне или о значениях дополнительного байта окна
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
// заменяет для окна атpибут стpуктуpы класса окна новым значением
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint;
  external 'SetWindowLongA@user32.dll stdcall';

procedure InitializeWizard();
begin
  with TPanel.Create(WizardForm) do
    begin                    
      SetBounds(0, WizardForm.Bevel.Top, WizardForm.Width, WizardForm.Height-WizardForm.Bevel.Top);
      Color:= clGreen;
      Parent:= WizardForm;
    end;
  with TPanel.Create(WizardForm) do
    begin
      SetBounds(WizardForm.NextButton.Left, WizardForm.NextButton.Top,
                WizardForm.NextButton.Width, WizardForm.NextButton.Height);
      WizardForm.NextButton.Parent:= TPanel.Create(WizardForm);
      // теоретически, второе должно переназначать первое, но почему-то работает только так:
      WizardForm.NextButton.Parent:= WizardForm;
      Free; // здесь тоже непонятно, по идее панель должна сразу разрушаться, но...
    end;
  with TPanel.Create(WizardForm) do
    begin
      SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.Top,
                WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
      WizardForm.CancelButton.Parent:= TPanel.Create(WizardForm);
      WizardForm.CancelButton.Parent:= WizardForm;
      Free;
    end;
  SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
  SetLayeredWindowAttributes(WizardForm.Handle, clGreen, 0, LWA_COLORKEY);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID > wpWelcome then
  with TPanel.Create(WizardForm) do
    begin
      SetBounds(WizardForm.BackButton.Left, WizardForm.BackButton.Top,
                WizardForm.BackButton.Width, WizardForm.BackButton.Height);
      WizardForm.BackButton.Parent:= TPanel.Create(WizardForm);
      WizardForm.BackButton.Parent:= WizardForm;
      Free;
    end;
end;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:38, 14-10-2009 | #265