ISPicture2

DLL ISPicture2 13-02-2014

Нет прав для скачивания

Shift85

Старожил
Небольшой вопрос на каких операционках она работает


sergey3695, Для картинки какие именно процедуры нужно оставить...
 

sergey3695

Ветеран
Модератор
Shift85, я думаю windows nt тебе хватит :)
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source : IsPicture2.dll; Flags : dontcopy;
Source: fon.bmp; Flags: dontcopy

[ code]
//----------------------------------------------------------------------------------\\
const   // жирность шрифта
  FW_DONTCARE   = 0;
  FW_THIN       = 100;
  FW_ULTRALIGHT = 200;
  FW_LIGHT      = 300;
  FW_NORMAL     = 400;
  FW_MEDIUM     = 500;
  FW_DEMIBOLD   = 600;
  FW_BOLD       = 700;
  FW_ULTRABOLD  = 800;
  FW_BLACK      = 900;

procedure IsPicInit(Handle : HWND);
   external 'IsPicInit@files:IsPicture2.dll stdcall delayload';
  // начало работы
  
procedure IsPicAddImg(fName : AnsiString); 
   external 'IsPicAddImg@files:IsPicture2.dll stdcall delayload';
  // изображение на заднем фоне
  
procedure IsPicAddVideo(fName : AnsiString; l, t, w, h : Integer); 
   external 'IsPicAddVideo@files:IsPicture2.dll stdcall delayload';
  // видео на заднем фоне
  
function IsPicReFont(height, Weight : Integer; Italic : Boolean) : HWND;
   external 'IsPicReFont@files:IsPicture2.dll stdcall delayload';
  // подмена шрифта для борьбы с артефактами сглаживания
  // height - Font.Height
  // Weight - жирность
  // Italic - наклонность
  
procedure IsPicStopVideo;
   external 'IsPicStopVideo@files:IsPicture2.dll stdcall delayload';
  // остановка воспроизведения видео - после этой команды
  // видео будет перемотано на начало и поставлено на паузу
  
procedure IsPicPauseVideo(play : Boolean);
   external 'IsPicPauseVideo@files:IsPicture2.dll stdcall delayload';
  // пауза видео
  // play -
  // если значение True, то продолжаем воспроизводить
  // если значение False, то ставим на паузу
  
procedure IsPicSetVolume(volume : Integer);
   external 'IsPicSetVolume@files:IsPicture2.dll stdcall delayload';
  // громкость видео от -10000 до 0.
  // -10000 - минимальное значение
  // 0 - максимальное значение
  
procedure IsPicDeInit;
   external 'IsPicDeInit@files:IsPicture2.dll stdcall delayload';
  // не забываем вызвать в DeinitializeSetup
//----------------------------------------------------------------------------------\\

procedure InitializeWizard();
begin
  ExtractTemporaryFile('fon.bmp');
  with WizardForm do
  begin
    WizardBitmapImage.Free;
    WizardBitmapImage2.Free;
    
//----------------------------------------------------------------------------------\\
  // подменяем шрифты
    Font.Handle := IsPicReFont(Font.Height, FW_DEMIBOLD, False);
    WelcomeLabel1.Font.Handle := IsPicReFont(WelcomeLabel1.Font.Height, FW_BOLD, False);
    PageNameLabel.Font.Handle := IsPicReFont(PageNameLabel.Font.Height, FW_BOLD, False);
    FinishedHeadingLabel.Font.Handle := IsPicReFont(FinishedHeadingLabel.Font.Height, FW_BOLD, False);
//----------------------------------------------------------------------------------\\
 //----------------------------------------------------------------------------------\\
   // цвет прозрачности - $000008. Указываем его для элементов,которые должны быть прозрачными
    Color := $000008;
    WelcomePage.Color := $000008;
    InnerPage.Color := $000008;
    FinishedPage.Color := $000008;
    MainPanel.Color := $000008;
    DirEdit.Color := $000008;
    ReadyMemo.Color := $000008;
//----------------------------------------------------------------------------------\\
    Font.Color := clYellow;
    // запускам
    IsPicInit(Handle);
  end;
//----------------------------------------------------------------------------------\\
  // добавляем изображение на задний фон
  IsPicAddImg(ExpandConstant('{tmp}\fon.bmp'));
//----------------------------------------------------------------------------------\\
end;

procedure DeinitializeSetup();
begin
  // завершаем работу
  IsPicDeInit;
end;
 

Shift85

Старожил
sergey3695, Еще небольшой вопросик с библиотекой ISSkin.dll она дружи;)т или нет
 

LexBell

Борода
Супер модератор
зависит от скина, были проблемы, которые я так и не смог победить. например, когда цвет в скине задается картинкой - высока вероятность отсутствия этой самой дружбы. пример - скин Tiger. на нем помнится были косяки довольно неприятные.
 

sergey3695

Ветеран
Модератор
например, когда цвет в скине задается картинкой - высока вероятность отсутствия этой самой дружбы
Хммм...:o (кнопок невидно из-за измененного размера формы, т.к. по умолчанию фокус на nextbutton я перелистывал все страницы и проверял завершение работы. при использовании procedure LoadSkin на selectdirpage при использовании крестика для закрытия установщик закрывался аварийно. при использование скрипта ниже проблем не обнаружено. скрины только welcomepage)
-------------- Shift85, Так без ошибок при завершении работает!
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source: ISSkinExU.dll; DestDir: {app}; Flags: dontcopy
Source: Skin.cjstyles; DestDir: {tmp}; Flags: dontcopy
Source : IsPicture2.dll; Flags : dontcopy;
Source: fon.bmp; Flags: dontcopy

[ code]
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

var DLLHandle:integer;

//----------------------------------------------------------------------------------\\
const   // жирность шрифта
  FW_DONTCARE   = 0;
  FW_THIN       = 100;
  FW_ULTRALIGHT = 200;
  FW_LIGHT      = 300;
  FW_NORMAL     = 400;
  FW_MEDIUM     = 500;
  FW_DEMIBOLD   = 600;
  FW_BOLD       = 700;
  FW_ULTRABOLD  = 800;
  FW_BLACK      = 900;

procedure IsPicInit(Handle : HWND);
   external 'IsPicInit@files:IsPicture2.dll stdcall delayload';
  // начало работы
  
procedure IsPicAddImg(fName : AnsiString); 
   external 'IsPicAddImg@files:IsPicture2.dll stdcall delayload';
  // изображение на заднем фоне
  
procedure IsPicAddVideo(fName : AnsiString; l, t, w, h : Integer); 
   external 'IsPicAddVideo@files:IsPicture2.dll stdcall delayload';
  // видео на заднем фоне
  
function IsPicReFont(height, Weight : Integer; Italic : Boolean) : HWND;
   external 'IsPicReFont@files:IsPicture2.dll stdcall delayload';
  // подмена шрифта для борьбы с артефактами сглаживания
  // height - Font.Height
  // Weight - жирность
  // Italic - наклонность
  
procedure IsPicStopVideo;
   external 'IsPicStopVideo@files:IsPicture2.dll stdcall delayload';
  // остановка воспроизведения видео - после этой команды
  // видео будет перемотано на начало и поставлено на паузу
  
procedure IsPicPauseVideo(play : Boolean);
   external 'IsPicPauseVideo@files:IsPicture2.dll stdcall delayload';
  // пауза видео
  // play -
  // если значение True, то продолжаем воспроизводить
  // если значение False, то ставим на паузу
  
procedure IsPicSetVolume(volume : Integer);
   external 'IsPicSetVolume@files:IsPicture2.dll stdcall delayload';
  // громкость видео от -10000 до 0.
  // -10000 - минимальное значение
  // 0 - максимальное значение
  
procedure IsPicDeInit;
   external 'IsPicDeInit@files:IsPicture2.dll stdcall delayload';
  // не забываем вызвать в DeinitializeSetup
//----------------------------------------------------------------------------------\\

procedure InitializeWizard();
begin
  ExtractTemporaryFile('fon.bmp');
  with WizardForm do
  begin
  Width:= ScaleX(504);
  Height:= ScaleY(341);
    WizardBitmapImage.Free;
    WizardBitmapImage2.Free;

//----------------------------------------------------------------------------------\\
  // подменяем шрифты
    Font.Handle := IsPicReFont(Font.Height, FW_DEMIBOLD, False);
    WelcomeLabel1.Font.Handle := IsPicReFont(WelcomeLabel1.Font.Height, FW_BOLD, False);
    PageNameLabel.Font.Handle := IsPicReFont(PageNameLabel.Font.Height, FW_BOLD, False);
    FinishedHeadingLabel.Font.Handle := IsPicReFont(FinishedHeadingLabel.Font.Height, FW_BOLD, False);
//----------------------------------------------------------------------------------\\
 //----------------------------------------------------------------------------------\\
   // цвет прозрачности - $000008. Указываем его для элементов,которые должны быть прозрачными
    Color := $000008;
    WelcomePage.Color := $000008;
    InnerPage.Color := $000008;
    FinishedPage.Color := $000008;
    MainPanel.Color := $000008;
    DirEdit.Color := $000008;
    ReadyMemo.Color := $000008;
//----------------------------------------------------------------------------------\\
    Font.Color := clYellow;
    // запускам
    IsPicInit(Handle);
  end;
//----------------------------------------------------------------------------------\\
  // добавляем изображение на задний фон
  IsPicAddImg(ExpandConstant('{tmp}\fon.bmp'));
//----------------------------------------------------------------------------------\\
end;

function InitializeSetup(): Boolean;
var
	ErrorCode: Integer;
	s1,s2: String;
begin
	result:=True;
	try
		ExtractTemporaryFile('isskinexU.dll');
		DLLHandle:=LoadDLL(ExpandConstant('{tmp}\isskinexU.dll') , ErrorCode);
		if (DLLHandle > 0) then
    begin
			ExtractTemporaryFile('Skin.cjstyles');
			s1:=ExpandConstant('{tmp}\Skin.cjstyles');
			s2:='';
			if not CallDLLProc(DLLHandle,'LoadSkin',CastStringToInteger(s1), CastStringToInteger(s2), ErrorCode) then
			begin
				//    Failed :(
			end;
		end else
		begin
			// Failed :(
		end;
	except
	end;
end;

procedure DeinitializeSetup();
var
  ErrorCode: Integer;
begin
	try
		if DLLHandle > 0 then
		begin
			ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
			CallDLLProc(DLLHandle,'UnloadSkin',0, 0,ErrorCode);
			FreeDLL(DLLHandle);
			DeleteFile(ExpandConstant('{tmp}\ISSkinExU.dll'));
		end;
	except
	end;
  IsPicDeInit;
  // завершаем работу
end;
 
Последнее редактирование:

Shift85

Старожил
Обнаружил косяк в библиотеке при добавлении Position:=poScreenCenter;

Выходит вот что ff06395cdc.jpg
 

sergey3695

Ветеран
Модератор
Shift85, ну не используй данную строчку. я решение не знаю. правда если будешь использовать сворачивание в угол установшика, то скрипт надо будет слегка переделать.
 

sergey3695

Ветеран
Модератор
Shift85, вот со скином и сворачиванием.
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source: ISSkinExU.dll; DestDir: {app}; Flags: dontcopy
Source: Skin.cjstyles; DestDir: {tmp}; Flags: dontcopy
Source : IsPicture2.dll; Flags : dontcopy;
Source: fon.bmp; Flags: dontcopy

[ code]
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

var DLLHandle:integer;

//----------------------------------------------------------------------------------\\
const   // жирность шрифта
  FW_DONTCARE   = 0;
  FW_THIN       = 100;
  FW_ULTRALIGHT = 200;
  FW_LIGHT      = 300;
  FW_NORMAL     = 400;
  FW_MEDIUM     = 500;
  FW_DEMIBOLD   = 600;
  FW_BOLD       = 700;
  FW_ULTRABOLD  = 800;
  FW_BLACK      = 900;

procedure IsPicInit(Handle : HWND);
   external 'IsPicInit@files:IsPicture2.dll stdcall delayload';
  // начало работы

procedure IsPicAddImg(fName : AnsiString);
   external 'IsPicAddImg@files:IsPicture2.dll stdcall delayload';
  // изображение на заднем фоне

procedure IsPicAddVideo(fName : AnsiString; l, t, w, h : Integer);
   external 'IsPicAddVideo@files:IsPicture2.dll stdcall delayload';
  // видео на заднем фоне

function IsPicReFont(height, Weight : Integer; Italic : Boolean) : HWND;
   external 'IsPicReFont@files:IsPicture2.dll stdcall delayload';
  // подмена шрифта для борьбы с артефактами сглаживания
  // height - Font.Height
  // Weight - жирность
  // Italic - наклонность

procedure IsPicStopVideo;
   external 'IsPicStopVideo@files:IsPicture2.dll stdcall delayload';
  // остановка воспроизведения видео - после этой команды
  // видео будет перемотано на начало и поставлено на паузу

procedure IsPicPauseVideo(play : Boolean);
   external 'IsPicPauseVideo@files:IsPicture2.dll stdcall delayload';
  // пауза видео
  // play -
  // если значение True, то продолжаем воспроизводить
  // если значение False, то ставим на паузу

procedure IsPicSetVolume(volume : Integer);
   external 'IsPicSetVolume@files:IsPicture2.dll stdcall delayload';
  // громкость видео от -10000 до 0.
  // -10000 - минимальное значение
  // 0 - максимальное значение

procedure IsPicDeInit;
   external 'IsPicDeInit@files:IsPicture2.dll stdcall delayload';
  // не забываем вызвать в DeinitializeSetup
//----------------------------------------------------------------------------------\\

var
ResizeButton: TButton;
PageResized: Boolean;

function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure MinimizeInstallPage();
begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
MainForm.Width:=ScaleX(395);
MainForm.Height:=ScaleY(142);
MainForm.Left:=GetSystemMetrics(16)-ScaleX(420);
MainForm.Top:=GetSystemMetrics(17)-ScaleX(150);
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=GetSystemMetrics(16)-ScaleX(420);
WizardForm.Top:=GetSystemMetrics(17)-ScaleX(150);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(220);
WizardForm.CancelButton.Top:=ScaleY(80);
WizardForm.CancelButton.BringToFront;
ResizeButton.Left:= ScaleX(60);
ResizeButton.Top:= ScaleY(80)
ResizeButton.Caption:= 'Normalize';
PageResized:= True;
end;

procedure ResumeInstallPage();
begin
MainForm.Center;
WizardForm.Center;
MainForm.Width:=ScaleX(503);
MainForm.Height:=ScaleY(388);
WizardForm.Width:= ScaleX(503);
WizardForm.Height:= ScaleY(388);
WizardForm.MainPanel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(58));
WizardForm.MainPanel.Show;
WizardForm.Bevel1.Show;
WizardForm.InnerNotebook.SetBounds(ScaleX(40), ScaleY(72), ScaleX(417), ScaleY(237));
WizardForm.StatusLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(16));
WizardForm.FilenameLabel.SetBounds(ScaleX(0), ScaleY(16), ScaleX(417), ScaleY(16));
WizardForm.ProgressGauge.SetBounds(ScaleX(0), ScaleY(42), ScaleX(417), ScaleY(21));
WizardForm.CancelButton.SetBounds(ScaleX(412), ScaleY(327), ScaleX(75), ScaleY(23));
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.Caption:= 'Minimize';
PageResized:= False;
end;

procedure ResizeButtonOnClick(Sender: TObject);
begin
If PageResized then
ResumeInstallPage
else
MinimizeInstallPage;
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('fon.bmp');

ResizeButton:= TButton.Create(WizardForm);
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.OnClick:= @ResizeButtonOnClick
ResizeButton.Caption:= 'Minimize';
ResizeButton.Hide;
ResizeButton.Parent:= WizardForm;

  with WizardForm do
  begin
  Width:= ScaleX(503);
  Height:= ScaleY(388);
    WizardBitmapImage.Free;
    WizardBitmapImage2.Free;

//----------------------------------------------------------------------------------\\
  // подменяем шрифты
    Font.Handle := IsPicReFont(Font.Height, FW_DEMIBOLD, False);
    WelcomeLabel1.Font.Handle := IsPicReFont(WelcomeLabel1.Font.Height, FW_BOLD, False);
    PageNameLabel.Font.Handle := IsPicReFont(PageNameLabel.Font.Height, FW_BOLD, False);
    FinishedHeadingLabel.Font.Handle := IsPicReFont(FinishedHeadingLabel.Font.Height, FW_BOLD, False);
//----------------------------------------------------------------------------------\\
 //----------------------------------------------------------------------------------\\
   // цвет прозрачности - $000008. Указываем его для элементов,которые должны быть прозрачными
    Color := $000008;
    WelcomePage.Color := $000008;
    InnerPage.Color := $000008;
    FinishedPage.Color := $000008;
    MainPanel.Color := $000008;
    DirEdit.Color := $000008;
    ReadyMemo.Color := $000008;
//----------------------------------------------------------------------------------\\
    Font.Color := clYellow;
    // запускам
    IsPicInit(Handle);
  end;
//----------------------------------------------------------------------------------\\
  // добавляем изображение на задний фон
  IsPicAddImg(ExpandConstant('{tmp}\fon.bmp'));
//----------------------------------------------------------------------------------\\
end;

function InitializeSetup(): Boolean;
var
	ErrorCode: Integer;
	s1,s2: String;
begin
	result:=True;
	try
		ExtractTemporaryFile('isskinexU.dll');
		DLLHandle:=LoadDLL(ExpandConstant('{tmp}\isskinexU.dll') , ErrorCode);
		if (DLLHandle > 0) then
    begin
			ExtractTemporaryFile('Skin.cjstyles');
			s1:=ExpandConstant('{tmp}\Skin.cjstyles');
			s2:='';
			if not CallDLLProc(DLLHandle,'LoadSkin',CastStringToInteger(s1), CastStringToInteger(s2), ErrorCode) then
			begin
				//    Failed :(
			end;
		end else
		begin
			// Failed :(
		end;
	except
	end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
ResizeButton.Hide;
if CurPageID = wpInstalling then ResizeButton.Show;
if CurPageID = wpFinished then begin
if PageResized then
ResumeInstallPage();
end;
end;

procedure DeinitializeSetup();
var
  ErrorCode: Integer;
begin
	try
		if DLLHandle > 0 then
		begin
			ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
			CallDLLProc(DLLHandle,'UnloadSkin',0, 0,ErrorCode);
			FreeDLL(DLLHandle);
			DeleteFile(ExpandConstant('{tmp}\ISSkinExU.dll'));
		end;
	except
	end;
  IsPicDeInit;
  // завершаем работу
end;
 

LexBell

Борода
Супер модератор
Обнаружил косяк в библиотеке при добавлении Position:=poScreenCenter;
Попробуй в самом начале initializewizard эту строчку дать. До того, как используется хоть какая-либо функция библиотеки.

sergey3695, именно аварийное завершение мне присылали, помнится. так-же с wintb должно конфликтовать либо глючить. проблема в использовании главной формы, еще south в свое время обратил внимание, что как только свяжешься с MainForm, так получай партию глюков.
 
Последнее редактирование:

Shift85

Старожил
sergey3695, А можно как нибудь кнопки через bmp наложить или библиотека непотдерживает...:unknown:

Попробуй в самом начале initializewizard эту строчку дать. До того, как используется хоть какая-либо функция библиотеки.
Попрежнему также несработало...
 
Последнее редактирование:

sergey3695

Ветеран
Модератор
Shift85, если ispicture2, то там нет такого функционала. Кнопки также накладывай как обычно на wizardform, все должно работать.
Я там заменил poscreencenter на wizardform.center (передняя форма) и mainform.center (задняя форма). (Сообщение #30)
 
Последнее редактирование:

Shift85

Старожил
Я там заменил poscreencenter на wizardform.center (передняя форма) и mainform.center (задняя форма).
Поподробней можно где че менять:unknown:

Как увеличить прорисовку бевелов и текста при запуске инсталла никто не в курсе. Скорость прорисовки конечно хромает...:(

Как прописать в этой строчке размеры изображения. Зарание спасибо...

IsPicAddImg(ExpandConstant('{tmp}\fon.bmp'));
 
Последнее редактирование модератором:

LexBell

Борода
Супер модератор
Shift85, Для изображения не предусмотрена возможность изменения размеров и не планируется. Можно самостоятельно разместить свое изображение на MainForm. Например так:
Код:
var
  BitmapImage: TBitmapImage;

procedure InitializeWizard();
begin
  BitmapImage := TBitmapImage.Create(MainForm);
  with BitmapImage do
  begin
    Parent := MainForm;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
    SetBounds(ScaleX(72), ScaleY(313), ScaleX(105), ScaleY(105));
  end;
end;
 

Shift85

Старожил
Возник вопрос после применения жирности шрифта и меняется шрифт чтоли не пойму если да то где его прописать.
Или жирность только для видео нужна и подмена шрифта.
 
Последнее редактирование:

LexBell

Борода
Супер модератор
Shift85, шрифт элемента, на котором заменяешь шрифт:
Код:
font.name := 'имя шрифта';
это единственное, где можно поменять. делать это еще и в библиотеке я лично не увидел смысла. все остальные параметры есть в примере, в описаниях функции:
Код:
function IsPicReFont(height, Weight : Integer; Italic : Boolean) : HWND;
   external 'IsPicReFont@files:IsPicture2.dll stdcall delayload';
  // подмена шрифта для борьбы с артефактами сглаживания
  // height - Font.Height
  // Weight - жирность
  // Italic - наклонность
 

Shift85

Старожил
LexBell,
шрифт элемента, на котором заменяешь шрифт:
Код:
with WelcomeLabel1 do begin
AutoSize:=False;
SetBounds(ScaleX(30), ScaleY(165), ScaleX(540), ScaleY(50));
WordWrap:=True;
//Alignment := taCenter;
//Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 14;
Font.Color:=$FFFFFF;
//Font.Style:=[fsBold];
Caption:= ExpandConstant('{cm:WelcomeLabel1}');
Parent:=WizardForm;
end;
Далее: WelcomeLabel1.Font.Handle := IsPicReFont(WelcomeLabel1.Font.Height, FW_BOLD, False);

Результат не работает
ff06395cdc.jpg
 
Сверху