AGB  ·  Datenschutz  ·  Impressum  







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

Suche in ListBoxes

Ein Thema von Loni · begonnen am 31. Mär 2007 · letzter Beitrag vom 15. Sep 2007
Antwort Antwort
Seite 2 von 3     12 3      
Loni

Registriert seit: 31. Mär 2007
77 Beiträge
 
#11

Re: Suche in ListBoxes

  Alt 1. Apr 2007, 11:20
war gerade mit so vielen dingen beschäftigt DANKE
  Mit Zitat antworten Zitat
Loni

Registriert seit: 31. Mär 2007
77 Beiträge
 
#12

Re: Suche in ListBoxes

  Alt 1. Apr 2007, 12:01
und wie stelle ich es an das er wenn ich auf einen button weitersuchen klicke den nächsten passenden Eintrag zeigt
z.B. Suchwort: 'ist' und das gibts dann 20 mal oder so und dannn soll der bei Suchen den ersten passenden eintrag aneigen
und auf weitersuchen immer wieder den darauf folgenden .
oder kann das dein quellcode auch und ich habs schn wieder nicht gemerkt Blackheart ^^.
wenn mir jemand dafür noch nen lösungs ansatz gibt dann wäre ich wunschlos glücklich =).
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Suche in ListBoxes

  Alt 1. Apr 2007, 13:58
Hi,

ich habe dir ein Testprogramm angehängt, wo die gesuchten Worte und dazu noch die Position in der Listbox farblich hervorgehoben werden.
Angehängte Dateien
Dateityp: zip listboxsuche_951.zip (8,3 KB, 27x aufgerufen)
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Loni

Registriert seit: 31. Mär 2007
77 Beiträge
 
#14

Re: Suche in ListBoxes

  Alt 1. Apr 2007, 19:52
irgendwie klappt es bei mir nicht kann es daran liegen das bei mir vorher abgefragt wird welches Item in einer anderen ListBox markiert ist um dann auch im passenden Text zu suchen.
Bild mit näheren Infos habe ich drangehängt um es dir bildlicher zu machen.




Delphi-Quellcode:
Unit Unit4;

interface

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

type
  TSuche = record
    Text: AnsiString;
    ItemPos: integer;
    StrPos: integer;
  end;

type
  TForm4 = class(TForm)
    TNInhalt: TTabbedNotebook;
    LaHilfeSatz1: TLabel;
    LaHilfeSatz2: TLabel;
    ListBox1: TListBox;
    BtHilfeOffnen: TButton;
    BtHilfeAbbrechen: TButton;
    PaLoni: TPanel;
    ImLoni: TImage;
    PaSuche: TPanel;
    LaInXSuchen: TLabel;
    EdSuchen: TEdit;
    BitBtnSuche: TBitBtn;
    LaCopyright: TLabel;
    MeInformationen: TMemo;
    ImAnimation: TImage;
    procedure BtHilfeAbbrechenClick(Sender: TObject);
    procedure BtHilfeOffnenClick(Sender: TObject);
    procedure BitBtnSucheClick(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  private
    Suche: TSuche;
  public
    { Public-Deklarationen }
  end;

var
  Form4: TForm4;

implementation

uses Unit5, Unit6, Math;

{$R *.dfm}

procedure TForm4.BtHilfeAbbrechenClick(Sender: TObject);
begin
Form4.Visible :=false;
end;


procedure TForm4.BtHilfeOffnenClick(Sender: TObject);
begin
if ListBox1.ItemIndex=0 then
begin
Form6.Visible:=true;
Form6.Caption:='Allgemeine Hilfe';
Form6.ListBoxHilfeAllgemein.Visible:=true;
Form6.ListBoxHilfeAnwendungen.Visible:=false;
end
else
if ListBox1.ItemIndex=1 then
begin
Form6.Visible:=true;
Form6.Caption:='MiniPaint Anwendungen';
Form6.ListBoxHilfeAllgemein.Visible:=false;
Form6.ListBoxHilfeAnwendungen.Visible:=true;
end;
end;


procedure TForm4.BitBtnSucheClick(Sender: TObject);
var
  i, NextPos: integer;
  ItemText: AnsiString;
begin
if LaInXSuchen.Caption='In // Allgemeine Hilfethen
begin
  if Suche.ItemPos= -1 then
    Suche.ItemPos:= 0;

  Suche.Text:= UpperCase(EdSuchen.Text);
  for i := Suche.ItemPos to Pred(Form6.ListBoxHilfeAllgemein.Count) do
  begin
    ItemText:= UpperCase(Form6.ListBoxHilfeAllgemein.Items.Strings[i]);
    if Suche.StrPos> 0 then
    begin
      NextPos:= pos(Suche.Text, Copy(ItemText, Suche.StrPos+ length(Suche.Text), length(ItemText)- Suche.StrPos));
      if NextPos> 0 then
        Suche.StrPos:= Suche.StrPos+ length(Suche.Text)+ NextPos- 1
      else
        Suche.StrPos:= 0;
    end
    else
      Suche.StrPos:= pos(Suche.Text, ItemText);
    if Suche.StrPos> 0 then
    begin
      Suche.ItemPos:= i;
      break;
    end;
  end;
  if (Suche.StrPos= 0) and (i= Form6.ListBoxHilfeAllgemein.Count) then
   Suche.ItemPos:= -1;


  if Suche.ItemPos = -1 then
  BitBtnSuche.Caption:= 'Suchen'
  else
  BitBtnSuche.Caption:= 'WeiterSuche>>';
  Form6.ListBoxHilfeAllgemein.Repaint;
end
else
if LaInXSuchen.Caption='In // MiniPaint Anwendungenthen
begin
  if Suche.ItemPos= -1 then
    Suche.ItemPos:= 0;

  Suche.Text:= UpperCase(EdSuchen.Text);
  for i := Suche.ItemPos to Pred(Form6.ListBoxHilfeAnwendungen.Count) do
  begin
    ItemText:= UpperCase(Form6.ListBoxHilfeAnwendungen.Items.Strings[i]);
    if Suche.StrPos> 0 then
    begin
      NextPos:= pos(Suche.Text, Copy(ItemText, Suche.StrPos+ length(Suche.Text), length(ItemText)- Suche.StrPos));
      if NextPos> 0 then
        Suche.StrPos:= Suche.StrPos+ length(Suche.Text)+ NextPos- 1
      else
        Suche.StrPos:= 0;
    end
    else
      Suche.StrPos:= pos(Suche.Text, ItemText);
    if Suche.StrPos> 0 then
    begin
      Suche.ItemPos:= i;
      break;
    end;
  end;
  if (Suche.StrPos= 0) and (i= Form6.ListBoxHilfeAnwendungen.Count) then
   Suche.ItemPos:= -1;


  if Suche.ItemPos = -1 then
  BitBtnSuche.Caption:= 'Suchen'
  else
  BitBtnSuche.Caption:= 'WeiterSuche>>';
  Form6.ListBoxHilfeAnwendungen.Repaint;
end;
end;


procedure TForm4.ListBox1Click(Sender: TObject);
begin
if ListBox1.ItemIndex=0 then
begin
LaInXSuchen.Caption:='In // Allgemeine Hilfe';
end
else
if ListBox1.ItemIndex=1 then
begin
LaInXSuchen.Caption:='In // MiniPaint Anwendungen';
end;
end;



end.

Delphi-Quellcode:
unit Unit6;

interface

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

type
  TSuche = record
    Text: AnsiString;
    ItemPos: integer;
    StrPos: integer;
  end;

type
  TForm6 = class(TForm)
    ListBoxHilfeAllgemein: TListBox;
    LaHilfeInformantionen: TLabel;
    ListBoxHilfeAnwendungen: TListBox;
    procedure ListBoxHilfeAllgemeinDrawItem(Control: TWinControl;
      Index: Integer; Rect: TRect; State: TOwnerDrawState);
    procedure ListBoxHilfeAnwendungenDrawItem(Control: TWinControl;
      Index: Integer; Rect: TRect; State: TOwnerDrawState);
    procedure FormCreate(Sender: TObject);
  private
  Suche: TSuche;
  public
    { Public-Deklarationen }
  end;

var
  Form6: TForm6;

implementation

{$R *.dfm}




procedure TForm6.ListBoxHilfeAllgemeinDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
  ListText, SelText: AnsiString;
begin
  with (Control as TListBox).Canvas do
  begin
    if not (odFocused in State) then
    begin
      if Index = Suche.ItemPos then // markiertes Item
      begin
        Brush.Color:= graphics.clYellow;//clRed;//graphics.clHighlight;
        FillRect(Rect);
        Font.Color:= graphics.clBlack;
        ListText:= (Control as TListBox).Items[Index];
        TextOut(Rect.Left + 2, Rect.Top, ListText);
        Font.Color:= graphics.clRed;
        SelText:= Copy(ListText, Suche.StrPos, length(Suche.Text));
        TextOut(Rect.Left + 2+ TextWidth(Copy(ListText, 1, Suche.StrPos- 1)), Rect.Top, SelText);
      end else
      begin
        Brush.Color := (Control as TListBox).Color;
        Font.Color:= graphics.clBlack;
        FillRect(Rect);
        TextOut(Rect.Left + 2, Rect.Top, (Control as TListBox).Items[Index]);
      end;

    end;
  end;
end;


procedure TForm6.ListBoxHilfeAnwendungenDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
  ListText, SelText: AnsiString;
begin
  with (Control as TListBox).Canvas do
  begin
    if not (odFocused in State) then
    begin
      if Index = Suche.ItemPos then // markiertes Item
      begin
        Brush.Color:= graphics.clYellow;//clRed;//graphics.clHighlight;
        FillRect(Rect);
        Font.Color:= graphics.clBlack;
        ListText:= (Control as TListBox).Items[Index];
        TextOut(Rect.Left + 2, Rect.Top, ListText);
        Font.Color:= graphics.clRed;
        SelText:= Copy(ListText, Suche.StrPos, length(Suche.Text));
        TextOut(Rect.Left + 2+ TextWidth(Copy(ListText, 1, Suche.StrPos- 1)), Rect.Top, SelText);
      end else
      begin
        Brush.Color := (Control as TListBox).Color;
        Font.Color:= graphics.clBlack;
        FillRect(Rect);
        TextOut(Rect.Left + 2, Rect.Top, (Control as TListBox).Items[Index]);
      end;

    end;
  end;
end;


procedure TForm6.FormCreate(Sender: TObject);
begin
begin
  ZeroMemory(@Suche, SizeOf(TSuche));
  Suche.ItemPos:= -1;
  Form6.ListBoxHilfeAllgemein.Style := lbOwnerDrawFixed;
  Form6.ListBoxHilfeAnwendungen.Style := lbOwnerDrawFixed;
end;
end;

end.
Miniaturansicht angehängter Grafiken
anhang_452.png  
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Suche in ListBoxes

  Alt 1. Apr 2007, 20:48
Hi,

auf jeden Fall liegt es daran, dass du die Variable Suche 2X, in jeder Form hast, dann kann es nicht funktionieren.
Ich schreib nachher noch ein kleines Beispiel mit 2 Formularen.
Die Variable Suche könnte man als public deklarieren, oder man lagert die Procdedur BitBtnSucheClick(), auf das andere Formular aus.

EDIT: ich musste außerdem für jede Listbox eine Variable Suche erstellen siehe Anhang:
Angehängte Dateien
Dateityp: zip loni2_947.zip (12,3 KB, 19x aufgerufen)
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Loni

Registriert seit: 31. Mär 2007
77 Beiträge
 
#16

Re: Suche in ListBoxes

  Alt 1. Apr 2007, 22:13
ohne scheiß das doch ma Hilfe wie sie im Lehrbuch steht VIELEN VIELEN DANK bitsetter
ich probiers gleich ma aus


EDIT::: KLAPT GENAU SO WIE ICH ES DIE GANZE ZEIT WILL DANKE NOCHMALS!!!!!!
  Mit Zitat antworten Zitat
Hagbart

Registriert seit: 9. Dez 2006
Ort: Alsfeld
35 Beiträge
 
Delphi 7 Personal
 
#17

Re: Suche in ListBoxes

  Alt 22. Apr 2007, 22:18
Sorry das ich diesen Thread wieder ausgrabe, aber ich dachte mir das ist besser als einen neuen zu erstellen, wo erstmal keiner weiß wodrum es geht.
Also ich habe nur eine Listbox und das mit dem Suchen und markieren funktioniert auch schon super. Nur mein Problem ist jetzt, dass diese Listbox sehr viele Einträge hat und nicht automatisch dahin scrollt ww das markierte ist. Das heißt man muss immer erst von oben bis nach unten scrollen bis man die Markierung sieht. Ich hab schon ein paar bescheidene Versuche gemacht, das er automatisch zur Markierung springt, aber funktioniert hat bisher noch nichts.

Ich wäre für eure Hilfe wirklich dankbar.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#18

Re: Suche in ListBoxes

  Alt 22. Apr 2007, 22:53
Hallo Hagbart,

hast du die Eigenschaft Delphi-Referenz durchsuchenTListBox.TopIndex noch nicht entdeckt?

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Suche in ListBoxes

  Alt 22. Apr 2007, 23:22
Hi,

mit ItemIndex wäre es wohl auch gegangen, aber TopIndex ist in diesem Fall wohl noch besser.
Angehängte Dateien
Dateityp: zip listboxsuche_197.zip (8,4 KB, 24x aufgerufen)
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Hagbart

Registriert seit: 9. Dez 2006
Ort: Alsfeld
35 Beiträge
 
Delphi 7 Personal
 
#20

Re: Suche in ListBoxes

  Alt 23. Apr 2007, 16:14
Danke, funtkioniert super. Ich habe erst mit ItemIndex gearbeitet, nur ich hatte nicht Suche.ItemPos benutzt. Obwohl man das eigentlich hätte sehen können
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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:46 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