Fórum Dúvida CategoryButtons #419380

04/07/2012

0

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

Responder

Posts

04/07/2012

Joel Rodrigues

Qual erro está ocorrendo?
Talvez o sender não seja TCategoryButtons e sim TButtonItem.
Responder

Gostei + 0

05/07/2012

Casa Brasileira

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.
Responder

Gostei + 0

05/07/2012

Casa Brasileira

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.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar