![]() |
Strings vergleichen
Hi,
ich vergleiche momentan Strings im VST so
Delphi-Quellcode:
Funktioniert auch super, nur möchte ich das wenn
Procedure TFormMain.SucheCallback(Sender: TBaseVirtualTree; Node: PVirtualNode; data: Pointer; var Abort: Boolean);
Begin Customer:= TCustomerDaten(VstCustomer.GetNodeData(Node)^); VstCustomer.IsVisible[Node]:= (EditSearchFast.Text = '') or AnsiStartsText(EditSearchFast.Text, Customer.company_name)>0); End; suchende String: Test EditSuchfeld: st Dann trotzdem der Eintrag gefunden wird und nicht nur wenn ich te eingebe. |
Re: Strings vergleichen
Hallo,
ich denke anstelle von AnsiStartsText kannst du ![]() Grüße, Matze |
Re: Strings vergleichen
Oder AnsiContainsText :zwinker:
|
Re: Strings vergleichen
AnsiContainsText dann findet er gar nicht's mehr :/
Und bei pos ist es so, das es auf Groß und Kleinschreibung achtet oder irre ich mich? |
Re: Strings vergleichen
Da scheinst Du etwas falsch zu machen. Parameter verwechselt?
|
Re: Strings vergleichen
Keine Treffer bei
Delphi-Quellcode:
Mit
Procedure TFormMain.SucheCallback(Sender: TBaseVirtualTree; Node: PVirtualNode; data: Pointer; var Abort: Boolean);
Begin Customer:= TCustomerDaten(VstCustomer.GetNodeData(Node)^); VstCustomer.IsVisible[Node]:= (EditSearchFast.Text = '') or AnsiContainsText(EditSearchFast.Text, Customer.company_name); End;
Delphi-Quellcode:
findet er es ja wenn ich den Anfangsbuchstaben eingebe, daher sollten Parameter stimmen.
Procedure TFormMain.SucheCallback(Sender: TBaseVirtualTree; Node: PVirtualNode; data: Pointer; var Abort: Boolean);
Begin Customer:= TCustomerDaten(VstCustomer.GetNodeData(Node)^); VstCustomer.IsVisible[Node]:= (EditSearchFast.Text = '') or AnsiStartsText(EditSearchFast.Text, Customer.company_name)>0); End; Und so wird es aufgerufen
Delphi-Quellcode:
procedure TFormMain.EditSearchFastChange(Sender: TObject);
begin VstCustomer.IterateSubtree(nil, SucheCallback, nil) end; |
Re: Strings vergleichen
Beide Funktionen müssen gehen. Und Pos achtet nicht auf Groß- und Kleinschreibung. Und selbst wenn das so wäre, könnte man sich mittels LowerString/UpperString (oder wie die Funktionen in Delphi heißen, vllt war's auch StrToUpper/StrToLower, wobei das glaub PHP war *g*) aushelfen.
|
Re: Strings vergleichen
Zitat:
|
Re: Strings vergleichen
Zitat:
|
Re: Strings vergleichen
Das war Ernst, nach meiner Erfahrung ist Pos() case-sensitive.
|
Re: Strings vergleichen
Habe es nun so gelöst.
Delphi-Quellcode:
(pos(AnsiUpperCase(EditSearchFast.Text), AnsiUpperCase(Customer.company_name))>0)
|
Re: Strings vergleichen
Etwas Anderes tut AnsiContainsText aber auch nicht (zumindest im Ergebnis). Aber wenn es nun geht, ist ja alles gut :zwinker:
|
Re: Strings vergleichen
Zitat:
|
Re: Strings vergleichen
Zitat:
Aber mit dem Workaround würde es gehen, auch wenn das vom Code her vielleicht nicht ganz so schön ist. |
Re: Strings vergleichen
Ich nutze auch vor der Verwendung von Pos() ein UpperCase() bzw. LowerCase:
Delphi-Quellcode:
Und sollte man nicht auf die Verwendung der ANSI Funktionen hinsichtlich Delphi 2009 und Unicode Strings verzichten?
Column := TVirtualStringTree(Sender).Header.Columns.GetFirstVisibleColumn();
while (Column <> InvalidColumn) do begin NodeText := UpperCase(TVirtualStringTree(Sender).Text[Node, Column]); bFoundText := (Pos(SearchString, NodeText) > 0); if bFoundText then Break; Column := TVirtualStringTree(Sender).Header.Columns.GetNextVisibleColumn(column); end; Sender.IsVisible[Node] := bFoundText; |
Re: Strings vergleichen
Ich hab zwar kein D2009, aber dort heißen die Funktionen m.W.n. zwar noch so, aber sind unicodefähig. Falls das nicht stimmen sollte, bitte ich einen Kundigen um Berichtigung.
|
Re: Strings vergleichen
AnsiUpperCase ist in Delphi2009 nicht Ansi, sondern Unicode.
also kein Problen, aber dafür nur etwas verwirrend :angel2: man kann auch WideUpperCase verwenden, aber dieses arbeitet mit WideString, wärend AnsiUpperCase in D2009 aus UnicodeString basiert. |
Re: Strings vergleichen
Kleiner Nachtrag:
AnsiStrings.AnsiUpperCase --> AnsiUpperCase wandelt alle Zeichen im gegebenen AnsiString in Großbuchstaben um. Im Gegensatz zu UpperCase wird bei der Umwandlung die aktuelle Gebietseinstellung des Benutzers verwendet. SysUtils.AnsiUpperCase --> AnsiUpperCase gibt eine Kopie des in S angegebenen Strings in einem groß geschriebenen String zurück. Bei der Konvertierung wird das aktuelle Gebietsschema berücksichtigt. Diese Funktion unterstützt Multibyte-Zeichensätze (MBCS). |
Re: Strings vergleichen
Da ist aber wieder "Ansi" im Namen :lol: (Spaß muss sein *g*)
|
Re: Strings vergleichen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 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