Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]
Как в юникоде сделать кликабельные иконки? »Не буду я возиться с вашим обрубком.
#define Bitmap "Logo.bmp"
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
[Files]
Source: {#Bitmap}; Flags: dontcopy solidbreak
[Code]
var
BitmapImage1: TBitmapImage;
EC: Integer;
procedure Bitmap1Click(Sender: TObject); forward;
procedure InitializeWizard();
begin
BitmapImage1 := TBitmapImage.Create(WizardForm);
with BitmapImage1 do
begin
Parent := WizardForm;
Left := ScaleX(24);
Top := ScaleY(320);
Width := ScaleX(105);
Height := ScaleY(33);
Cursor := crHand;
OnClick := @Bitmap1Click;
ExtractTemporaryFile('{#Bitmap}');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\{#Bitmap}'));
end;
end;
procedure Bitmap1Click(Sender: TObject);
begin
ShellExec('open', 'http://forum.oszone.net/', '', '', SW_SHOWNORMAL, ewNoWait, EC);
end;
#define Bitmap "Logo.bmp"
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
[Files]
Source: {#Bitmap}; Flags: dontcopy solidbreak
[Code]
var
Panel1: TPanel;
BitmapImage1: TBitmapImage;
EC: Integer;
procedure Panel1Click(Sender: TObject); forward;
procedure InitializeWizard();
begin
Panel1 := TPanel.Create(WizardForm);
with Panel1 do
begin
Parent := WizardForm;
Left := ScaleX(16);
Top := ScaleY(318);
Width := ScaleX(185);
Height := ScaleY(41);
end;
BitmapImage1 := TBitmapImage.Create(WizardForm);
with BitmapImage1 do
begin
Parent := Panel1;
Left := ScaleX(4);
Top := ScaleY(4);
Width := ScaleX(178);
Height := ScaleY(34);
Cursor := crHand;
OnClick := @Panel1Click;
ExtractTemporaryFile('{#Bitmap}');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\{#Bitmap}'));
end;
end;
procedure Panel1Click(Sender: TObject);
begin
ShellExec('open', 'http://forum.oszone.net/', '', '', SW_SHOWNORMAL, ewNoWait, EC);
end;
Код работает на обеих версиях.
Kashtan007
13-07-2014, 17:53
Доброго времени суток, наткнулся на такую проблему.
Как сделать эти 2 строки прозрачные?
http://rghost.ru/56872571/image.png
В редакторе форм они не отображаются... Пытался через код: ModCheck.Transparent := True;, выдает ошибку (Версия Unicode). Как можно по другому сделать эти 2 строки прозрачные? Заранее спасибо за ответ!
P.S. Dodakaedr, Nordek, Shift85, habib2302. Большое спасибо за помощь! Благодаря вам я наконец-то сделал практически все, что хотел в своем установщике)
Как сделать эти 2 строки прозрачные? »
Пример.
SoftLabel:= TLabel.Create(WizardForm);
with SoftLabel do begin
Parent:=WizardForm;
SetBounds(ScaleX(280), ScaleY(316), ScaleX(450), ScaleY(17));
AutoSize:=False
WordWrap:=True
Transparent:=True
Font.Name:= 'Tahoma';
Font.Size:= 7;
Font.Color:= clGray;
Font.Style := [fsBold];
OnClick:= @SoftLabelClick;
Caption:= ExpandConstant('{cm:SoftTask}');
end;
Результат.
Kashtan007
13-07-2014, 18:15
Shift85, спасибо, но так и не получилось применить. Выдает ошибку.
Вот эти 2 строки, которые я хочу сделать прозрачными:
begin
ModCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
ModCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
ModCheck.Parent := PageFromID(wpSelectDir).Surface;
ModCheck.Caption:='Удалить все старые моды';
ModCheck.left:=wizardForm.DirEdit.left;
ModCheck.Top:=wizardForm.DirEdit.top + ScaleY(30);
BackupCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
BackupCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
BackupCheck.Parent := PageFromID(wpSelectDir).Surface;
BackupCheck.Caption:='Сохранить резервную копию старых модов';
BackupCheck.left:=wizardForm.DirEdit.left;
BackupCheck.Top:=ModCheck.top + ScaleY(30);
end;
habib2302
13-07-2014, 22:04
Kashtan007, а если так
begin
ModCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
ModCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
ModCheck.Parent := PageFromID(wpSelectDir).Surface;
ModCheck.Caption:='Удалить все старые моды';
ModCheck.left:=wizardForm.DirEdit.left;
ModCheck.Top:=wizardForm.DirEdit.top + ScaleY(30);
ModCheck.Transparent:=True
BackupCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
BackupCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
BackupCheck.Parent := PageFromID(wpSelectDir).Surface;
BackupCheck.Caption:='Сохранить резервную копию старых модов';
BackupCheck.left:=wizardForm.DirEdit.left;
BackupCheck.Top:=ModCheck.top + ScaleY(30);
BackupCheck.Transparent:=True
end;
Kashtan007
13-07-2014, 22:14
habib2302, пробовал уже так(
Ошибку выдает, хотя компилирую на юникоде
http://rghost.ru/56877006/image.png
Ошибку выдает, хотя компилирую на юникоде »
Kashtan007, Попробуй на анси.
habib2302
13-07-2014, 22:18
Kashtan007, а если просто так
Transparent:=True
ну или юзать TransparentStatic
http://forum.oszone.net/post-2374802-1103.html
Kashtan007
13-07-2014, 22:34
Shift85, на анси та же ошибка.
Kashtan007, Тогда попробуй переделать. Заменить чекбоксы на лейблы. Как у меня в примере выше.
но теперь я не могу изменить цвет шрифта и размер. »
Как вариант:
#define Bitmap2 "SmallImage.bmp"
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
[Files]
Source: {#Bitmap2}; Flags: dontcopy solidbreak
[Code]
var
Panel1: TPanel;
BitmapImage1: TBitmapImage;
Label1: TLabel;
Label2: TLabel;
procedure InitializeWizard();
begin
WizardForm.MainPanel.Hide;
Panel1 := TPanel.Create(WizardForm);
with Panel1 do
begin
Parent := WizardForm.InnerPage;
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(497);
Height := ScaleY(59);
end;
BitmapImage1 := TBitmapImage.Create(WizardForm);
with BitmapImage1 do
begin
Parent := Panel1;
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(497);
Height := ScaleY(57);
ExtractTemporaryFile('{#Bitmap2}');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\{#Bitmap2}'));
end;
Label1 := TLabel.Create(WizardForm);
with Label1 do
begin
Font.Color := clRed;
Font.Size := 12;
Font.Style := [fsBold];
Parent := Panel1;
Transparent := True;
Left := ScaleX(24);
Top := ScaleY(10);
Width := ScaleX(405);
Height := ScaleY(14);
end;
Label2 := TLabel.Create(WizardForm);
with Label2 do
begin
Font.Color := clBlue;
Font.Size := 12;
Parent := Panel1;
Transparent := True;
Left := ScaleX(40);
Top := ScaleY(26);
Width := ScaleX(389);
Height := ScaleY(29);
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
Label1.Caption:=WizardForm.PageNameLabel.Caption
Label2.Caption:=WizardForm.PageDescriptionLabel.Caption
end;
El Sanchez
14-07-2014, 12:33
похоже на то, что нужно »
Shkutu, шлак это, а не функция, как оказалось.
Для того, чтобы узнать, что вводимый путь был корректным, его можно сравнить с тем, что получается в результате функции и кладется во 2й параметр.»
Shkutu, сравнивать бестолку, например, допустимый путь С:\\\\\\test функция возвратит как C:\test.
для корректной работы функции, надо чтобы размер второй строки был больше длины изначальной. »
Shkutu, размер буфера в 260 для ANSI, 32767 для Unicode, лишнее потом отрезать.
Но, как я уже сказал, функция не годится, слишком корявый у нее принцип работы, тут нужно парсить путь с помощью регулярных выражений. У меня пока не получилось написать регулярку, учитывающую все варианты, а существующие решения далеки от идеала.
El Sanchez, видимо недостаток образования, но не знала, что С:\\\\\\test - это корректный путь. Думала, функция как раз убирает лишние слеши и точки/запятые. На недопустимые символы, типа *,<,> и т д там проверки нет. Впрочем в комментариях сказано, что среди Вин Апи функций вообще нет ни одной для валидации пути, вводимого пользователем. Так что видимо и правда из вариантов только свою делать.
написать регулярку, учитывающую все варианты »
Не уверена, что такое в принципе бывает. :) Там же многое зависит от системы и фиг знает чего еще.
лишнее потом отрезать »
А вот про это можно подробнее? Или банальный copy должен прокатить?
El Sanchez
14-07-2014, 19:55
А вот про это можно подробнее? Или банальный copy должен прокатить? »
Shkutu, имеется в виду, что буфер по максимуму в 260 символов, а PathSearchAndQualify заполнит его не весь (не все ж пути такие длинные), хвост нужно будет убирать. Буфер лучше всего создавать с помощью StringOfChar, хвост из нулевых символов убрать Trim-ом. Если бы PathSearchAndQualify работала по-человечески, то задачу можно было бы решить вот так:
#define A = (Defined UNICODE) ? "W" : "A"
function PathSearchAndQualify(pcszPath: String; pszFullyQualifiedPath: String; cchFullyQualifiedPath: UINT): BOOL; external 'PathSearchAndQualify{#A}@shlwapi.dll stdcall';
////////////////////////////////////////////////////////////////////////////////////////
function IsValidFileName(const FileName: String; var CorrectFileName: String): Boolean;
begin
CorrectFileName := StringOfChar(#0, 260);
Result := PathSearchAndQualify(FileName, CorrectFileName, Length(CorrectFileName));
CorrectFileName := Trim(CorrectFileName);
end;
/////////////////////////////
procedure InitializeWizard();
var
s: String;
begin
if IsValidFileName('C:\\\\\test', s) then
MsgBox(s, mbInformation, MB_OK);
end;
Народ спасайте помогите прикрутить страницу компонентов к этому скрипту с выбором компонентов и отображение картинки и описание компонента
Скрипт - Ссылка (https://yadi.sk/d/IcZHXrQUWUaf9)
Скрипт (примера компонентов) - Ссылка (https://yadi.sk/d/LG2kIDa4WUaiz)
Скриншот примерно как должна выглядит страницы https://yadi.sk/i/l8EtFfw3WcADH
Заранее большое спасибо, мучаюсь очень долго не могу понять как правильно прописать вывод компонентов страницы
El Sanchez, пробовала тримить, хвост не убирается, ни если длину строки setlength'ом задавать, ни с помощью StringOfChar.
А вот еще вопрос. Можно как-то на страницу компонентов к этим самым компонентам хинты прикрутить?
El Sanchez
15-07-2014, 17:10
пробовала тримить, хвост не убирается »
Shkutu, все там убирается, не так что-то проверяете.
ни если длину строки setlength'ом задавать »
Shkutu, SetLength вообще не рекомендую для выделения буфера, ибо строка будет инициализирована в свободном участке памяти, полном всякого мусора.
Можно как-то на страницу компонентов к этим самым компонентам хинты прикрутить? »
Shkutu, для ComponentsList установить свойство ShowHint в True, в обработчике OnItemMouseMove свойству Hint уже задавать значения в зависимости от параметра Index обработчика.
все там убирается, не так что-то проверяете »
Ну например вот так:
function PathSearchAndQualify(pszPath, qPath: String; qPbuf:integer): BOOL;
external 'PathSearchAndQualifyA@Shlwapi.dll stdcall delayload';
procedure InitializeWizard;
var s:string;
i:integer;
begin
s:=StringOfChar(#0,256);
PathSearchAndQualify('d:\\sss', s, length(s));
MsgBox(inttostr(length(s)), mbInformation, MB_OK);
Trim(s);
MsgBox(inttostr(length(s)), mbInformation, MB_OK);
end;
Оба раза выдаст 260, можете проверить.
обработчике OnItemMouseMove »
Вот вообще не нашла такого обработчика :( Может, это в какой-то расширенной версии только есть? Или он есть и его просто в описании нет?
El Sanchez
15-07-2014, 19:53
Оба раза выдаст 260, можете проверить. »
Shkutu, вы же результат от Trim ничему не присваиваете. Должно быть s := Trim(s)
Вот вообще не нашла такого обработчика Может, это в какой-то расширенной версии только есть? »
Shkutu, да, в расширенной есть.
habib2302,
[Registry]
Root: HKLM; SubKey: SOFTWARE\Classes\SystemFileAssociations\image; ValueType: string; ValueName: TitleInfo; ValueData: prop:Dimensions; Flags: uninsdeletevalue
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC