Вопрос Изменение лого при наведении курсора

tihiy_don

Старожил
Здравствуйте! Никто не может подсказать событие, отвечающее за наведение ссылки на курсор мышки на мою ссылку с лого? Мне необходимо сделать так, что при наведении курсора на лого с ссылкой оно изменялось на другой рисунок (по аналогии с эффектом гиперссылки пр наведении на неё в html).

Код:
#include "Modules\botva2.iss"

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=...

[Languages]
Name: english; MessagesFile: compiler:Default.isl

[Files]
Source: Files\GLogo.png;  Flags: dontcopy;
Source: Files\botva2.dll; Flags: dontcopy;
Source: Files\b2p.dll; Flags: dontcopy;
Source: Files\botva2.dll; DestDir:{app}
Source: Files\b2p.dll; DestDir:{app}
Source: Files\GLogo.png; DestDir: {app};

[*Code]
var
CreateLogo: Longint;
ResultCode: Integer;

function InitializeSetup:boolean;
begin
   if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
   if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
   Result:=True;
end;

procedure LogoLabelOnClick(Sender: TObject);
begin
  ShellExec('open', 'http://krinkels.org/', '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
end;

procedure InitializeWizard;
begin
  ExtractTemporaryFile('GLogo.png')
  CreateLogo:= ImgLoad(WizardForm.handle, ExpandConstant('{tmp}\GLogo.png'), ScaleX(5), ScaleY(325), ScaleX(170), ScaleY(34), True, True);
  ImgApplyChanges(WizardForm.Handle);

  with TLabel.Create(WizardForm) do begin
    Parent:=WizardForm;
    AutoSize:=False;
    Transparent:= true;
    SetBounds(ScaleX(5), ScaleY(325), ScaleX(170), ScaleY(34));
    OnClick:=@LogoLabelOnClick;
    Cursor:= CrHand;
  end;
end;

procedure DeinitializeSetup();
begin
  gdipShutdown;
end;


function InitializeUninstall: Boolean;
begin
  FileCopy(ExpandConstant('{app}\b2p.dll'), ExpandConstant('{tmp}\b2p.dll'), False);
  FileCopy(ExpandConstant('{app}\botva2.dll'), ExpandConstant('{tmp}\botva2.dll'), False);
  FileCopy(ExpandConstant('{app}\GLogo.png'), ExpandConstant('{tmp}\GLogo.png'), False);
  Result := True;
end;

procedure UnLogoLabelOnClick(Sender: TObject);
begin
  ShellExec('open', 'http://krinkels.org/', '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
end;

procedure InitializeUninstallProgressForm;
begin
  CreateLogo:= ImgLoad(UninstallProgressForm.Handle, ExpandConstant('{tmp}\GLogo.png'), ScaleX(5), ScaleY(325), ScaleX(170), ScaleY(34), True, True);
  ImgApplyChanges(UninstallProgressForm.Handle);

  with TLabel.Create(nil) do
  begin
    Parent:=UninstallProgressForm;
    AutoSize:=False;
    Transparent:= true;
    SetBounds(ScaleX(5), ScaleY(325), ScaleX(170), ScaleY(34));
    OnClick:=@UnLogoLabelOnClick;
    Cursor:= CrHand;
  end;
end;

procedure DeinitializeUninstall();
begin
  gdipShutdown;
end;
 

Nemko

Дилетант
Модератор
Никто не может подсказать событие, отвечающее за наведение ссылки на курсор мышки на мою ссылку с лого?
tihiy_don, думаю, что при наведении курсора на TObject, если так то вот (но пример с использованием ImgSetVisiblePart, имхо так практичнее):

З.Ы.: Restool версия нужна будет, так как Inno оригинал не знает OnMouseLeave для TLabel,можно сабклассинг TPanel сделать с вырезанием фона и туда накладывать Img, где-то на форуме South давал пример.
 

Вложения

  • 33 KB Просмотры: 14

tihiy_don

Старожил
@Nemko, а если просто событие при клике, то без Restool версии можно обойтись? Не могу что-то я отыскать Restool версию, чем она от обычной отличается?
 

JEKE24

Новичок
@Nemko, а если просто событие при клике, то без Restool версии можно обойтись? Не могу что-то я отыскать Restool версию, чем она от обычной отличается?
->Restool- Содержит более удобный редактор, дизайнер диалогов, шаблоны коды и множество других возможностей.
 

tihiy_don

Старожил
Попробовал скомпилировать код примера в версии Restool, выдаёт ошибку на OnMouseLeave.
 

Вложения

tihiy_don

Старожил
@Nemko, К сожалению, нет прав для скачивания. Придётся тогда оставить только картинку с текстом без эффектов.
 

haroun

Мимокрокодил
tihiy_don, думаю, что при наведении курсора на TObject, если так то вот (но пример с использованием ImgSetVisiblePart, имхо так практичнее):

З.Ы.: Restool версия нужна будет, так как Inno оригинал не знает OnMouseLeave для TLabel,можно сабклассинг TPanel сделать с вырезанием фона и туда накладывать Img, где-то на форуме South давал пример.
Hope is what I want
 

Nemko

Дилетант
Модератор
tihiy_don, вот пример с прозрачным TPanel (пример от South) с перехватыванием оконных сообщений (Msg). Все можете развить и дописать под себя и должно работать даже на оригинальной Inno Setup:
 

Вложения

tihiy_don

Старожил
@Nemko, Большое спасибо за предоставленный пример, заодно разобрался как скрывать верхнюю и нижнюю панель. Буду разбираться. :yes:
 

tihiy_don

Старожил
Ребят, никто не знает каким образом можно отключить верхнюю и нижнюю панель только на странице приветствия? У меня никаких не получается, вот мой код:
Код:
with WizardForm.WelcomePage do
  begin
  WizardForm.Bevel1.visible:=False;
  WizardForm.Bevel.visible:=False;
  OuterNotebook.Hide;
  end;
 

sergey3695

Ветеран
Модератор
@tihiy_don,
Код:
[Setup]
AppName=Example
AppVerName=Example 1.0
DefaultDirName={pf}\MainForm
DisableWelcomePage=no
OutputDir=.

[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.Bevel1.visible:=True;
  WizardForm.Bevel.visible:=True;
  WizardForm.OuterNotebook.Show;
if CurPageID=wpWelcome then
  begin
  WizardForm.Bevel1.visible:=False;
  WizardForm.Bevel.visible:=False;
  WizardForm.OuterNotebook.Hide;
end;
end;
 

tihiy_don

Старожил
@sergey3695, Получилось, но теперь внизу всё черное где кнопки, картинку растянул вниз, но всёравно остаётся там черное место :)

Картинка на странице приветствия вставлена через:
WizardImageFile=Img\WizardImage.bmp

1609843744570.png
 
Последнее редактирование:

tihiy_don

Старожил
Попробовал сделать так, выходит точно также.


Код:
  LogoImage:= TBitmapImage.Create(WizardForm);
  LogoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardImage.bmp'));
  LogoImage.SetBounds(0, 0, 497, 360);
  LogoImage.Stretch:= true
  LogoImage.Parent:= WizardForm.WelcomePage;
 

sergey3695

Ветеран
Модератор
@tihiy_don,
Код:
procedure InitializeWizard();
begin
 WizardForm.WizardBitmapImage.Width:= WizardForm.Width;
 WizardForm.WizardBitmapImage.Height:= WizardForm.Height;
 WizardForm.WizardBitmapImage.Stretch:= True;
end;
 

Edison007

Ветеран
Модератор
У вас родитель изображения - WizardForm.WelcomePage, а у неё размер меньше самой формы. либо скрывать и переносить на WizardForm, либо пробовать растянуть welcomepage, но тогда скорее всего не будет видно кнопок, не уверен т.к очень давно инкой не пользовался
 

tihiy_don

Старожил
У вас родитель изображения - WizardForm.WelcomePage, а у неё размер меньше самой формы. либо скрывать и переносить на WizardForm, либо пробовать растянуть welcomepage, но тогда скорее всего не будет видно кнопок, не уверен т.к очень давно инкой не пользовался
То-есть даже если сделать таким способом, то не прокатит на странице приветствия?

Код:
 LogoImage:= TBitmapImage.Create(WizardForm);
  LogoImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardImage.bmp'));
  LogoImage.SetBounds(0, 0, 497, 360);
  LogoImage.Stretch:= true
  LogoImage.Parent:= WizardForm.WelcomePage;
 

sergey3695

Ветеран
Модератор
@tihiy_don,
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
WizardImageFile=Img\WizardImage.bmp
OutputDir=.

[code]
procedure InitializeWizard();
begin
with WizardForm.WizardBitmapImage do
begin
  Width:= WizardForm.Width;
  Height:= WizardForm.Height;
  Stretch:= True;
  Parent:= WizardForm;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.WizardBitmapImage.Hide;
  WizardForm.Bevel1.visible:=True;
  WizardForm.Bevel.visible:=True;
  WizardForm.OuterNotebook.Show;
if CurPageID=wpWelcome then
begin
  WizardForm.Bevel1.visible:=False;
  WizardForm.Bevel.visible:=False;
  WizardForm.OuterNotebook.Hide;
  WizardForm.WizardBitmapImage.Show;
end;
end;
 
Сверху