![]() |
alle Strings aus Edit.Text in der ListBox farbig darstellen
Hallo
Ich habe ein Edit und eine ListBox und in der ListBox sind zb: 10 Einträge Jetzt möchte ich gerne das ein bestimmtes Wort was im Edit1 eingetragen wurde in der ListBox gesucht wird und alle gefundenen Wörter farblich dargestellt werden. Ich weiß das es mit RichEdit einfacher geht und dafür hätte ich auch schon eine Lösung nur RichEdit kommt für mich nicht in frage da es kein OnClick Ereignis also (items.strings[i] Selectierung per Maus) besitzt wie es ListBox hat.
Delphi-Quellcode:
Grüßefor i := 0 to ListBox1.Items.Count -1 do begin if ListBox1.Items.Strings[i] = // hier Prüfen lassen ob das Wort was im Edit1 steht vorhanden ist wenn ja farblich darstellen end; Holger |
Re: alle Strings aus Edit.Text in der ListBox farbig darstel
Du könntest das ganze OwnerDraw machen und dann die Einträge selber zeichnen.
|
Re: alle Strings aus Edit.Text in der ListBox farbig darstel
Hallo Holger,
vielleicht helfen dir ein paar Code-Zeilen aus einem anderen thread weiter: ![]() Grüße vom marabu |
Re: alle Strings aus Edit.Text in der ListBox farbig darstel
Ich versuche die ganze Zeit ein bestimmtes Wort in der ListBox zu suchen und zwar so
Delphi-Quellcode:
oder bin ich völlig auf dem Holzweg ? :mrgreen:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var i:integer; s,sText:string; slTemp: TStringList; begin try for i := 0 to lbAusgabe.Items.Count -1 do begin slTemp := TStringList.Create; slTemp.Clear(); sText := ''; //in lbAusgabe Strings[i] wird nach dem Wort was in eSearch.Text steht gesucht funktioniert aber leider nicht //sText := lbAusgabe.Items.Strings[i]; //in edit1 wird nach dem Wort was in eSearch.Text steht gesucht das funktioniert sehr gut sText := Edit1.Text; s := eSearch.Text; //warum funktioniert die Suche nur in Edit1 ? und nicht in lbAusgabe Strings[i] ? while pos(s,sText) <> 0 do begin slTemp.Add(copy(sText,1,pos(s,sText)-1)); delete(sText,1,pos(s,sText)); end; slTemp.Add(sText); if slTemp.Strings[i] = sText Then begin // nichts tun end else begin MessageDlg('gesuchte Wort gefunden',mtInformation, [mbOK], 0); //wenn gefunden dann alle gefundenen Wörter farblich darstellen end;//if end;//schleife except //Exit; end; //try end; Gruß Holger |
Re: alle Strings aus Edit.Text in der ListBox farbig darstel
Hallo Holger,
wenn jeder Eintrag deiner ListBox ein Text ist, welcher dein Suchwort enthalten kann, dann scheint mir TRichEdit doch die bessere Wahl zu sein. Kannst du etwas genauer erklären, warum die verfügbaren Ereignisse der Komponente TRichEdit dir nicht genügen? Was möchtest du eigentlich erreichen? marabu |
Re: alle Strings aus Edit.Text in der ListBox farbig darstel
Zitat:
Hallo Marabu TRichEdit hat kein OnClick Ereignis also ich kann bei Richedit nicht die Einträge wie bei der ListBox mit der Maus auswählen. Ich möchte also wie erwähnt jeden einzelnen Eintrag mit der Maus anwählen so das dieser Eintrag makiert ist und dann übernommen werden kann alleine wegen dem löschen schon hier mal ein bischen Code
Delphi-Quellcode:
//das würde zb: nicht so einfach gehen for i := 0 to lbAusgabe.Items.Count -1 do begin if lbAusgabe.Selected[i] = true then begin lbWunschliste.Items.Add(lbAusgabe.Items.Strings[i]); end; end; // oder das for i := 0 to lbAusgabe.Items.Count -1 do begin if lbAusgabe.Selected[i] = true then begin sDateiname := lbAusgabe.Items.Strings[i]; ShellExecute(Handle,'open','C:\Programme\Winamp\winamp.exe',PChar('"' + sDateiname+'"'),'',SW_NORMAL); end; end; wenn diese Auswahlmöglichkeit auch bei Richedit gehen würde schreib ich sofort alles um :-D aber allein schon Selected[i] geht bei Richedit nicht oder ? so gute Nacht muss ins bett :( Holger |
Re: alle Strings aus Edit.Text in der ListBox farbig darstel
Hallo Holger,
du scheinst mit Song-Listen für einen Player zu hantieren - dann ist die ListBox schon richtig. Eine Selektion aller Titel, die einen bestimmten Suchbegriff enthalten, bekommst du hin? Für die farbige Hervorhebung der Fundstellen musst du den song title zerlegen und für jeden SubString die Ausgabeweite ermitteln (DrawText() mit DT_CALC). In einer Schleife kannst du dann die einzelnen Text-Rechtecke hintereinander ausgeben. Freundliche Grüße marabu |
Re: alle Strings aus Edit.Text in der ListBox farbig darstel
Hallo Marabu das übertrifft erhlich gesagt meine Fähigkeiten :mrgreen: ich verzichte dann doch lieber auf die Farbigen Einträge :-D
aber trotzdem Danke für deine Hilfe :thumb: Gruß Holger |
Re: alle Strings aus Edit.Text in der ListBox farbig darstel
Moin Holger,
das klingt schwieriger als es ist. Schau Dir mal dieses Beispiel an (ListBox.Style auf lbOwnerDrawFixed): (Dazu brauchst Du nur ein Formular, mit einer ListBox, in der eine Zeile Text steht, die mit Leerzeichen getrennte Strings enthält)
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); var sValue : string; sOut : string; lb : TListBox; iLeft : integer; iTop : integer; begin // Auszugebenden Eintrag merken sValue := ListBox1.Items[Index]+' '; // Startpunkt für die Ausgabe merken iLeft := Rect.Left; iTop := Rect.Top; // Damit's übersichtlicher wird die Listbox in eine kleine Variable lb := (Control as TListBox); // Aktuelle Schriftfarbe auf Blau lb.Canvas.Font.Color := clBlue; // Alle mit Leerzeichen getrennten Teile unterschiedlich einfärben // (rot / blau im Wechsel while pos(' ',sValue) > 0 do begin // Auszugebenden Teil auslesen sOut := copy(sValue,1,pos(' ',sValue)); // Schriftfarbe setzen (aktuell rot? dann blau und umgekehrt) if lb.Canvas.Font.Color = clRed then begin lb.Canvas.Font.Color := clBlue; end else begin lb.Canvas.Font.Color := clRed; end; // Text ausgeben // (Dadurch wird auch gleich die Ausgabeposition neu gesetzt) lb.Canvas.TextOut(iLeft,iTop,sOut); // Auszugebenden ListBox eintrag um bereits ausgegebenen // Text verkürzen sValue := copy(sValue,pos(' ',sValue)+1,MaxInt); // Startposition für den nächst Abschnitt setzen iLeft := lb.Canvas.PenPos.X; end; end; |
Re: alle Strings aus Edit.Text in der ListBox farbig darstel
Das einzige was ich hinbekomme ist das jede ganze Zeile gefärbt wird aber nicht die Wörter die zb: im Edit stehn :mrgreen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin ListBox1.Style := lbOwnerDrawFixed; ListBox1.Items.Add('test1 test2 test3 test4 test5 test6'); end; procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin with (Control as TListbox) do begin if (Index mod 1 = 0) then begin Canvas.Brush.Color := clRed; end; DrawText(Canvas.Handle, Pchar(Items[Index]), Length(Items[Index]),Rect,DT_SINGLELINE or DT_VCENTER); // Text end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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 by Thomas Breitkreuz