Вопрос Изображение в newchecklistbox

Adil

Старожил
Всем привет. Вчера пытался загрузить изображение в созданный new check list box. Все никак не получается. Где я ошибся?

Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
SolidCompression=yes
Compression=lzma/ultra
PrivilegesRequired=none
OutputDir=.
///BitmapResource=WizardImage:BGImage.bmp

[Files]                              
Source: "BGImage.bmp"; Flags: dontcopy solidbreak

[code]
var
  BGBitmapImage,BTNImage: TBitmapImage;
  BorderWidth: Integer;
  BGImageStream,BTNImageStream: TMemoryStream;
  NewCheckListBox1: TNewCheckListBox;

procedure RedesignWizardForm;
begin
  BGImageStream := TMemoryStream.Create;
  ExtractTemporaryFileToStream('BGImage.bmp', BGImageStream);
  BGImageStream.Position := 0;

  BGBitmapImage := TBitmapImage.Create(WizardForm);
  BGBitmapImage.Bitmap.LoadFromStream(BGImageStream);

  WizardForm.Bevel.Hide;
  WizardForm.OuterNotebook.Hide;

  NewCheckListBox1 := TNewCheckListBox.Create(WizardForm);
  with NewCheckListBox1 do
  begin
    Parent := WizardForm;
    Left := ScaleX(248);
    Top := ScaleY(176);
    Width := ScaleX(209);
    Height := ScaleY(105);
    LoadBGBmpFromBitmap(BGBitmapImage.Bitmap, ScaleX(0), ScaleY(0));
  end;
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;
 

sergey3695

Ветеран
Модератор
нигде, добавь элементы в TNewCheckListBox.
(во вложении пример с растяжением изображения в зависимости от увеличения в системе и минус колесико)
 

Вложения

  • Like
Реакции: Adil

Adil

Старожил
Всем привет. Как сделать так, что бы при выборе двух компонентов прописывались оба параметра через

Код:
 if IsComponentSelected('Icons\DesktopIcon') then
  begin
    if IsComponentSelected('Fixes\Widescreen') then
    begin
      CreateShellLink(ExpandConstant('{userdesktop}\{#GameName}.lnk'),'',ExpandConstant('{app}')+'\{#ExeName}', ExpandConstant('WIDESCREENDISPLAY'),'', ExpandConstant('{#ExeName}'),0,SW_SHOW);
    end
         
         else if IsComponentSelected('Fixes\EnhPS') then
         begin
          CreateShellLink(ExpandConstant('{userdesktop}\{#GameName}.lnk'),'',ExpandConstant('{app}')+'\{#ExeName}', ExpandConstant('FORCEHT'),'', ExpandConstant('{#ExeName}'),0,SW_SHOW);
         end 
            
              else if IsComponentSelected('Fixes\Widescreen') and IsComponentSelected('Fixes\EnhPS') then //Вот тут проблема, не прописываются оба параметра.
              begin
                CreateShellLink(ExpandConstant('{userdesktop}\{#GameName}.lnk'),'',ExpandConstant('{app}')+'\{#ExeName}', ExpandConstant('WIDESCREENDISPLAY FORCEHT'),'', ExpandConstant('{#ExeName}'),0,SW_SHOW);
              end 

                  else begin
                    CreateShellLink(ExpandConstant('{userdesktop}\{#GameName}.lnk'),'',ExpandConstant('{app}')+'\{#ExeName}', '', '', ExpandConstant('{#ExeName}'),0,SW_SHOW);
                  end;
  end;
 

sergey3695

Ветеран
Модератор
Adil, а ты сначала проверяй отмечены ли два компонента, а потом по отдельности, а не наоборот.
Код:
if IsComponentSelected('Icons\DesktopIcon') then
begin
  if IsComponentSelected('Fixes\Widescreen') and IsComponentSelected('Fixes\EnhPS') then
    CreateShellLink(ExpandConstant('{userdesktop}\{#GameName}.lnk'),'',ExpandConstant('{app}')+'\{#ExeName}', ExpandConstant('WIDESCREENDISPLAY FORCEHT'),'', ExpandConstant('{#ExeName}'),0,SW_SHOW)
  else begin
  if IsComponentSelected('Fixes\Widescreen') then
    CreateShellLink(ExpandConstant('{userdesktop}\{#GameName}.lnk'),'',ExpandConstant('{app}')+'\{#ExeName}', ExpandConstant('WIDESCREENDISPLAY'),'', ExpandConstant('{#ExeName}'),0,SW_SHOW);
  if IsComponentSelected('Fixes\EnhPS') then
    CreateShellLink(ExpandConstant('{userdesktop}\{#GameName}.lnk'),'',ExpandConstant('{app}')+'\{#ExeName}', ExpandConstant('FORCEHT'),'', ExpandConstant('{#ExeName}'),0,SW_SHOW);
  end;
  if not IsComponentSelected('Fixes\Widescreen') and not IsComponentSelected('Fixes\EnhPS') then
  CreateShellLink(ExpandConstant('{userdesktop}\{#GameName}.lnk'),'',ExpandConstant('{app}')+'\{#ExeName}', '', '', ExpandConstant('{#ExeName}'),0,SW_SHOW);
end;
слишком много else.
 
  • Like
Реакции: Adil

TheLegend

Новичок
При клике на чекбоксы или рядом с ними текст выделяется, это недостаток LoadBGBmpFromBitmap или это можно исправить?

2.jpg 3.jpg 1.jpg
 

Nemko

Дилетант
Модератор
TheLegend, попробуйте добавить (я добавил в пример выше) такие константы и заменить\дополнить обработку сообщений, а также скомпилировать код и протестировать код без запуска Inno Setup, так как при режиме отладки будет моргать CheckBoxList:
Код:
const
  GWL_WNDPROC    = -4;
  WM_MOUSEWHEEL  = $020A;
  WM_LBUTTONDOWN = $0201;
  WM_KILLFOCUS   = $0008;
Код:
function Proc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
  case Msg of
    WM_MOUSEWHEEL: Msg:=0;
    WM_LBUTTONDOWN: SendMessage(CheckListBox.Handle, WM_KILLFOCUS, 0, 0);
  end;
    Result:=CallWindowProc(WindowProc, hWnd, Msg, wParam, lParam);
end;
 

TheLegend

Новичок
Благодарю, сделал проще
Код:
procedure TasksListMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
begin
    SendMessage(WizardForm.TasksList.Handle, WM_KILLFOCUS, 0, 0);   
end;

WizardForm.TasksList.OnMouseDown := @TasksListMouseDown;
;
 
Последнее редактирование:
Сверху