Ir para conteúdo
  • Cadastre-se

dev botao

Lazarus - Rxlib - Componente Currencyedit


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

Recommended Posts

 Alguem utiliza esse componente em projeto , pois como vim do Delphi e agora estou portando
minhas aplicacoes pra Lazarus , percebi que esse componente pra lazarus . ta com um problema
, ao digitar a Virgula . ele nao dispara nada no CurrencyEdit , so se tiver um valor antes numerico antes,
ex: 0, ... caso eu tente digitar a virgula  sem ter nenhum valor . ele nao aceita ...
isso no DELPHI nao acontece , .alguem sabe como resolver esse problema nesse componente , ou se tem
algo melhor pra ser usado ?


Desde ja agradeço .

Adilson PAZZINI

Link para o comentário
Compartilhar em outros sites

  • Consultores

Os componentes RX foram doados e incluídos no projeto JEDI há muito tempo... Talvez você consiga usar os do projeto JEDI (JCL e JVCL).

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Entao Elton , agradeço a dica . é que como estou convertendo meus projetos de delphi pra lazarus . preciso ajusta esse componente por enquanto , isso pra ir saindo do delphi mesmo pra lazarus .

como ja uso em delphi , e tem no lazarus . por isso q to querendo ver se ajusto o erro ...

 

a quem puder me ajudar . descobri que o problema esta na função :

function IsValidFloat(const Value: string; var RetValue: Extended): Boolean;
var
  I: Integer;
  Buffer: array[0..63] of Char;
begin
  Result := False;
  for I := 1 to Length(Value) do
    if not (Value in [DecimalSeparator, '-', '+', '0'..'9', 'e', 'E']) then
     begin
      ShowMessage(Value);
      Exit;
     end;
  Result := TextToFloat(StrPLCopy(Buffer, Value, SizeOf(Buffer) - 1), RetValue, fvExtended);  ///-- a mesma no delphi retorna TRUE,. ja no lazarus , ta retornando FALSE ...
end;

q esta na unit curredit , e na verdade qndo digito a virgula , a funcao TextToFloat(StrPLCopy(Buffer, Value, SizeOf(Buffer) - 1), RetValue, fvExtended); ta retornando falso , no delphi , essa mesma funcao retorna true ... alguem sabe me dizer o porque ?


Desde ja agradeço .

Adilson PAZZINI

Link para o comentário
Compartilhar em outros sites

  • Consultores

q esta na unit curredit , e na verdade qndo digito a virgula , a funcao TextToFloat(StrPLCopy(Buffer, Value, SizeOf(Buffer) - 1), RetValue, fvExtended); ta retornando falso , no delphi , essa mesma funcao retorna true ... alguem sabe me dizer o porque ?

Só se você postar o código dela.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Os dois exemplos , um em lazarus e outro em Delphi , estou utilizando o Edit mesmo , mais com as funções do CurrencyEdit , pra ficar facil emular o problema .

 

Q no caso ao digitar a virgula por primeiro , sem nenhum numero antes , no delphi passa mais no lazarus nao passa .

 

ambos os testes estao anexados para testar .

 

 

Desde de já agradesco .

 

 

Adilson Pazzini .

curedit_lazarus.zip

curedit_delphi.zip

Link para o comentário
Compartilhar em outros sites

Elton  o pessoal la do forum do lazarus (Gilson Nunes) , me ajudaram a resolver o problema .

na Funcao IsValidChar incluido as seguintes linhas


{+} if S[1] = DecimalSeparator then
{+}    s := '0' + s;

 

ai resolvel o problema , agora queria saber se tem como enviar essa correção para o repositório http://sourceforge.net/projects/lazarus-ccr/ da rxlib para lazarus .

 

function TCustomNumEdit.IsValidChar(Key: Char): Boolean;
var
  S: string;
  ASelStart, SelStop, DecPos: Integer;
  RetValue: Extended;
begin
  Result := False;
  S := EditText;
  GetSel(ASelStart, SelStop);
  System.Delete(S, ASelStart + 1, SelStop - ASelStart);
  System.Insert(Key, S, ASelStart + 1);
  S := TextToValText(S);
  DecPos := Pos(DecimalSeparator, S);
  if (DecPos > 0) then
  begin
    ASelStart := Pos('E', UpperCase(S));
    if (ASelStart > DecPos) then
      DecPos := ASelStart - DecPos
    else
      DecPos := Length(S) - DecPos;
    if DecPos > Integer(FDecimalPlaces) then
      Exit;
    if S[1] = DecimalSeparator then
     s := '0' + s;

  end;
  Result := IsValidFloat(S, RetValue);
  if Result and (FMinValue >= 0) and (FMaxValue > 0) and (RetValue < 0) then
    Result := False;
end;

 

Desde ja agradeço ,

 

 

Adilson Pazzini .

Link para o comentário
Compartilhar em outros sites

  • Consultores

agora queria saber se tem como enviar essa correção para o repositório

Isso daí é só com o pessoal do Lazarus. Vai ter que postar no fórum oficial deles e pedir a correção.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.