PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 [42] 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

SatHan
05-09-2012, 16:39
нет. перед копированием переключи раскладку клавиатуры на русский. »теперь понял. Спасибо. как вариант учту, незнал. к Notepad++ просто привык, на нём работать удобнее. R.i.m.s.k.y., так бы сразу и сказал что находясь в компиляторе нужно раскладку клавиатуры переключить. а так эта инфа была для spice, да и не только к нему и к остальным тоже у меня такая пустяшная проблема не произошла б.
он у меня есть у меня ultra версия, в редакторе форм все на английском я не понимаю как с ним работать. »всё равно какая версия хоть ультра хотя макси инно один, а насчёт русского для расширенной версии, та возьми ты со старой версии например 5.4.0 из шапки в соседней теме http://forum.oszone.net/showthread.php?p=1201499#post1201499 и всё станет понятно.

Ivan_009
05-09-2012, 16:48
Небольшой вопрос а можно вместо 1 шрифта загрузить например 2 своих шрифта в инсталлятор... :search:

Snoopak96, Не работает все равно... :(

Snoopak96
05-09-2012, 19:22
Ivan_009,
скинь в лс весь проект.

vint56
05-09-2012, 20:12
Привет хотел попросить помощи дописать скрипт что не хватает для проверки места дело в том что у меня после смены языка пропадает данные размер игры и так далее.
вот скрин http://rghost.ru/40204893/image.png (http://rghost.ru/40204893.view)
вот сам скрипт http://rghost.ru/40204994

Snoopak96
05-09-2012, 21:25
vint56,
#define NeedSize 4380
#define NeedInstallSize 47890
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source: Russian.isl; DestDir: {tmp}
Source: English.isl; DestDir: {tmp}


[_Code]
var
SettingButton: TButton;
Flag, SetParameters: Boolean;
LangFile: String;
SizePanel: TPanel;

TotalSpaceLabel, FreeSpaceLabel,InstallSpaceLabel, NeedSpacelabel,
TotalSpaceLabel2, FreeSpaceLabel2, NeedSpacelabel2, InstallSpaceLabel2: TLabel;
FreeMB, TotalMB: Cardinal;

function NumToStr(Float: Extended): String;
begin
Result:= format('%.2n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0')or(Result[Length(Result)] = '.'))and(Pos('.', Result) > 0) do
SetLength(Result, Length(Result)-1);
end;

function MbOrTb(Float: Extended): String;
begin
if Float < 1024 then Result:= NumToStr(Float)+' '+GetIniString('Messages', 'mb', '', LangFile) else
if Float/1024 < 1024 then Result:= NumToStr(Float/1024)+' '+GetIniString('Messages', 'gb', '', LangFile) else
Result:= NumToStr(Float/(1024*1024))+' '+GetIniString('Messages', 'tb', '', LangFile);
end;

procedure ObjectFunc(Sender: TObject);
var
Drive: String;
begin
case Sender of
WizardForm.DirEdit: begin
Drive:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Drive, True, FreeMB, TotalMB);

