Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rebson Mendes

ReadOnly utilizando um kbmMemTable em apenas algumas celulas

Recommended Posts

Olá, bom dia! Estou com um problema em relação ao componente kbmMemTable. Criei um grid que contém os seguintes campos:

 

  • Codigo
  • Descricao
  • Valor

Os campos codigo e descrição estão bloqueados, somente leitura, porém, gostaria que dependendo do código o valor será bloqueado. Consegui o seguinte código:

 

 

if (Field.FieldName = 'Valor')
and ((kbmTblCaixa.FieldByName('Codigo').AsString = '110') or
(kbmTblCaixa.FieldByName('Codigo').AsString = '106') or
(kbmTblCaixa.FieldByName('Codigo').AsString = '107') or
(kbmTblCaixa.FieldByName('Codigo').AsString = '111'))
then
wwDBGrid1.Canvas.Brush.Color := clBtnFace;
wwDBGrid1.ReadOnly := True; //aqui está meu problema
wwDBGrid1.Canvas.FillRect(Rect);
wwDBGrid1.DefaultDrawDataCell(Rect,Field,State);
A cor sai ok, porém o readonly bloqueia todo o grid.
Alguém poderia me dar uma luz?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo.

 

Acredito que nesse caso, você teria que deixar a Coluna do seu Grid como readonly.

 

Digamos que a coluna que você queira bloquear seja a do índice 3, acredito que seria algo semelhante a isso:

 

wwDBGrid1.Coluns=[3].ReadOnly := true;

 

Até a próxima. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Amigo, bom dia! Obrigado pela ajuda. Mas acabei esquecendo de colocar um detalhe a mais. A coluna valor, que realmente é a 3, alguns valores tem que ser editaveis, apenas os que tenha os códigos mencionados no if que seria somente leitura. Esse está sendo meu problema :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo.

 

Mas e se você tratar o que te passei no evento OnKeyDown do seu Grid, impondo as condições que você precisa pra editar essa coluna nesse evento acredito que irá funcionar.

 

Até a próxima. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo.

 

Dentro do evento OnKeyDown do seu Grid você fez algo semelhante a isso?

 

 

wwDBGrid1.Coluns[3].ReadOnly := False;

 

if (Field.FieldName = 'Valor')
and ((kbmTblCaixa.FieldByName('Codigo').AsString = '110') or
(kbmTblCaixa.FieldByName('Codigo').AsString = '106') or
(kbmTblCaixa.FieldByName('Codigo').AsString = '107') or
(kbmTblCaixa.FieldByName('Codigo').AsString = '111'))
then
begin
wwDBGrid1.Canvas.Brush.Color := clBtnFace;
wwDBGrid1.Coluns[3].ReadOnly := True;
wwDBGrid1.Canvas.FillRect(Rect);
wwDBGrid1.DefaultDrawDataCell(Rect,Field,State);
end;
Até a próxima. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

exatamente desse jeito, mas ainda o resultado foi o mesmo... Ou o grid fica com a coluna Valor inteira editavel ou inteira somente leitura...

 

 

Tentei usando o DisableControls direto no memtable

 

 

 

kbmtblCaixa.DisableContros ;

 

mas tb n funcionou... bloqueia tudo

 

 

Ai pessoal, consegui fazer funcionar... foi gambiarra, mas deu certo. Com o código que eu tinha construido inicialmente o bloqueio não funcionava, porém a cor cinza aparecia do jeito que eu queria. De posse disso, fiz um If complementar, ficando o código da seguinte maneira:

 

 

 

 

if (Field.FieldName = 'Valor')
and ((kbmTblCaixa.FieldByName('Codigo').AsString = '110') or
(kbmTblCaixa.FieldByName('Codigo').AsString = '106') or
(kbmTblCaixa.FieldByName('Codigo').AsString = '107') or
(kbmTblCaixa.FieldByName('Codigo').AsString = '111'))
then
wwDBGrid1.Canvas.Brush.Color := clBtnFace;
wwDBGrid1.ReadOnly := True;
wwDBGrid1.Canvas.FillRect(Rect);
wwDBGrid1.DefaultDrawDataCell(Rect,Field,State);
//o que me ajudou a resolver foi isso
if wwDBGrid1.Canvas.Brush.Color = clBtnFace then
wwdbgrid1.readonly := true
else
wwdbgrid1.readonly := false;
Obrigado Eisenheim pela atenção :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.