2015-01-09 6 views
0

그림에서 볼 수 있듯이 각 항목의 버튼, 항목 왼쪽 아래의 버튼 하나 및 오른쪽 아래의 버튼으로 목록을 작성해야합니다.델파이의 각 항목에있는 버튼으로 목록을 만드는 방법

나는 ListBox 제어 및 ListBox에 위의 패널 내에서 어떤 버튼을 사용하여 데모 응용 프로그램을 확인하지만, ListBox 스크롤, 그것을 만들기 위해 어려운 때 버튼은 ListItem을 따릅니다. 도움이 될 수 있습니다

, 감사합니다 ~~~

Pic

+0

어떤 델파이 버전을 사용하고 있습니까? UI에 VCL 또는 FireMonkey를 사용하고 있습니까? 이와 같은 경우, 나는 스크롤링 문제를 해결하기 위해 소유자 - 드로잉 (UI 표준 룩앤필을 사용하는 컨트롤을 만들고 싶을 때'DrawFrameControl()'또는'DrawTheme ...()'함수 사용)을 사용하고, 히트 테스팅 로직을 사용하여 그려진 부분의 클릭을 감지하여 필요에 따라 작업을 트리거합니다. 'TListBox'와'TListView'는 모두 owner-drawing을 지원합니다. –

+0

@Remy 그러나 여전히 VCL 또는 FMX 사용 여부에 따라 크게 다릅니다. 각각은이 작업을 위해 완전히 다른 대답을 요구합니다. –

+0

나는 왜이 질문에 '웹'이라는 태그가 붙어 있고, 웹 페이지에서 오는 것처럼 보이는 샘플 이미지가 왜 궁금합니다. –

답변

0

나는 그것을 만들 수있는 방법이있어! 그래서, 나는 대답을 자신 ~를 게시 겠지만, 레미 Lebeau 내게 영감을. 처음에는 목록에 버튼을 만들기 위해 DrawFrameControl()을 사용했지만 스타일은 고전적인 Windows 스타일처럼 보였습니다. 예제에서는 그림과 같이 다시 색을 표현하기가 어렵습니다. 다음, 나는 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; 

다음 작품은, 메모리 버튼의 사각형을 저장하는 ButtonOnClick 이벤트 코드를 작성하고, ButtonOnClick를 호출 이벤트가 ListMouseUp() 일 때 마우스 히트 위치가 버튼 직사각형에 있는지, 위의 그림과 같이 코드는 중요하지 않으므로 버튼 이후 생략 됨