Søgning

Tags:    delphi

User
Bruger #75 @ 09.01.02 21:50
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
Sorter efter stemmer Sorter efter dato
User
Bruger #744 @ 10.01.02 13:17
<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;





User
Bruger #75 @ 10.01.02 19:56
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




User
Bruger #75 @ 10.01.02 20:03
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>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



User
Bruger #75 @ 13.01.02 11:22
<quote>
Der mangler en slut parentes
</quote>

Det er íkke det!


Med venlig hilsen

Mikkel Bøg Clemmensen
mt.clemmensen@vip.cybercity.dk




User
Bruger #75 @ 19.01.02 16:26
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




User
Bruger #75 @ 24.01.02 21:16
Da ingen gad at svare går pointene til mig selv?!


Med venlig hilsen

Mikkel Bøg Clemmensen
mt.clemmensen@vip.cybercity.dk




t