AGB  ·  Datenschutz  ·  Impressum  







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

TListView: erweitertes suchen

Ein Thema von 100nF · begonnen am 24. Mär 2005 · letzter Beitrag vom 25. Mär 2005
Antwort Antwort
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#1

TListView: erweitertes suchen

  Alt 24. Mär 2005, 18:29
Guten Tag zusammen,

ich habe ein problem...
...und zwar möchte ich bei einer sortierten listview, dass wenn ich einen buchstabe (oder mehrere hintereinander) eingebe, dass das erste item markiert wird, das mit diesem/diesen buchstaben beginnt.
ich habe 4 sichtbare spalten. ich kann jede einzeln auf oder ablaufend sortieren lassen (mit diesem code)
vieleicht habt ihr ja winamp oder musicmatch installiert, da funktioniert es genau so wie ich meine. man sortiert, gibt einen/mehrere buchstaben ein, und die erste zeile die mit den eingegebenen buchstaben beginnt, wird markiert.

nun aber noch was. die listview hat sowas schon eingebaut. wenn man einen buchstaben eingibt, wird aber immer nur in der ersten spalte gesucht, egal ob sortiert oder nicht. kann man das auch irgendwie abschalten, denn das könnte noch störend wirken...?

ich hoffe, ich habe mich klar genug ausgedrückt...
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: TListView: erweitertes suchen

  Alt 24. Mär 2005, 21:53
Das habe ich mit einer ListBox gemacht, aber sonst sollte es nicht so schwer sein mit einer Listview zu implementieren.

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Edit1: TEdit;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Edit1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
    function BinarySearch(_low_, _high_ :integer):boolean;
  end;

var
  Form1: TForm1;
  size : integer = 0;
  Index : integer = -1;
  ToFind : string;
  SearchedTimes : integer=0;

implementation

{$R *.dfm}

function FillRandomStr(const n:integer):string;
 var i:integer;
begin
 SetLength(Result,n);
 for i:=1 to n do Result[i] := Chr(97 + Random(122-97));
end;

procedure TForm1.FormCreate(Sender: TObject);
 var i:integer;
begin
 Randomize();
 Edit1.Text := '';
 Label1.Caption := '';
 ListBox1.Sorted := True;
 ListBox1.Align := alBottom;
 for i:=0 to 5000 do ListBox1.Items.Add(FillRandomStr(4+Random(15)));
end;

function TForm1.BinarySearch(_low_, _high_ :integer):boolean;
 var half : integer;
begin
 if _high_-_low_ <= 1 then Result := False
 else
 begin
  Inc(SearchedTimes);
  Half := (_low_ + _high_) div 2;

  ToFind := Copy(ListBox1.Items[half],1,Size);

  if ToFind = Edit1.Text then
  begin
   Index := half;
   Result := True;
  end
         else
  if ToFind > Edit1.Text then
     Result := BinarySearch(_low_,half)
         else
     Result := BinarySearch(Half,_high_);
 end;
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 size := length(Edit1.Text);
 Index := -1;
 if size > 0 then
 begin
  SearchedTimes := 0;
  BinarySearch(0,ListBox1.Count-1);
  ListBox1.ItemIndex := Index;
  if Index <>-1 then
  begin
   ListBox1.TopIndex := Index;
   Label1.Caption :='Found ' + ListBox1.Items[index] + ' at '+inttostr(index)+' position. - '+inttostr(SearchedTimes)+'-queries.';
  end
   else Label1.Caption :='Nothing found.';
 end;
end;

end.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#3

Re: TListView: erweitertes suchen

  Alt 25. Mär 2005, 09:03
vielen dank sniper_w!
ich werde gleich mal schauen ob ich es umbasteln kann...
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#4

Re: TListView: erweitertes suchen

  Alt 25. Mär 2005, 09:28
habs leider nicht so hingekriegt wie es sein soll. es wird nicht die erste spalte markiert, die mit (edit1.text) beginnt, sondern irgend ein anderer...

naja, werde mal ein bisschen weiterbasteln...

ach ja, kann man das automatische suchen in der listview auch ausschalten? das macht nämlich, dass ich in den anderen spalten nicht suchen kann mit der procedure

procedure TForm1.ListView1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);

, es geht nur wenn man den suchtext in einem edit eingibt, was ich aber nicht will, weil wenn gesucht wird, hat die listview den focus, und ich muss erst wieder ins edit klicken um weiter zu schreiben...
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz