Вопрос Создать новый компонент лист

Kotyarko_O

Новичок
а можно ли таким способом картинки показывать в компонентах кастомных
Да. В процедуре InitInfo(), кастомному компонентЛисту приписать свойства OnItemMouseMove, OnMouseLeave. Пример:
Код:
ComponentsList.OnItemMouseMove := @CompOnItemMouseMove;
ComponentsList.OnMouseLeave := @CompOnMouseLeave;
Его имена компонентов\изображения дописывать туда же, где и сейчас.
 

Chip

Мимокрокодил
а со стандартным компонентлистом не будет конфликтить? или дать дополнительный initinfo добавлять? чтобы небыло мешанины
 

Kotyarko_O

Новичок
а со стандартным компонентлистом не будет конфликтить? или дать дополнительный initinfo добавлять? чтобы небыло мешанины
Конфликтов не будет (если только на двух компонентЛистах нет одинаковых по названию компонентов - в таком случае нужно проверять). Никакой привязки к определённому компонентЛисту там нет.
Мешанины от двух добавленных строк в InitInfo не будет.
 

Chip

Мимокрокодил
Код:
var
CustomPage: TWizardPage;
CustomListBox: TNewCheckListBox;
Procedure CreateNewPage(PreviousPageId: Integer);
begin
CustomPage := CreateCustomPage(PreviousPageId, '<<блабла>>');
CustomListBox := TNewCheckListBox.Create(CustomPage);
CustomListBox.Parent := CustomPage.Surface;
CustomListBox.Left:=ScaleX(0);
CustomListBox.Top:=ScaleY(50);
CustomListBox.Width:=CustomPage.SurfaceWidth;
CustomListBox.Height:=ScaleY(144);
CustomListBox.Cursor:=crHand;
CustomListBox.BorderStyle:=bsSingle;
CustomListBox.Color:=clblack;
CustomListBox.DragCursor:=crHand;
CustomListBox.DragMode:=dmAutomatic;
CustomListBox.Flat:=True;
CustomListBox.Font.Color:=clLime;
CustomListBox.ParentFont:=False;
CustomListBox.ShowLines:=True;
CustomListBox.ItemHeightFixed:=True;
//**************************************************************************//
CustomListBox.AddCheckBox('блабла1', '', 1,                       False, True, True, True, nil);            //0
CustomListBox.AddCheckBox('блабла2', '', 1,                         False, True, True, True, nil);         //1
CustomListBox.AddCheckBox('блабла3',  '', 1,                     False, True, True, True, nil);            //2
end;
//**************************************************************************//
Function CheckBoxChecked(Idx: Integer): Boolean;
begin
case Idx of
0:
  Result := CustomListBox.Checked[0];
1:
  Result := CustomListBox.Checked[1];
2:
  Result := CustomListBox.Checked[2];
end;
end;
var
    InfoPic: TBitmapImage;
    LastIndex: Integer;
    TempPath: String;
    PicForm: TForm;
 
 
type
    COLORREF = DWORD;
 
function GetCursorPos(var lpPoint: TPoint): BOOL; external 'GetCursorPos@user32.dll stdcall';
function SetLayeredWindowAttributes(Hwnd: THandle; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD): Boolean; external 'SetLayeredWindowAttributes@user32.dll stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function SetFocus(hWnd: HWND): HWND; external 'SetFocus@user32.dll stdcall';
procedure ShowPicHint(const PicFilePath: String);
var
    pt: TPoint;
begin
    if not GetCursorPos(pt) then Exit;
    InfoPic.Bitmap.LoadFromFile(PicFilePath);
    try
        with PicForm do
        begin
            SetBounds(ScaleX(0), ScaleY(0), InfoPic.Width, InfoPic.Height);
            SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
            SetLayeredWindowAttributes(Handle, 0, ALPHA_BLEND_LEVEL, LWA_ALPHA);
            Show;
        end;
    finally
        SetFocus(WizardForm.Handle);
    end;
end;
procedure CompOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
var
    UndefPic: String;
begin
    if Index = -1 then Exit;
    if Index = LastIndex then Exit;
    try
        case TNewCheckListBox(Sender).ItemCaption[Index] of
            'компонетлистстандарт1':                     UndefPic := '1.bmp';
            'компонетлистстандарт2':                     UndefPic := '2.bmp';
            'кастомлист1':                                     UndefPic := 'к1.bmp';
         
        else
            begin
                LastIndex := UNDEF_INDEX;
                PicForm.Hide;
                Exit;
            end;
        end;
        if not FileExists(TempPath + UndefPic) then ExtractTemporaryFile(UndefPic);
        ShowPicHint(TempPath + UndefPic);
    finally
        LastIndex := Index;
    end;
end;
procedure CompOnMouseLeave(Sender: TObject);
begin
    PicForm.Hide;
end;
procedure InitInfo();
begin
    WizardForm.ComponentsList.OnItemMouseMove := @CompOnItemMouseMove;
    WizardForm.ComponentsList.OnMouseLeave := @CompOnMouseLeave;
    CustomPage.OnItemMouseMove := @CompOnItemMouseMove;
    CustomPage.OnMouseLeave := @CompOnMouseLeave;
    TempPath := AddBackslash(ExpandConstant('{tmp}'));
    LastIndex := UNDEF_INDEX;
    PicForm := TForm.Create(WizardForm)
    with PicForm do
    begin
        BorderStyle := bsNone;
        FormStyle := fsStayOnTop;
        InfoPic := TBitmapImage.Create(PicForm)
        with InfoPic do
        begin
            Parent := PicForm;
            AutoSize := True;
        end;
    end;
end;

чтото типа того? пытался задать CustomListBox пишет ошибка Could not call proc
 

Kotyarko_O

Новичок
CustomPage.OnItemMouseMove := @CompOnItemMouseMove;
CustomPage.OnMouseLeave := @CompOnMouseLeave;
Нет, не так. Обращаться нужно не к самой странице, а к листБоксу.
Вот:
Код:
CustomListBox.OnItemMouseMove := @CompOnItemMouseMove;
CustomListBox.OnMouseLeave := @CompOnMouseLeave;
А сама ошибка "Could not call proc." значит о том, что ты обращаешься к объекту, который ещё не создан. Здесь нужно соблюдать очерёдность в процедуре InitializeWizard - в ней это всё инициализируется. То есть, создание кастомной страницы должно быть раньше, чем InitInfo.
 
  • Like
Реакции: Chip

Anna

Новичок
Ребята помогите не как не могу понять. как сделать три страницы с каринками . что бы допустим навел на компонент и появилась картинка . делаю мод пак две страницы я сделал а мне надо еще хотябы две добавить потому как разделы у меня идут хвм моды пмод музыка . и не хватает еще две страницы с картинками что бы люди видели при выборе как данный мод выглядит. заранее спасибо
 
Сверху