Tags:
delphi
Hejsa
Hvordan kan jeg gøre sådan at når man taster et bogstav eller flere (fx "MIK") bliver det item i en listbox der starter med "MIK" selectet?
Hvis I ikke forstår spørgsmålet så sig lige til.
Med venlig hilsen
Mikkel Bøg Clemmensen
mt.clemmensen@vip.cybercity.dk
7 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
0
<quote>Hejsa
Hvordan kan jeg gøre sådan at når man taster et bogstav eller flere (fx "MIK") bliver det item i en listbox der starter med "MIK" selectet?
Hvis I ikke forstår spørgsmålet så sig lige til.
Med venlig hilsen
Mikkel Bøg Clemmensen
mt.clemmensen@vip.cybercity.dk
</quote>
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ExtCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
procedure ListBox1KeyPress(Sender: TObject; var Key: Char);
procedure FormCreate(Sender: TObject);
private
TimeOut:TTimer;
SpeedSearchStr: String;
Procedure OnTimeOut(Sender: TObject);
function GetMatch(S: String): Integer;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Function TForm1.GetMatch(S: String): Integer;
// denne rutine kunne/burde erstattes af en "quick search" Binærsøgning
Begin
Result:=0; // Her kunne man vælge at fortsætte søgningen
// hvis man iforvejen havde en match
While (Result<ListBox1.Items.Count) And
(Not SameText(S, Copy(ListBox1.Items[Result],1,Length(S)))) Do
Inc(Result);
If Result>=ListBox1.Items.Count Then result:=-1; // No Match
End;
procedure TForm1.ListBox1KeyPress(Sender: TObject; var Key: Char);
Var Idx:Integer;
begin
TimeOut.Enabled:=False;
SpeedSearchStr:=SpeedSearchStr+Key;
Key:=#0;
idx:=GetMatch(SpeedSearchStr);
If idx>=0 Then
ListBox1.ItemIndex:=Idx;
TimeOut.Enabled:=True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Sorted:=True;
TimeOut:=TTimer.Create(Nil);
TimeOut.OnTimer:=OnTimeOut;
TimeOut.Interval:=500; // Time out er en smagssag
TimeOut.Enabled:=False;
end;
Procedure TForm1.OnTimeOut(Sender: TObject);
Begin
TimeOut.Enabled:=False;
SpeedSearchStr:='';
End;
0
Tak for svaret!
Du skal nok få dine point, men hvordan kan man gøre det så man man trykker bogstaverne i en TEdit?
Med venlig hilsen
Mikkel Bøg Clemmensen
mt.clemmensen@vip.cybercity.dk
0
Den siger Missing operator or semicolon ved denne linie:
While (Result (Not SameText(S, Copy(ListBox1.Items[Result],1,Length(S)))) Do
Med venlig hilsen
Mikkel Bøg Clemmensen
mt.clemmensen@vip.cybercity.dk
0
<quote>Den siger Missing operator or semicolon ved denne linie:
While (Result (Not SameText(S, Copy(ListBox1.Items[Result],1,Length(S)))) Do
Med venlig hilsen
Mikkel Bøg Clemmensen
mt.clemmensen@vip.cybercity.dk
</quote>
Der mangler en slut parentes
Why Aren't You Coding ?
Aaangel
0
<quote>
Der mangler en slut parentes
</quote>
Det er íkke det!
Med venlig hilsen
Mikkel Bøg Clemmensen
mt.clemmensen@vip.cybercity.dk
0
Come on!!!! Jeg har meget brug for et svar, bare sig til hvis der skal flere point til.
Med venlig hilsen
Mikkel Bøg Clemmensen
mt.clemmensen@vip.cybercity.dk
0
Da ingen gad at svare går pointene til mig selv?!
Med venlig hilsen
Mikkel Bøg Clemmensen
mt.clemmensen@vip.cybercity.dk