2015-01-09 7 views
0

Как показано на рисунке, мне нужно создать список с кнопками на каждом элементе, одну кнопку слева от элемента, а некоторые справа внизу.Как сделать список с кнопками на каждом элементе в Delphi

я сделать демо-приложение с помощью ListBox управления и некоторые кнопки в панели выше на ListBox, но когда ListBox прокруткой, это трудно сделать кнопки следовать ListItem.

, кто может помочь, спасибо ~~~

Pic

+0

Какая версия Delphi вы используете? Используете ли вы VCL или FireMonkey для своего пользовательского интерфейса? Для чего-то вроде этого я обычно использую рисование владельца (например, используя функцию DrawFrameControl() 'или' DrawTheme ...() ', когда я хочу создавать элементы управления, которые используют стандартный внешний вид пользовательского интерфейса) для решения проблемы прокрутки, а затем использовать чтобы проверить клики на рисованных участках для запуска действий по мере необходимости. И «TListBox», и «TListView» поддерживают собственный чертеж. –

+0

@Remy Тем не менее он все же зависит от того, используется ли 'VCL' или' FMX'. Для каждой задачи требуется совершенно другой ответ. –

+0

Мне также интересно, почему этот вопрос помечен 'web', и почему образ образца выглядит так, как будто он приходит с веб-страницы ... –

ответ

0

Я получил способ сделать это! Так, я отправлю Ответ на этот вопрос сам ~, но Реми Лебо вдохновило меня. в начале, я использовал DrawFrameControl(), чтобы сделать кнопку в списке. Он работает, но стиль был похож на классический стиль окна, и трудно сделать задний цвет, как в примере на рис. тогда, я использовал FillRect() и DrawEdge() сделать кнопку, я думаю, что это хорошо, вот код:

hitPoint := lst1.ScreenToClient(Mouse.CursorPos); 
    // there is a btnRect var of the Button Rect 
    edgeRect.Left := btnRect.Left - 1; 
    edgeRect.Top := btnRect.Top - 1; 
    edgeRect.Right := btnRect.Right + 1; 
    edgeRect.Bottom := btnRect.Bottom + 1; 
    // make button 
    lst1.Canvas.FillRect(btnRect); 
    // make edge, FListMouseDown is bool var and setting value at MouseDown/MouseUp Event 
    // 
    if PtInRect(edgeRect, hitPoint) and FListMouseDown then begin 
    DrawEdge(lst1.Canvas.Handle, edgeRect, EDGE_ETCHED, BF_RECT); // button down style 
    end else begin 
    DrawEdge(lst1.Canvas.Handle, edgeRect, EDGE_RAISED, BF_RECT); 
    end; 

Следующая работа сохранить Rect кнопок в памяти, написать код события ButtonOnClick, и вызов ButtonOnClick событие в ListMouseUp() Событие после того, как судья, если точка попадания мыши находится в кнопке Rect, код не имеет значения, как показано на рисунке выше, кнопки, поэтому он опущен