![]() |
Suche in ListBoxes
Liste der Anhänge anzeigen (Anzahl: 1)
Hi zusammen ich bin neu hier und auch noch nicht ganz so vertaut mit Delphi und falls das hier die falsche rubrik ist dann bitte verschieben.
Also ich möchte gerne (am besten über den Finddialog) 2 ListBoxes nach einem eingegeben Wort durchsuchen lassen und dieses dann markieren lassen (z.B. in clred) nun habe ich schon unzählige Beiträge in diesem Forum gelesen aber noch nicht mal annähernd etwas gefunden das ich hätte verstehen können oder in mein Programm einbauen können :oops: . Ich habe gelesen das der FindDialog nur mit RichEdits funktioniert und hoffe das dem nicht so ist. Also ich habe eine ListBox in der mann in der mann zwischen 2 "Hilfebüchern"(auch ListBoxes aber in einer andern Form) wählen kann und in der selben Form ein FindDialog der das gerade ausgewählte "Buch" nach einem eingegebnen Wort wie "Farben" durchsuchen soll und dann halt wie erwähnt markieren soll.
Delphi-Quellcode:
Hoffe ihr durschaut das Chaos und könnt mir helfen und danke im vorraus(ich habe halt absolut keinen plan weil wir das noch nicht im untericht hatten und da in NRW gerade ferien sind kann ich nur euch auf die nerven gehen ^^).Ich finde das Forum hier klasse :thumb:.
procedure TForm4.BtHilfeOffnenClick(Sender: TObject);//Öffnen button um die einzelnen hifen zu öffnen
begin if ListBox1.ItemIndex=0 then //wenn auf Allgemeine Hilfe(ItemIndex=0) gecklickt wird öffnet sich eineneu ListBox "Allgemeine Hilfe" begin Form6.Visible:=true;//Form auf der die beiden ListBoxes sind Form6.Caption:='Allgemeine Hilfe'; Form6.ListBoxHilfeAllgemein.Visible:=true; Form6.ListBoxHilfeAnwendungen.Visible:=false; end else if ListBox1.ItemIndex=1 then //wenn auf MiniPaint Anwendungen(ItemIndex=1) gecklickt wird öffnet sich eineneu ListBox "Anwendungen Hilfe" begin Form6.Visible:=true; Form6.Caption:='MiniPaint Anwendungen'; Form6.ListBoxHilfeAllgemein.Visible:=false; Form6.ListBoxHilfeAnwendungen.Visible:=true; end; end; procedure TForm4.BitBtnSucheClick(Sender: TObject); begin FindDialog1.Execute; end; procedure TForm4.FindDialog1Find(Sender: TObject); begin //Wenn "Hilfe Allgemein" angeklickt dann öffne "Form6.ListBoxHilfeAllgemein" suche das Suchwort dort und markiere es //Wenn "Hilfe Anwendungen" angeklickt dann öffne "Form6.ListBoxHilfeAnwendungen" suche das Suchwort dort und markiere es end. [Wenn ich statt den 2 Listboxes RichEdits nehmen muss dann bitte auch erklären wie ich da das scrollen einstellen kann BIG THX] |
Re: Suche in ListBoxes
Hi und erstmal Herzlich Willkommen in der DP :dp:
Zitat:
Eine ListBox ist ja erstmal nicht viel mehr als eine Liste von Zeichenketten/Strings, die angezeigt werden (und natürlich kann man auch scrollen). Wenn ich Dir eine Liste von Sätzen gebe und Du einen Bestimmten finden sollst, wie machst Du das? Ich denke mal auch Du würdest den einfach Zeile für Zeile durchgehen und nach einem String suchen. Anhaltspunkt wäre hier also ![]() Bleibt erstmal die Frage, wie Du raus bekommst, wieviele Zeilen eine Listbox gerade hat und was in welcher Zeile steht. Und der einfachste Weg so etwas raus zu bekommen ist immer der Blick in die Online Hilfe (OH). Such einfach mal in der Hilfe nach TListBox. Da findest Du dann eine Klasse. Oben stehen dann Dinge wie Ereignisse, Methoden (Prozeduren und Funktionen) sowie Eigenschaften. Diese Namen halten immer was sie versprechen, Ereignisse sind wirklich Ereignisse, die eintreten können, über die Du informiert werden kannst. Und so etwas die Anzahl der Zeilen ist ganz klar eine Eigenschaft. Mit etwas englisch-Kenntnissen findest Du sehr schnell die richtige Eigenschaft, zudem steht in der aktuellen Hilfe (z.B. Turbo Delphi Explorer) auch immer eine kleine Erklärung zu jeder Eigenschaft. Schau einfach mal nach und sag bescheid / bzw. frag weiter nach, wenn Du etwas nicht verstehst und/oder irgendwo nicht weiter kommst. Gruß Der Unwissende |
Re: Suche in ListBoxes
Delphi-Quellcode:
EDIT:OK das war mein Fehler -->(ich habs jetzt so gemach aber der findet dann nur was wenn die eingabe im Editfeld einen Buchstaben beträgt trotz STRING )geht jezt
var
Form4: TForm4; Suchwort: String; i: Integer; l: Char; procedure TForm4.BitBtnSucheClick(Sender: TObject); begin Suchwort:=EdSuchen.Text; l:=''; if LaInXSuchen.Caption='In // Allgemeine Hilfe' then begin for i:=1 to Form6.ListBoxHilfeAllgemein.items.count-1 do if pos(l+Suchwort+l, Form6.ListBoxHilfeAllgemein.items[i-1]) > 0 then Label1.caption:=Form6.ListBoxHilfeAllgemein.items[i-1]; end; end; nun möchte ich die gefundene zeile aber nicht in ein Label übernehmen sondern die zeile direkt in der ListBox zB Rot markiert haben villt kannst du mir ja mit nem Ansatz helfen (wenigstens nem stückchen quellcode) =) danke |
Re: Suche in ListBoxes
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Zitat:
Delphi-Quellcode:
Oder ansonsten einfach mit
procedure TForm4.BitBtnSucheClick(Sender: TObject);
begin Suchwort:=EdSuchen.Text; l:=''; if LaInXSuchen.Caption='In // Allgemeine Hilfe' then begin for i:=1 to Form6.ListBoxHilfeAllgemein.items.count-1 do if pos(l+Suchwort+l, Form6.ListBoxHilfeAllgemein.items[i-1]) > 0 then Form6.ListBoxHilfeAllgemein.Tag := Form6.ListBoxHilfeAllgemein.items[i-1];//<-- end; end;
Delphi-Quellcode:
die Zeile markieren.
Form6.ListBoxHilfeAllgemein.ItemIndex := Form6.ListBoxHilfeAllgemein.items[i-1];
|
Re: Suche in ListBoxes
Vielen Dank !!!!! endlich mal was womit ich etwas anfangen kann =) so stell ich mir das vor :zwinker:
|
Re: Suche in ListBoxes
och neee leider zu früh gefreut denn wenn ich den quelltext gemau so einfüge steht auf der linken seite ein INTEGER und aud der rechten seite ein STRING ok ganz dumm bin ich auch nicht ich habe also einfach StrToInt (IntToStr geht nciht da sonst der linken seite nichts zugewiesen werden kann ) dann läüft da progi auch aber sobald ich auf suchen klicke steht da : "die zeile die ich markiert haben will" ist kein gültiger ineger wert also so -> : 'Option: Hier können Sie zusätzliche Einstellungen tätigen ' ist kein gültiger integer wert . Aber wenn ich nach zahlen suche klappt "nur" der zeilensprung zur markierten zeile leider
Delphi-Quellcode:
procedure TForm4.BitBtnSucheClick(Sender: TObject);
begin Suchwort:=EdSuchen.Text; if LaInXSuchen.Caption='In // Allgemeine Hilfe' then begin for i:=1 to Form6.ListBoxHilfeAllgemein.items.count-1 do if pos(Suchwort, Form6.ListBoxHilfeAllgemein.items[i-1]) > 0 then Form6.ListBoxHilfeAllgemein.ItemIndex := StrToInt(Form6.ListBoxHilfeAllgemein.items[i-1]); Form6.ListBoxHilfeAllgemein.Tag := StrToInt(Form6.ListBoxHilfeAllgemein.items[i-1]); Form6.ListBoxHilfeAllgemein.Visible:=true; Form6.Visible:=true; end; end; |
Re: Suche in ListBoxes
Moin,
ja stimmt, das müsste wohl eher so gehen:
Delphi-Quellcode:
Form6.ListBoxHilfeAllgemein.Tag := i;
|
Re: Suche in ListBoxes
Hallo
Hier kannst Du zusätzlich auch mit * Suchen zb. bei Hello *el
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); begin with (Control as TListbox) do begin if OdSelected in State then //Prüft, ob ein Item markiert ist Canvas.Brush.Color := clRed; //Canvas-Hintergrundfarbe auf Rot setzen Canvas.FillRect(Rect); // Hintergrund malen Canvas.TextOut(Rect.Left, Rect.Top, Items[Index]); // Text ausgeben end; end; procedure TForm1.FormCreate(Sender: TObject); begin ListBox1.Style:= lbOwnerDrawFixed; end; procedure TForm1.Edit1Change(Sender: TObject); var SuchString : string; i : Integer; begin SuchString := Edit1.Text; if Copy(SuchString,1,1) = '*' then begin // * als Platzhalter vorn SuchString := Copy(SuchString, 2, Length(SuchString) - 1); for i := 0 To ListBox1.Items.Count - 1 do if Pos(SuchString, Listbox1.Items[i]) <> 0 then begin Listbox1.ItemIndex := i; // Eintrag markieren Exit end end else begin // sonst for i := 0 to ListBox1.Items.Count - 1 do if UpperCase(SuchString) = UpperCase(Copy(Listbox1.Items[i],1, Length(SuchString))) then begin ListBox1.ItemIndex := i; // Eintrag markieren Exit; end; end; end; |
Re: Suche in ListBoxes
EDIT : Danke das werde ich auch mit einbauen :-D
ok jetzt alles (Farbiges unterlegen und Zeilensprung zum gesuchten Wort) aber der ist immer noch zu case sensitive weil der fast nichts findet was ich eingebe auser ich tippe es genau so ein und wenn das Wort oder der Buchstabe mehrmals auftauchen zeigt der nur den lezten Eintrag an deswegen wäre ne weiter suchfunktion auch ganz cool :-D ich weiß ich gehe euch bestimmt schon auf die nerven aber VIELEN DANK quellcode bis jetzt
Delphi-Quellcode:
und
procedure TForm6.ListBoxHilfeAllgemeinDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState); begin with (Control as TListBox).Canvas do begin if not (odFocused in State) then begin if Index = Form6.ListBoxHilfeAllgemein.Tag then // markiertes Item begin Brush.Color:= clRed;//graphics.clHighlight; //Font.Color:= graphics.clHighlightText; end else begin Brush.Color := (Control as TListBox).Color; Font.Color:= graphics.clBlack; end; FillRect(Rect); TextOut(Rect.Left + 2, Rect.Top, (Control as TListBox).Items[Index]); end; end; end; procedure TForm6.ListBoxHilfeAnwendungenDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin with (Control as TListBox).Canvas do begin if not (odFocused in State) then begin if Index = Form6.ListBoxHilfeAllgemein.Tag then // markiertes Item begin Brush.Color:= clRed;//graphics.clHighlight; //Font.Color:= graphics.clHighlightText; end else begin Brush.Color := (Control as TListBox).Color; Font.Color:= graphics.clBlack; end; FillRect(Rect); TextOut(Rect.Left + 2, Rect.Top, (Control as TListBox).Items[Index]); end; end; end; procedure TForm6.FormCreate(Sender: TObject); begin ListBoxHilfeAllgemein.Tag:= -1; ListBoxHilfeAllgemein.Style := lbOwnerDrawFixed; ListBoxHilfeAnwendungen.Tag:= -1; ListBoxHilfeAnwendungen.Style := lbOwnerDrawFixed; end;
Delphi-Quellcode:
procedure TForm4.BitBtnSucheClick(Sender: TObject);
begin Suchwort:=EdSuchen.Text; if LaInXSuchen.Caption='In // Allgemeine Hilfe' then begin for i:=1 to Form6.ListBoxHilfeAllgemein.items.count-1 do if pos(Suchwort, Form6.ListBoxHilfeAllgemein.items[i-1]) > 0 then begin Form6.ListBoxHilfeAllgemein.ItemIndex := (i-1); Form6.ListBoxHilfeAllgemein.Tag := (i-1); Form6.ListBoxHilfeAllgemein.Visible:=true; Form6.ListBoxHilfeAnwendungen.Visible:=false; Form6.Visible:=true; end; end else if LaInXSuchen.Caption='In // MiniPaint Anwendungen' then begin for i:=1 to Form6.ListBoxHilfeAnwendungen.items.count-1 do if pos(Suchwort, Form6.ListBoxHilfeAnwendungen.items[i-1]) > 0 then Form6.ListBoxHilfeAnwendungen.ItemIndex := (i-1); Form6.ListBoxHilfeAnwendungen.Tag := (i-1); Form6.ListBoxHilfeAnwendungen.Visible:=true; Form6.ListBoxHilfeAllgemein.Visible:=false; Form6.Visible:=true; end; end; |
Re: Suche in ListBoxes
Was Denkst Du was der Code macht, mal ausprobiert. :wink:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz