Ir para conteúdo
  • Cadastre-se

dev botao
  • Este tópico foi criado há 1165 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado (editado)

Olá a todos,

Estou tentando usar um StringGrid para preencher as informações de uma tela de Fechamento de Caixa... As mesmas serão digitadas na coluna "No Caixa".

Eu pintei as bordas do StringGrid de preto, porque aquele cinza padrão é muito fraco.

Como podem observar na primeira foto está ok, mas na segunda quando se tenta digitar a borda em volta some.

Alguém sabe como posso mudar esse comportamento?

Desde já agradeço a atenção

stringgrid (2).JPG

Editado por doidopb
  • Membros Pro
Postado

Bem... Tá fluindo aqui...

Eu fiz o seguinte... Ao invés de digitar dentro da StringGrid, eu coloquei um componente JvCalcEdit da biblioteca Jedi para aparecer dentro das células conforme eu clico, adaptando o código em descrito em https://www.devmedia.com.br/forum/combobox-em-stringgrid/226192. Com isso fica um formato legal de borda quando ele é exibido e ainda travo a digitação em números com 2 casas decimais que eu queria também.

Tá quase 100% agora, o problema tá sendo que quero selecionar todo o texto da CalcEdit quando a mesma for exibida. Para tal coloquei o seguinte código no SelectCell da StringGrid:

  if ACol <> 2 then
    begin
     CanSelect := False;
     Exit;
    end
  else
    begin
      R := grd_fechamento.CellRect(ACol, ARow);
      R.Left := R.Left + grd_fechamento.Left;
      R.Right := R.Right + grd_fechamento.Left;
      R.Top := R.Top + grd_fechamento.Top;
      R.Bottom := R.Bottom + grd_fechamento.Top;
      with edt_valor do
        begin
          Left := R.Left + 1;
          Top := R.Top + 1;
          Width := (R.Right + 1) - R.Left;
          Height := (R.Bottom + 1) - R.Top;
          Visible := True;
          if grd_fechamento.Cells[ACol, ARow] = '' then
            Text := '0,00'
          else Text := grd_fechamento.Cells[ACol, ARow];

          SetFocus;
          SelStart := 0; //Aqui 
          SelLength := Length(Text); //E Aqui
        end;
      CanSelect := True;
    end;

Além do código cima, tenho um código para permitir o usuário navegar para cima e para baixo no StringGrid com as setas direcionais e o Enter, está no KeyDown do CalcEdit:

  if (Key = VK_Return) OR (Key = VK_Down) then
    begin
      if grd_fechamento.Row <> grd_fechamento.RowCount - 1 then
        begin
          SendMessage(grd_fechamento.Handle,WM_VSCROLL,SB_Linedown,0);
          grd_fechamento.Row := grd_fechamento.Row + 1;
        end;
    end
  else
  if Key = VK_UP then
    begin
      if grd_fechamento.Row <> 1 then
        begin
          SendMessage(grd_fechamento.Handle,WM_VSCROLL,SB_Lineup,0);
          grd_fechamento.Row := grd_fechamento.Row - 1;
        end;
    end;

O problema é que por algum motivo só aparece selecionado o texto do CalcEdit quando dou Enter ou clico com o mouse, quando uso as setas direcionais para cima e para baixo ele muda de linha normalmente, exibe normalmente o CalcEdit, mas o foco fica sempre ao final do texto e não seleciona o mesmo, me obrigando a apagar com back space e não é isso o que quero.

Alguém sabe o motivo disso?

 

  • Membros Pro
  • Solution
Postado

Consegui... só foi colocar um "Abort" no KeyDown para anular a seta pra cima e pra baixo... Ficou do jeito que eu queria.

Abraços a todos

  • Consultores
Postado

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

  • Este tópico foi criado há 1165 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.