Dúvida CategoryButtons

Delphi

04/07/2012

Olá Pessoal.
Tenho um aplicativo funcionando com CategoryButtons.
Estou tentando setar um ButtonItem do ButtonCategory como selectedItem
e alterar sua cor através do botão direito do Mouse.

Só que por default o método MouseDown da classe TCategoryButtons trabalha somente
com TMouseButton = mbLeft.

Estou tentando fazer um esquema no evento MouseDown, mas não está funcionando.

Se alguém puder me ajudar eu agradeço muito.

Ai vai o código:


procedure TfrmGIPClient.ctTasksMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  DownCategory : TButtonCategory;
  DownButton : TButtonItem;
begin
  DownCategory := TCategoryButtons(Sender).GetCategoryAt(X,Y);
  DownButton := TCategoryButtons(Sender).GetButtonAt(X,Y,DownCategory);

  if Button = mbRight then
  begin
    if DownButton <> nil then
    begin
      if (not Focused) and CanFocus then
      Winapi.Windows.SetFocus(Handle);

      if (DownButton is TButtonItem) then
      begin
        ShowMessage(DownButton.Caption);
        TCategoryButtons(Sender).SelectedButtonColor := $00FFD5AA;
        TCategoryButtons(Sender).UpdateButton(DownButton);
      end;
    end;
  end;

end;
Casa Brasileira

Casa Brasileira

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

04/07/2012

Qual erro está ocorrendo?
Talvez o sender não seja TCategoryButtons e sim TButtonItem.
GOSTEI 0
Casa Brasileira

Casa Brasileira

04/07/2012

Olá Joel.
Não acontece nada.
Até troquei o sender pelo catagoryButton corrente, mas mesmo assim continua
sem selecionar o buttonItem onde cliquei com o botão direito do mouse.

Mesmo assim obrigado pela resposta.

O código ficou assim:


  DownCategory  := TCategoryButtons(Sender).GetCategoryAt(X,Y);
  DownButton    := TCategoryButtons(Sender).GetButtonAt(X,Y,DownCategory);

  if Button = mbRight then
  begin
    if DownButton <> nil then
    begin
      if (not Focused) and CanFocus then
      Winapi.Windows.SetFocus(Handle);

      if (DownButton is TButtonItem) then
      begin

        TCategoryButtons(ctTasks).SelectedButtonColor := $00FFD5AA;
        TCategoryButtons(ctTasks).UpdateButton(DownButton);

      end;
    end;
  end;


Até +.
James Martins.
GOSTEI 0
Casa Brasileira

Casa Brasileira

04/07/2012

Pessoal.
Só quero falar que a versão do Delphi é XE2 e
que ainda continuo com a dúvida.
Mas estudando a classe TCategoryButton acho interessante ressaltar
que de alguma forma o método DrawButton faz alguma coisa
em relação ao estado selected do ButtonItem alterando
a cor do Button Item com a cor setada na propriedade
SelectedButtonColor.

Vejam o código abaixo:




...
    else if bdsSelected in State then
    begin
      FillColor := FSelectedButtonColor;
      EdgeColor := GetShadowColor(FillColor);
      if LStyle.Enabled then
      begin
        LDetails := LStyle.GetElementDetails(tcbButtonSelected);
        if LStyle.GetElementColor(LDetails, ecTextColor, LColor) and (LColor <> clNone) then
          FontColor := LColor;
        if LStyle.GetElementColor(LDetails, ecBorderColor, LColor) and (LColor <> clNone) then
          EdgeColor := LColor;
      end;
    end

...



Flw..até + pessoal.

James Martins.
GOSTEI 0
POSTAR