2014-09-26 2 views
0

StringGrid를 클릭 할 때 마우스 오른쪽 버튼 클릭 이벤트에서 열리는 팝업 메뉴가 있습니다. 이 메뉴에서 나는 칼럼에 색을 칠하는 옵션을 가지고 있습니다. 선택한 열의 색상을 파란색으로 지정하는 옵션이 있다고 가정 해 보겠습니다. 파란색을 클릭하면 열 색상이 파란색으로 설정되고 열이 채색되었음을 나타내는 bool 값을 갖습니다.팝업 메뉴가 Delphi에서 imediatly 새로 고치지 않습니다

내 문제는 열이 colorod 열 이외의 다른 경우 열을 파란색으로 채우기 옵션을 해제하려면 원하는 것입니다. 나는 격자에서 모든 데이터를 저장하고 배열에 머리글 이름 끝에 #colored 태그를 추가하는 배열이 있습니다.

지금 내가이 일을하고있어

: 팝업 메뉴의 내 색칠 옵션

. 색상이 파란색으로 한 열만 색상을 지정할 수 있습니다.

if Pos('#',sourceData[0,grid.col]) <> 0 then 
    SourceData[0,grid.col] := COPY(SourceData[0,grid.col],0, Pos('#', SourceData[0,grid.col])-1); 

columnColored : = true;

열을 색칠하는 다른 코드가 있지만 여기에서는 중요하지 않습니다. 그런 다음 문자열 그리드 mousedownevent에서

:

if Button = mbRight then 
    begin 
    if columnColored then 
     begin 
     if Pos('#colored',SourceData[0,grid.col]) <> 0 then 
      pmColorBlue.enabled := true 
     else 
      pmColorBlue.enabled := false; 
     end; 
    end; 

인한 문제

이 문제를 작업하는 것이이 숨어 있음을 가지고입니다. 색깔이 표시된 열을 오른쪽 클릭하면 다시 클릭하여 기본 oclor를 다시 설정할 수 있기를 원합니다. 그러나 색상이 다른 색상과 다른 경우 옵션을 사용하지 말아야합니다.

내가 색칠 된 열을 클릭하면 다른 색의 열을 클릭 한 직후입니다. 내 오른편 메뉴의 파란색 옵션은 계속 사용할 수 있습니다. 같은 열에서 다시 다시 클릭하면 파란색 옵션이 비활성화됩니다. 그래서 나는 기본적으로 열을 두 번 클릭하여 내 opup 메뉴에서 색상 opton을 비활성화해야합니다.

컬러 컬럼을 클릭하면 옵션이 활성화되지만, 다른 옵션을 클릭하면 옵션이 비활성화되어야합니다. 이제 옵션을 비활성화하려면 두 번 오른쪽 버튼을 클릭해야만 hte가 처음 옵션을 계속 사용할 수 있습니다. 첫 번째로 색깔이없는 열을 클릭 한 다음 내 색의 열을 클릭하면 같은 문제가 발생합니다. 먼저 옵션이 비활성화 된 다음 색이 지정된 열을 클릭하면 옵션이 계속 비활성화되고 색이 지정된 열에서 다시 선택되며 옵션이 활성화됩니다.

왜 이렇게하는지 모르겠습니다. 너 나 좀 도와 줄래?

답변

3

StringGridMouseDown 이벤트의 코드를 팝업 메뉴의 OnPopup 이벤트로 이동하십시오. 이벤트가 잘못된 순서로 (아마도) 발생합니다.

+1

아, 다시 한번 나는 이것을 몰랐다. 고맙습니다. Btw 그것은 OnPopup이야. 그것은 당신을 감사했습니다 \ O / – user28470

관련 문제