AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente ComboBox mit AutoFill-Funktion

Ein Thema von eddy · begonnen am 11. Feb 2003 · letzter Beitrag vom 13. Feb 2003
 
Benutzerbild von eddy
eddy

Registriert seit: 3. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#1

Komponente ComboBox mit AutoFill-Funktion

  Alt 11. Feb 2003, 22:08
Hallo Leute,

ich nutze seit längerer Zeit eine Funktion, um ComboBoxen automatisch während der Eingabe zu füllen, dh. man tippt ein Zeichen, und über ein in OnChange verankertes Unterprogramm wird in den Items nach dem ersten passenden Eintrag gesucht. Wird einer gefunden, wird der Eintrag in ComboBox.Text aufgefüllt und markiert. Mit dem nächsten Zeichen wiederholt sich das Ganze.

Nachteil: Man muß bei jeder verwendeten ComboBox in KeyDown ein globale Variable LastKey mit key:word belegen, um diese dann in OnChange auszuwerten. Funktioniert, ist aber lästig.

Nun habe ich eine Komponente erzeugt, die das auch macht, ohne daß ich immer die gleichen Prozeduren hinterlegen muß.

Da es sich um meine erste eigene Komponente handelt, stelle ich das Ergebnis hier zur Diskusion zur Verfügung. Vielleicht sind ja noch ein paar Verbesserungen oder/und sinnvolle Erweiterungen möglich.

Delphi-Quellcode:
unit ComboBoxAF; //ComboBox AutoFill

interface

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

type
  TComboBoxAF = class(TComboBox)
  private
    { Private-Deklarationen }
    FAutoFill : Boolean;
    FLastKey : word;
    FOnKeyDown : TKeyEvent;
    function GetLastKey : word;
    procedure SetLastKey(key : word);
    function GetAutoFill : Boolean;
    procedure SetAutoFill(value : Boolean);
  protected
    { Protected-Deklarationen }
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
    procedure Change; override;
  public
    { Public-Deklarationen }
    constructor Create(aOwner: TComponent); override;
    Destructor Destroy; override;
    property OnKeyDown : TKeyEvent read FOnKeyDown write FOnKeyDown;
  published
    { Published-Deklarationen }
    property LastKey : word read GetLastKey write SetLastKey;
    property AutoFill : Boolean read GetAutoFill write SetAutoFill;
  end;

procedure Register;

implementation

procedure TComboBoxAF.Change;
var
  srch : string;
  ix : integer;
begin
  if Focused and AutoFill then begin
    srch := Text;
    if LastKey = $08 then begin
      LastKey := 0;
    end
    else begin
      LastKey := 0;
      ix := Perform(CB_FINDSTRING, -1, LongInt(PChar(srch)));
      if ix > CB_ERR then begin
        ItemIndex := ix;
        SelStart := Length(srch);
        SelLength := Length(Text) - length(srch);
      end;
    end;
  end;
  Inherited;
end;

procedure TComboBoxAF.KeyDown(var Key: Word; Shift: TShiftState);
begin
  Inherited; // KeyDown(Key, Shift);
  FLastKey := key;
end;

function TComboBoxAF.GetLastKey : word;
begin
  Result := FLastKey;
end;

procedure TComboBoxAF.SetLastKey(key : word);
begin
  FLastKey := key;
end;

function TComboBoxAF.GetAutoFill : Boolean;
begin
  Result := FAutoFill;
end;

procedure TComboBoxAF.SetAutoFill(value : Boolean);
begin
  FAutoFill := value;
end;

constructor TComboBoxAF.Create(aOwner: TComponent);
begin
  inherited Create(aOwner);
  FLastKey := 0;
  FAutoFill := true;
end;

Destructor TComboBoxAF.Destroy;
Begin
  inherited Destroy;
End;

procedure Register;
begin
  RegisterComponents('Beispiele', [TComboBoxAF]); //
end;

end.
mfg
eddy
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz