Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

*    Olá, procurei muito por essa solução e como não encontrei decidi disponibilizar aqui a forma que eu pensei para o ComboBox do lázaros aceitar mais dígitos quando a propriedade Style = csDropDownList

*    Como a função em uma classe criei o Timer em tempo de exeção...

* uses para criar o timer

 ExtCtrls

var

MemKey: string;

//================================ CREATE ====================================\\
constructor TRiba.Create;
begin
  TimerMemKey := TTimer.Create(nil);
  TimerMemKey.Interval := 1000;
  TimerMemKey.Enabled := False;
  TimerMemKey.OnTimer := @TimerMemKeyOnTimer;
  MemKey := '';
end;

//================================= DESTRUCTOR ===============================\\
destructor TRiba.Destroy;
begin
  TimerMemKey.Free;
  inherited Destroy;
end; 

//================================ TIMER =====================================\\
procedure TRiba.TimerMemKeyOnTimer(Sender: TObject);
begin
  MemKey := '';
  TimerMemKey.Enabled := False;
end;  

* Dai a função  ficou assim...

//========================== COMBO BOX KEY ===================================\\
function TRiba.ComboBoxKey(const Key: char): string;
begin
  MemKey := MemKey + Key;
  Result := MemKey;
  TimerMemKey.Enabled := True;
end;

 * E no evento on key press do combobox ficou assim...

//============================= CB UF KEY PRESS ==============================\\
procedure TFormClientes2.cbUFKeyPress(Sender: TObject; var Key: char);
begin

//to usando o sender para poder anexar todos os combobox do form ao mesmo evento
  (Sender as TComboBox).Text := Riba.ComboBoxKey(Key);
  Key := #0;
end; 

//===========================================================================\\

Se essa solução não for apropriada peço desculpa aos moderadores e peço que exclua essa portagem por favor.

DEUS abençoe a todos! 🙏

Postado

* Olá

* Corrigi a função pois ela estava funcionado apenas com dois dígitos.

* Na UF funcionou de boa, mas quando fui usar nos municípios que vi a caca que eu tinha feito.

* Dai a função ficou assim...

//========================== COMBO BOX KEY ===================================\\
function TRiba.ComboBoxKey(const AKey: char; AItens: TPersistent): integer;
var
  auxItens: TStringList;
  I: integer;
  auxItem: string;
begin
  MemKey := MemKey + FormataTexto(AKey);

  try
    auxItens := TStringList.Create;
    auxItens.Assign(AItens);

    for I := 0 to Pred(auxItens.Count) do
    begin
      auxItem := UpperCase(Copy(auxItens[I], 1, Length(MemKey)));

      if(auxItem = MemKey)then
        Result := I;
    end;
  finally
    auxItens.Free;
  end;
  TimerMemKey.Enabled := True;
end;                   

* E pra chamar ela ficou assim...

//============================= CB UF KEY PRESS ==============================\\
procedure TFormClientes2.cbUFKeyPress(Sender: TObject; var Key: char);
begin
  if (key = #13) then
    Exit;

  (Sender as TComboBox).ItemIndex := Riba.ComboBoxKey(Key, (Sender as TComboBox).Items);
  Key := #0;
end;

* Desculpa a falha!

Postado

* Ajustei com um Break no for pra ele pegar o primeiro item

for I := 0 to Pred(auxItens.Count) do
begin
    auxItem := UpperCase(Copy(auxItens[I], 1, Length(MemKey)));

    if(auxItem = MemKey)then
    begin
        Result := I;
        Break;
    end;
end;  

  • Este tópico foi criado há 1475 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.

The popup will be closed in 10 segundos...