Inno Setup VCL

  • Автор темы Автор темы Leserg
  • Дата начала Дата начала
Обнаружил одну характерную особенность, в процедуре ExtractTemporaryFileEx, раньше можно было писать ExtractTemporaryFileEx('file.exe',ExpandConstant('{src}')) сейчас если не указать ,ExpandConstant('{src}\'), то распаковка будет на уровень выше
 
Обнаружил одну характерную особенность, в процедуре ExtractTemporaryFileEx, раньше можно было писать ExtractTemporaryFileEx('file.exe',ExpandConstant('{src}')) сейчас если не указать ,ExpandConstant('{src}\'), то распаковка будет на уровень выше
Crachlow, я не понял, это хорошо или плохо? :unknown:
Это моя ошибка. Я не предусмотрел, что второй параметр (куда извлечь файл) может быть пустой или неверный. Могу закрыть этот косяк.
Или всё же оставить как есть?
 
@Leserg. А можно CenterInsideControl вернуть, или добавить, в 633? Как бы центровать нечем оказалось)
 
>>>Приветствую Форумчане<<<
Хотел спросить можно ли убрать эту белую рамку вокруг формы, в версиях 6.3.3 и выше?
(WizardFormShadow.ShadowOn := False) - не работает.

Использую костыли из примера ниже, чтобы убрать эту зловещую рамку (очень раздражает).
Но все равно в версиях 6.4.0 и выше, при использовании (SendMessage(WizardForm.Handle, $0112, 61472, 0))
для сворачивания формы, после развертки получаю опять эту зловещую рамку, и еще несколько багов - с анимацией, иногда после развертки не загружается картинка, для использования версии 6.4.0 и выше не рекомендую (сыровато). Стили не использую.
Буду сидеть на 6.3.3 - жаль подсказок в ней нету, все ручками печатать нужно.

Код:
[Setup]
AppName=Test
AppVerName=Test
OutputBaseFilename=Test
DefaultDirName=Test
OutputDir=userdocs:..\desktop

[Code]
function CreateRoundRectRgn(X1, Y1, X2, Y2, W, H: Integer): Integer; external 'CreateRoundRectRgn@gdi32.dll stdcall';
function SetWindowRgn(bWnd: HWND; bRgn: Integer; bRedraw: Boolean): Integer; external 'SetWindowRgn@user32.dll stdcall';

var Label1:TLabel;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); begin Confirm:=False; end;
procedure MinimizeClick(Sender: TObject);begin SendMessage(WizardForm.Handle, $0112, 61472, 0); end;

procedure InitializeWizard;
begin
      WizardForm.Position:=poDesktopCenter;
      WizardForm.BorderStyle:=bsNone;
      WizardForm.ClientWidth:=ScaleX(600);
      WizardForm.ClientHeight:=ScaleY(400);
      WizardForm.OuterNotebook.Hide;
      WizardForm.Color:=$000000;
      SetWindowRgn(WizardForm.Handle, CreateRoundRectRgn(0, 0, WizardForm.Width, WizardForm.Height, 0, 0), True);

      Label1:=TLabel.Create(WizardForm);
      Label1.Parent:=WizardForm;
      Label1.AutoSize:=False;
      Label1.Alignment:=taCenter;
      Label1.SetBounds(ScaleX(275), ScaleY(-10), ScaleX(50), ScaleY(20));
      Label1.Caption:='—'
      Label1.Font.Size:=20;
      Label1.Font.Color:=$7280FA;
      Label1.OnClick:=@MinimizeClick;
end;
 
(WizardFormShadow.ShadowOn := False) - не работает.
Весь функционал, связанный с кастомной тенью, был удалён. Причины описаны в этом сообщении.
Так что эта команда работать и не будет.
Хотел спросить можно ли убрать эту белую рамку вокруг формы, в версиях 6.3.3 и выше?
Если речь про это:
633vcl.png

... то нет. Применён хук отрисовки тени для безрамочных окон, когда BorderStyle:=bsNone. А саму рамку рисует DWM Api Windows (DwmExtendFrameIntoClientArea).
 
На системах Windows 10 версии 1809 (build 17763) и выше можно указать желаемый цвет DWM-рамки при помощи атрибута DWMWA_BORDER_COLOR. На системах ниже Windows 10 версии 1809 (build 17763) этот атрибут отстутсвует, поэтому работать не будет.

code_language.pascal:
#if !defined(IS_ENHANCED) || (VER < 0x06030300)
  #pragma error "Для компиляции этого сценария требуется расширенная \
                 редакция Inno Setup 6.3.3 или выше"
#endif

[Setup]
AppName=Test
AppVerName=Test
OutputBaseFilename=Test
DefaultDirName=Test
OutputDir=.
; Отключаем скругление углов
SetupRoundedCorner=off

[Code]
// Объявляем константы
const
  DWMWA_BORDER_COLOR = 34;
  S_OK = 0;

// Объявляем переменные
var
  Label1: TLabel;

// Объявляем вызов внешней функции установки DWM-атрибута
// Будет работать только на Windows 10 версии 1809 (build 17763) и выше
function DwmSetWindowAttribute(hwnd: HWND; dwAttribute: DWORD; var pvAttribute: DWORD; cbAttribute: DWORD): HRESULT;
  external 'DwmSetWindowAttribute@dwmapi.dll stdcall';

// Установка цвета
function SetWindowBorderColor(Wnd: HWND; Color: DWORD): Boolean;
var
  ColorVar: DWORD;
begin
  ColorVar := Color;
  Result := DwmSetWindowAttribute(Wnd, DWMWA_BORDER_COLOR, ColorVar, SizeOf(ColorVar)) = S_OK;
end;

// Пользовательские функции
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); begin Confirm:=False; end;
procedure MinimizeClick(Sender: TObject);begin SendMessage(WizardForm.Handle, $0112, 61472, 0); end;

procedure InitializeWizard;
begin
  // Задаем цвет рамки DWM
  SetWindowBorderColor(WizardForm.Handle, $000000);

  // Устанавливаем желамые свойства окна
  WizardForm.BorderStyle:=bsNone;
  WizardForm.ClientWidth:=ScaleX(600);
  WizardForm.ClientHeight:=ScaleY(400);
  WizardForm.OuterNotebook.Hide;
  WizardForm.Color:=$000000;

  // Создаем элемент TLabel
  Label1:=TLabel.Create(WizardForm);
  Label1.Parent:=WizardForm;
  Label1.AutoSize:=False;
  Label1.Alignment:=taCenter;
  Label1.SetBounds(ScaleX(275), ScaleY(-10), ScaleX(50), ScaleY(20));
  Label1.Caption:='—'
  Label1.Font.Size:=20;
  Label1.Font.Color:=$7280FA;
  Label1.OnClick:=@MinimizeClick;
end;

633vcl-1.png
 
Leserg с уважением, я так понимаю вы являетесь разработчиком данного мода, спасибо большое за труды 🫱 жму руку.

Я не есть тот человек который понимает о чем речь идет, в данном сообщении
(А саму рамку рисует DWM Api Windows (DwmExtendFrameIntoClientArea).

Просто мне непонятно зачем вообще эта рамка, какой мотив,
или разработчики там намутили з MainForm, и это неизбежность?
Это серьезное палево, как по мне:$.

Извиняюсь за дискомфорт, но хотел еще спросить нет ли возможности сделать папки is-...tmp с атрибутом ( hidden system),
тоесть временные каталоги установщика в папке Темп, сделать скрытыми?

Максимально борюсь с палевом что сетап написан на Inno Setup.
У меня даже деинсталлятор написан отдельно.

Просто я ударился замутить свой скин, и уже скоро как год занимаюсь этим делом.

Озон с первого числа закрывают.
Тема Инки уже давно там мертва:sorry:.

А да чуть не забыл, я не репакер, и темы по типу где то будет работать где то нет, меня не интересуют.

Спасибо за быстрый ответ! И цели вас чем то оскорбить у меня нету:drinks:.
 
Последнее редактирование:
>>>Приветствую Форумчане<<<
Как вариант избавится от рамки не потеряв при этом эту тень

Код:
[Setup]
AppName=Test
AppVerName=Test
OutputBaseFilename=Test
DefaultDirName=Test
OutputDir=userdocs:..\desktop
Uninstallable=no

[Code]
var WizardPanel:TPanel;

procedure InitializeWizard;
begin
      WizardForm.Position:=poDesktopCenter;
      WizardForm.BorderStyle:=bsNone;
      WizardForm.ClientWidth:=ScaleX(600);
      WizardForm.ClientHeight:=ScaleY(400);
      WizardForm.OuterNotebook.Hide;
      WizardForm.DoubleBuffered:=True;

      WizardPanel:=TPanel.Create(WizardForm);
      WizardPanel.Parent:=WizardForm;
      WizardPanel.BevelOuter:=bvNone;
      WizardPanel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(600), ScaleY(400));
      WizardPanel.ParentBackground:=False;
      WizardPanel.Color:=$000000;
end;
 
Назад
Сверху