Ich wünsche allen einen wunderschönen Freitag und hoffe das jemand in der Lage ist imr zu helfen.
Und zwar geht es um folgendes ich muss eine DelphiKomponente erstellen die von einer Combox abgeleitet wurde und nun die Fähigkeit erhalten soll in den vorhandenen
Items den eingegebenen Text zu suchen im Prinzip genau wie bei der Adressleiste des Internetexplorers.
Leider habe ich im Moment nur 2 Probleme damit:
1. Wie kann ich ein neues Ereignis definieren (z.B. OnTextinput, das dann greift, wenn der User etwas in die Textbox einträgt? Dies ist leider dringend notwendig, weil das original OnChange Ereignis bestehen bleiben muss.
2. In der jetzigen Version markiere ich den nicht selbst eingegeben Text ähnlich wie beim IE(s.O.) allerdings löscht er mir nur den markierten teil und nicht den von mir eingegebenen Buchstaben.
Danke im Vorraus !
Euer Michael
Hier ist der Quellcode:
unit SearchingComboBox;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TSearchingComboBox = class(TComboBox)
private
{ Private-Deklarationen }
bSearching: Boolean;
protected
{ Protected-Deklarationen }
public
{ Public-Deklarationen }
published
{ Published-Deklarationen }
procedure change; override;
Function Eingabepruefen(sEingabe: String): Boolean;
property Searching: Boolean read bSearching write bSearching default False;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Klu', [TSearchingComboBox]);
end;
procedure TSearchingComboBox.change;
begin
if Searching
then begin
if not Eingabepruefen(Text)
then ShowMessage('Kein Eintrag vorhanden');
end;
end;
Function TSearchingcomboBox.Eingabepruefen(sEingabe: String): Boolean;
Var
i: integer;
begin
result := false;
if (items.Count > 0) AND (sEingabe <> '')
then begin
for i:= 0 to items.Count -1 do
begin
if Pos(sEingabe, items) = 1
then begin
Text := items;
selStart := Length(Text)+1;
selLength := Length(sEingabe) - Length(Text);
result := true;
exit;
end;
end;
end else
result := true;
end;
end.