GARANTIR DESCONTO

Fórum Auto Completar No Edit #318252

03/04/2006

0

Bem amigos já fiz uma grande pesquisa no forum sobre o assunto e não resolvi nada, gostaria de fazer um recurso tipo auto completar do listBox porem para um edit pois vou pegar os dados e fazer a comparação e mostrar com este recurso para os meus usuários.

Valeu galera...


Sremulador

Sremulador

Responder

Post mais votado

10/04/2006

Este é um pekeno exemplo que autocompleta um edit,mas com a ajuda de uma listBox. Acrescente alguns nomes no listbox pra vc testar... espero q isso te ajude... abraços

unit Auto;
interface

uses
  Windows, Messages, ShellApi, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    ListBox1: TListBox;
    Label1: TLabel;
    function Procura(Txt: string ): string;
    procedure Edit1Change(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Label2MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Label2MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Label2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  bPAUSA: Boolean; // Variável boleana que se TRUE impede ação do autocompletar

implementation

{$R *.DFM}

function TForm1.Procura(Txt: string): String;
var
  iA: INTEGER;
begin
  WITH ListBox1.ITEMS DO
    if TXT <>´´ THEN
      FOR iA:=0 to PRED(COUNT) do
        IF (LSTRCMP(PCHAR(COPY(STRINGS[iA],1,LENGTH(TXT))),PCHAR(TXT))=0)  OR
           (LSTRCMPI(PCHAR(COPY(STRINGS[iA],1,LENGTH(TXT))),PCHAR(TXT))=0) THEN
          BEGIN
            RESULT:=STRINGS[iA];
            BREAK;
          END;
end;

procedure TForm1.Edit1Change(Sender: TObject);
var
  iA,iB: INTEGER;
begin
  IF NOT bPAUSA AND ACTIVE THEN BEGIN
    IF PROCURA(Edit1.TEXT) <> ´´ THEN
    BEGIN
      iB:=LENGTH(Edit1.TEXT);
      Edit1.TEXT:=PROCURA(Edit1.TEXT);
      Edit1.SELSTART:=iB;
      Edit1.SELLENGTH:=LENGTH(PROCURA(Edit1.TEXT))-iB;
    end;
  END;
  bPAUSA:=FALSE;
  //
  FOR iA := 0 TO ListBox1.ITEMS.COUNT-1 DO
     IF ListBox1.ITEMS.STRINGS[iA] = Edit1.TEXT THEN BEGIN
        ListBox1.ITEMINDEX := iA;
        BREAK;
     END ELSE
        ListBox1.ITEMINDEX := -1;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (KEY = VK_BACK) OR (KEY = VK_DELETE) THEN  bPAUSA:=TRUE;
  IF KEY = 13 THEN Edit1.SELSTART := LENGTH(Edit1.Text);
  IF KEY = 27 THEN Edit1.CLEAR;
end;

procedure TForm1.Label2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 TLabel(Sender).Font.Color:=clRed;
end;

procedure TForm1.Label2MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 TLabel(Sender).Font.Color:=$FF8080;
end;

procedure TForm1.Label2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 TLabel(Sender).Font.Color:=clRed;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 TLabel(Sender).Font.Color:=clWhite;
end;

end.



Alves

Alves
Responder

Gostei + 1

Mais Posts

07/04/2006

Sremulador

helppppppppppppppp...................


Responder

Gostei + 0

10/04/2006

Sremulador

não teria uma menira de fazer isso sem o listBox...


Responder

Gostei + 0

11/04/2006

Alves

Para q o autocomplete funcione, tu tem q carregar uma lista de nomes, ou lista de qualquer coisa de algum lugar...uma tabela um arquivo etc...
Veja outro exemplo usando uma listbox::

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    procedure ComboBox1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ComboBox1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  LastKey: Word;


implementation

{$R *.dfm}

procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 LastKey := Key;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  Srch: string;
  ix: Integer;
begin
  Srch := combobox1.Text;
  if LastKey = $08 then
  begin
    LastKey := 0;
    Exit;
  end;
  LastKey := 0;
  ix := combobox1.Perform(CB_FINDSTRING, - 1, Longint(PChar(Srch)));
  if ix > CB_ERR then
  begin
    combobox1.ItemIndex := ix;
    combobox1.SelStart  := Length(Srch);
    combobox1.SelLength := (Length(combobox1.Text) - Length(Srch));
  end;

end;

end.



Responder

Gostei + 0

12/04/2006

Sremulador

blz, vou carregar de uma tabela...


Responder

Gostei + 0

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

Aceitar