Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ValueListEditor "Items" (durch-)suchen? (https://www.delphipraxis.net/116091-valuelisteditor-items-durch-suchen.html)

xShadowBoZz 23. Jun 2008 11:16


ValueListEditor "Items" (durch-)suchen?
 
ok hab da mal eine Frage zum ValueListEditor.
Habe hier und auch schon auf google gesucht, aber nicht wirklich was gefunden, was mir weiterhilft.

Also ich würde gern mithilfe eines Editfelds und einen Button den ValueListEditor nach Edit1.Text (Usereingabe) durchsuchen, also das der Benutzer den ValueListEditor nach egal was durchsuchen kann (also text).
nur weis ich nicht wie ich das machen soll, hatte davor mit einer ListBox gearbeitet und kann da auch suchen, aber hier ist das für mich etwas schwieriger, weil ich hier auch nicht ValueListEditor1.Items eingeben kann.
also wenn jemand weiß wie ich eine Suchfunktion einbauen kann dann bitte helfen ^^.

ok falls das hilft, hier meine ListBox suchfunktion. (kommentiert)

Delphi-Quellcode:
var i : Integer;
    searchUp : String;
...
//ListBox1
If Form2.ListBox1.Visible then begin // damit nur gesucht wird wenn sichtbar.
  If Edit2.Enabled then begin // Edit2 ist eine zusätzliche angabe (kann aktiviert werden und auch deaktiviert werden)
    Form2.listBox1.MultiSelect := True; //Multiselect, damit mehrere Items makiert werden können
    searchUp := AnsiUpperCase(Edit1.Text); //Edit1 = Nach was gesucht werden soll
    for i:=0 to StrToInt(Edit2.Text) do // Edit2 = Integer zb. 33 dann wird von zeile 0 nach 33 nach Edit1.Text gesucht.
      if Pos(searchUp, AnsiUpperCase(Form2.listBox1.Items[i])) > 0 then begin //wenn suchergebnis > 0 dann
      Form2.listBox1.Selected[i] := true; //Markieren, wenn gefunden
      application.ProcessMessages;
    end
    else
      Form2.listBox1.Selected[i] := false; //Damit nichts anderes markiert ist
    end;
  If not Edit2.Enabled then begin // Edit2 ist eine zusätzliche angabe (kann aktiviert werden und auch deaktiviert werden)
    Form2.listBox1.MultiSelect := True; //Multiselect, damit mehrere Items makiert werden können
    searchUp := AnsiUpperCase(Edit1.Text); //Edit1 = Nach was gesucht werden soll
    for i:=0 to Form2.listBox1.Items.Count-1 do //durchsuche alle Items von listbox.
      if Pos(searchUp, AnsiUpperCase(Form2.listBox1.Items[i])) > 0 then begin //wenn suchergebnis > 0 dann
      Form2.listBox1.Selected[i] := true; //Markieren, wenn gefunden
      application.ProcessMessages;
    end
    else
      Form2.listBox1.Selected[i] := false; //Damit nichts anderes markiert ist
    end;
  end;
thx im vorraus.

Ghostwalker 23. Jun 2008 14:02

Re: ValueListEditor "Items" (durch-)suchen?
 
Die Eigenschaft die du dafür brauchst heißt Strings :) Die kannst du analog so behandeln wie bei einer Listbox items :)

xShadowBoZz 23. Jun 2008 14:49

Re: ValueListEditor "Items" (durch-)suchen?
 
Zitat:

Zitat von Ghostwalker
Die Eigenschaft die du dafür brauchst heißt Strings :) Die kannst du analog so behandeln wie bei einer Listbox items :)

ok habs probiert und hab jetzt noch am ende ein problem.
also hier erstmal was ich bis jetzt draus gemacht hab.
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var search: String;
    i:Integer;
begin
  If ValueListEditor1.Visible then begin
    search:=AnsiUpperCase(Edit3.Text);
    for i:=0 to ValueListEditor1.Strings.Count-1 do
      if AnsiPos(search, AnsiUpperCase(ValueLIstEditor1.Keys[i])) > 0 then begin
        // hier problem
    end;
  end;
end;
habe das problem die ergebnisse "herauszusuchen".
Wenn ich am schluss Edit4.Text:=i; eingebe wird im editfeld angezeigt wieviele zeilen den gesuchten wert enthalten. bzw. (wenn es nur 1mal gibt) dann wird angezeigt in welcher zeile.

Aber ja ein bisschen logisch ich will nicht das es in einem editfeld angezeigt wird sondern, wäres es wirklich gut wenn die ergebnisse makiert werden oder noch besser das die ergebnisse im ValueListEditor1 angezeigt werden und der rest unsichtbar ist bzw. gelöscht wird oder so.

mein versuch war:

Delphi-Quellcode:
        ValueListEditor1.Strings.Strings[i]
das erzielte garkein ergebnis bzw. reaktion.

Delphi-Quellcode:
        ValueListEditor1.Strings.Destroy;
        ValueListEditor1.Strings.AddStrings(i);
nicht sicha obs funktionieren würde, allerdings kommt hier auch ein error:
Inkompatible Typen: 'TStrings' und 'Integer';

bin ich auf dem richtigen weg, oda muss ich was anders machen, damit ich nicht die anzahl sondern den "ganzen text" rausbekommen krieg?

xShadowBoZz 23. Jun 2008 14:52

Re: ValueListEditor "Items" (durch-)suchen?
 
sorry für doppelposting, pc hat gehangen.-_-

Ghostwalker 24. Jun 2008 10:15

Re: ValueListEditor "Items" (durch-)suchen?
 
Wenn alles andere aus dem VLE gelöscht werden kann, so geht das ganz einfach:

Zuerst merkst du dir die gefundene Zeile. Die Variable i sagt dir welche das ist :):

Delphi-Quellcode:
   Merker = ValuelistEditor1.strings.string[i];
Anschließend brauchen wir nur die liste zu löschen und den gemerkten Wert neu einfügen:

Delphi-Quellcode:
   ValuelistEditor1.strings.clear;
   ValuelistEditor1.string.append(merker);
und schon steht nur noch das gefundene Wertepaar im Editor :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 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