TotalSpaceLabel.Caption := GetIniString('Messages', 'TotalMBLabel', '', LangFile)+MbOrTb(TotalMB);
FreeSpaceLabel.Caption := GetIniString('Messages', 'FreeSpaceLabel', '', LangFile)+MbOrTb(FreeMB);
InstallSpacelabel.Caption := GetIniString('Messages', 'TotalNeedSpaceLabel', '', LangFile)+MbOrTb({#NeedInstallSize});
NeedSpaceLabel.Caption := GetIniString('Messages', 'NeedSpaceLabel', '', LangFile)+MbOrTb({#NeedSize});
WizardForm.NextButton.Enabled:=(FreeMB>{#NeedInstallSize})and(FreeMB>{#NeedSize});
//if (FreeMB>{#NeedInstallSize})and(FreeMB>{#NeedSize}) then FreeSpaceLabel2.Font.Color:=$FFFFFF else FreeSpaceLabel2.Font.Color:=$0000FF;
end;
end;
end;

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

procedure HideShowOnClick(Sender: TObject);
begin
if Flag = False then begin
LangFile:= ExpandConstant('{tmp}\Russian.isl');
Flag:= True;
SettingButton.Caption:= 'Ru';
end else begin
LangFile:= ExpandConstant('{tmp}\English.isl')
Flag:= False;
SettingButton.Caption:= 'En';
end;
WizardForm.NextButton.Caption := GetIniString('Messages', 'ButtonNext', '', LangFile);
WizardForm.BackButton.Caption := GetIniString('Messages', 'ButtonBack', '', LangFile);
WizardForm.CancelButton.Caption := GetIniString('Messages', 'ButtonCancel', '', LangFile);
WizardForm.DirBrowseButton.Caption := GetIniString('Messages', 'ButtonBrowse', '', LangFile);
WizardForm.GroupBrowseButton.Caption := GetIniString('Messages', 'ButtonBrowse', '', LangFile);

TotalSpaceLabel.Caption := GetIniString('Messages', 'TotalMBLabel', '', LangFile)+MbOrTb(TotalMB);
FreeSpaceLabel.Caption := GetIniString('Messages', 'FreeSpaceLabel', '', LangFile)+MbOrTb(FreeMB);
InstallSpacelabel.Caption := GetIniString('Messages', 'TotalNeedSpaceLabel', '', LangFile)+MbOrTb({#NeedInstallSize});
NeedSpaceLabel.Caption := GetIniString('Messages', 'NeedSpaceLabel', '', LangFile)+MbOrTb({#NeedSize});
end;

procedure InitializeWizard();
begin
SettingButton:= TButton.Create(WizardForm);
SettingButton.SetBounds(ScaleX(10),ScaleY(325), ScaleX(30), ScaleY(30))
SettingButton.Caption:= 'Ru';
SettingButton.OnClick:= @HideShowOnClick;
SettingButton.Parent:= WizardForm;
Flag:=True;

TotalSpaceLabel:= TLabel.Create(WizardForm);
with TotalSpaceLabel do begin
Parent := WizardForm.SelectDirPage;
AutoSize:=True;
Transparent := True;
SetBounds(ScaleX(0), ScaleY(120), ScaleX(0), ScaleY(0));
Font.Size:= 8;
end;

FreeSpaceLabel:= TLabel.Create(WizardForm);
with FreeSpaceLabel do begin
Parent := WizardForm.SelectDirPage;
AutoSize:=True;
Transparent := True;
SetBounds(ScaleX(0), ScaleY(140), ScaleX(0), ScaleY(0));
Font.Size:= 8;
end;

InstallSpacelabel:= TLabel.Create(WizardForm);
with InstallSpacelabel do begin
Parent := WizardForm.SelectDirPage;
AutoSize:=True;
Transparent := True;
SetBounds(ScaleX(150), ScaleY(120), ScaleX(0), ScaleY(0));
Font.Size:= 8;
end;

NeedSpaceLabel:= TLabel.Create(WizardForm);
with NeedSpaceLabel do begin
Parent := WizardForm.SelectDirPage;
AutoSize:=True;
Transparent := True;
SetBounds(ScaleX(150), ScaleY(140), ScaleX(0), ScaleY(0));
Font.Size:= 8;
end;
WizardForm.DirEdit.OnChange:=@ObjectFunc;
end;

procedure Showcomp(CurPageID: Integer);
begin
case CurPageID of
wpSelectDir:
begin
ObjectFunc(WizardForm.DirEdit);
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
ShowComp(CurPageID);
If Flag then begin
LangFile:= ExpandConstant('{tmp}\Russian.isl');
end else begin
LangFile:= ExpandConstant('{tmp}\English.isl')
WizardForm.NextButton.Caption := GetIniString('Messages', 'ButtonNext', '', LangFile);
WizardForm.BackButton.Caption := GetIniString('Messages', 'ButtonBack', '', LangFile);
WizardForm.CancelButton.Caption := GetIniString('Messages', 'ButtonCancel', '', LangFile);
WizardForm.DirBrowseButton.Caption := GetIniString('Messages', 'ButtonBrowse', '', LangFile);
WizardForm.GroupBrowseButton.Caption := GetIniString('Messages', 'ButtonBrowse', '', LangFile);
case CurPageID of
wpWelcome:
begin
end;
wpFinished:
begin
SettingButton.Hide;
WizardForm.NextButton.Caption := GetIniString('Messages', 'ButtonFinish', '', LangFile);
end;
end;
end;
end;Можно упростить - но мне лень :smirk:

Johny777
06-09-2012, 10:31
накатайте мне кто-нибудь пожалуйста пример считывания ини файла в массив строк (Array of String) и последующей загрузкой данных ключей из секций, но уже из переменной

те не каждый раз обращаться к файлу как в коде над моим сообщением

R.i.m.s.k.y.
06-09-2012, 12:35
Johny777, а зачем тебе парсить инишник если есть встроенные функции?

/// в начале считали, например в InitializeSetup
if FileExists(ExpandConstant('{pf}\MPC-HC\mpc-hc.ini')) then RenderType := StrToInt( GetIniString('Settings', 'DSVidRen', '0', ExpandConstant('{pf}\MPC-HC\mpc-hc.ini')) );
// в конце записали на шаге isDone
if FileExists(ExpandConstant('{pf}\MPC-HC\mpc-hc.ini')) then SetIniString('Settings', 'DSVidRen', IntToStr(RenderType), ExpandConstant('{pf}\MPC-HC\mpc-hc.ini'));
//в промежутке инишник дергать не надо

SatHan
06-09-2012, 15:16
подскажите ответ на такой вопрос
имеются три игры которые расположены в C:\Program Files\Games в папках Game_X таких папок три где X цифра.

[Setup]
AppName=Extende
AppVersion=1.0
AppVerName=Extende 1.0
DefaultDirName={pf}\Games
DefaultGroupName=Extende
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=ExtSetup
Compression=lzma
SolidCompression=yes

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

[Components]
Name: game_1; Description: Game_1; Flags: dontinheritcheck; Types: full
Name: game_2; Description: Game_2; Flags: dontinheritcheck; Types: full
Name: game_3; Description: Game_3; Flags: dontinheritcheck; Types: full

[Files]
Source: Game_1\*; DestDir: {app}\Game_1; Flags: ignoreversion recursesubdirs createallsubdirs; Components: game_1
Source: Game_2\*; DestDir: {app}\Game_2; Flags: ignoreversion recursesubdirs createallsubdirs; Components: game_2
Source: Game_3\*; DestDir: {app}\Game_3; Flags: ignoreversion recursesubdirs createallsubdirs; Components: game_3каждый компонент на каждую игру.

Что нужно сделать а главное как сделать чтоб если один из ключей в реестре
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1]
не найден то и компонент становился скрытым?

R.i.m.s.k.y.
06-09-2012, 15:20
SatHan, [Components]
Name: game_1; Description: Game_1; Flags: dontinheritcheck; Types: full; Check: RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1');
Name: game_2; Description: Game_2; Flags: dontinheritcheck; Types: full; Check: RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1');
Name: game_3; Description: Game_3; Flags: dontinheritcheck; Types: full; Check: RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1');


_____________

Johny777, я в таких случая тупо инициализирую в память на начальном шаге все нужные переменные, благо их немного

SatHan
06-09-2012, 16:37
R.i.m.s.k.y., не работает, пишет "Directive or parameter "Check" expression error: Can only call Function "ExpandConstant" within parameter lists".

Нашёл для себя вот такой вариант

[Setup]
AppName=Extende
AppVersion=1.0
AppVerName=Extende 1.0
DefaultDirName={pf}\Games
DefaultGroupName=Extende
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=ExtSetup
Compression=lzma
SolidCompression=yes

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

[Components]
Name: game_1; Description: Game_1; Flags: dontinheritcheck; Types: full; Check: CheckRegGame1
Name: game_2; Description: Game_2; Flags: dontinheritcheck; Types: full; Check: CheckRegGame2
Name: game_3; Description: Game_3; Flags: dontinheritcheck; Types: full; Check: CheckRegGame3

[Files]
Source: Game_1\*; DestDir: {app}\Game_1; Flags: ignoreversion recursesubdirs createallsubdirs; Components: game_1
Source: Game_2\*; DestDir: {app}\Game_2; Flags: ignoreversion recursesubdirs createallsubdirs; Components: game_2
Source: Game_3\*; DestDir: {app}\Game_3; Flags: ignoreversion recursesubdirs createallsubdirs; Components: game_3

[Icons]
Name: {group}\{cm:UninstallProgram,Extende}; Filename: {uninstallexe}

[#code]
Function CheckRegGame1: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1') then
Result:= True;
end;

Function CheckRegGame2: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1') then
Result:= True;
end;

Function CheckRegGame3: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1') then
Result:= True;
end;

только теперь проблема в следующем
когда не одного компонента нет (не найдены ключи в реестре) то инсталятор всё равно запускается. Гуру подскажите как сделать чтоб если не одного компонента нет (не найдены ключи в реестре) то инсталятор не запускался а выдавал сообщение что "на компьютере не найдено установлено игр"?

R.i.m.s.k.y.
06-09-2012, 16:53
SatHan,
Function CheckRegGame1: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1') then
Result:= True else Result := False;
end;

Function CheckRegGame2: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1') then
Result:= True else Result := False;
end;

Function CheckRegGame3: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1') then
Result:= True else Result := False;
end;

Function InitializeSetup: Boolean;
Begin
if ( (not CheckRegGame1) and (not CheckRegGame2) and (not CheckRegGame3) ) then begin
MsgBox('на компьютере не найдено установлено игр', mbInformation, MB_OK);
Result := False;
end;
end;

SatHan
06-09-2012, 17:03
R.i.m.s.k.y., опять проблема. когда в системе ключи присутствуют то инсталятор не запускается. Как решить проблему?

R.i.m.s.k.y.
06-09-2012, 17:13
SatHan, Function InitializeSetup: Boolean;
Begin
Result := True;
if ( (not CheckRegGame1) and (not CheckRegGame2) and (not CheckRegGame3) ) then begin
MsgBox('На компьютере не найдено установленых игр', mbInformation, MB_OK);
Result := False else Result := True;
end;

SatHan
06-09-2012, 17:25
R.i.m.s.k.y., на Result-е тот что идёт после MsgBox останавливается и выдаёт ошибку с сообщением identifier expected.

Johny777
06-09-2012, 17:42
я в таких случая тупо инициализирую в память на начальном шаге все нужные переменные, благо их немного »
Не совсем понял
они и так инициализируются при запуске или при работе процедуры
вот смотри
ты 10 раз открываешь файл с жёсткого диска чтоб взять из него значение (10 значений)
или открываешь 1 раз, пишешь все 10 значений в переменную массива и потом работаешь уже с переменной тк она в оперативке (в стеке кажись.)
а из оперативы брать быстрее в разы чем раскручивать жд

понимаешь зачем мне массив
до последнего времени я обходился простой GetIniString но это малость неразумно когда нужно считывать не 1 и не 2 знчения, а больше в разы

SatHan,

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

[ Code]
Function CheckRegGame(nParam: Integer): Boolean;
begin
case nParam of
1: Result:= RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1');
2: Result:= RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1');
3: Result:= RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1');
else
Result := RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1') and
RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1') and
RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1')
end;
end;


Function InitializeSetup: Boolean;
Begin
if not CheckRegGame(0) then
begin
MsgBox('На компьютере не найдено установленых игр', mbInformation, MB_OK);
Result := False;
end else
Result := True;
end;

R.i.m.s.k.y.
06-09-2012, 17:47
Johny777, через getIniString я ручками получаю с десяток нужных мне переменных из инишника, заношу только не в аррэй а в десять переменных и с ними дальше работаю. Я вообще не понимаю целесообразности вопроса.

SatHan, [ Code]
Function CheckRegGame1: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1') then
Result:= True else Result := False;
end;

Function CheckRegGame2: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1') then
Result:= True else Result := False;
end;

Function CheckRegGame3: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1') then
Result:= True else Result := False;
end;

Function InitializeSetup: Boolean;
Begin
Result := True;
if ( (CheckRegGame1) and (CheckRegGame2) and (CheckRegGame3) ) then Result := True
else begin
MsgBox('На компьютере не найдено установленых игр', mbInformation, MB_OK);
Result := false;
end;
end;
end.

Snoopak96
06-09-2012, 17:58
SatHan,
Ну скрыть компоненты не получится, тк в инно нет свойства ItemVisible, можно сделать так как вариант:
[Setup]
AppName=Extende
AppVersion=1.0
AppVerName=Extende 1.0
DefaultDirName={pf}\Games
DefaultGroupName=Extende
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=ExtSetup
Compression=lzma
SolidCompression=yes

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

[Components]
Name: game_1; Description: Game_1; Flags: dontinheritcheck; Types: full
Name: game_2; Description: Game_2; Flags: dontinheritcheck; Types: full
Name: game_3; Description: Game_3; Flags: dontinheritcheck; Types: full

[_Code]
Function CheckRegGame1: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1') then Result:= True;
end;

Function CheckRegGame2: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1') then Result:= True;
end;

Function CheckRegGame3: Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1') then Result:= True;
end;

procedure InitializeWizard;
begin
WizardForm.ComponentsList.Checked[0]:= CheckRegGame1;
WizardForm.ComponentsList.Checked[1]:= CheckRegGame2;
WizardForm.ComponentsList.Checked[2]:= CheckRegGame3;
WizardForm.ComponentsList.ItemEnabled[0]:= CheckRegGame1;
WizardForm.ComponentsList.ItemEnabled[1]:= CheckRegGame2;
WizardForm.ComponentsList.ItemEnabled[2]:= CheckRegGame3;
end;

Johny777
06-09-2012, 17:59
заношу только не в аррэй а в десять переменных и с ними дальше работаю »
не использую переменные
вот пример кода Run_Game_CheckBox.Checked := (GetIniString('MySettings', 'Run_Games', '', ExpandConstant('{src}\Selfish.ini')) = '1'); (скоро сам всё увидишь когда докачаешь :) )

Я вообще не понимаю целесообразности вопроса. »
повышение скорости работы путём сокращения ненужных действий
ненужное действие у меня выполняется двумя ини - 10 считываний вместо одного

Ну скрыть компоненты не получится »
в этом случае их можно прото не добавлять в чеклистбокс таким вот макаром

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


[Components]
Name: game_1; Description: Game_1; Flags: dontinheritcheck; Types: full; Check: CheckRegGame(1);
Name: game_2; Description: Game_2; Flags: dontinheritcheck; Types: full; Check: CheckRegGame(3);
Name: game_3; Description: Game_3; Flags: dontinheritcheck; Types: full


[ Code]
Function CheckRegGame(nParam: Integer): Boolean;
begin
case nParam of
1: Result:= RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1');
2: Result:= RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1');
3: Result:= RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1');
else
Result := RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game1_is1') and
RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game2_is1') and
RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Game3_is1')
end;
end;

R.i.m.s.k.y.
06-09-2012, 18:02
Snoopak96, ты в этом ошибаешься, если в моем примере выше подчековая функция вернет фолсе то в списке компонентов соответствующей строчки не будет, проверь сам ;)

Johny777, чуток осталось

Snoopak96
06-09-2012, 18:08
R.i.m.s.k.y., я про свойство ItemVisible, а у тебя строит компонент лист на ходу при старте, путаешь ты =) хотя и так тоже можно сделать.




© OSzone.net 2001-2012