![]() |
Probleme mit TStrings.IndexOfName unter Vista
Folgender Sachverhalt:
ich habe eine Liste mit einer Reihe von Name= Wert Paaren: blabla=1 dd=2 .... huebn=32 ... hübn=8763 ... usw=hjsd Wenn ich unter Windows XP und früher liste.indexOfName('hübn') aufrufe, erhalte ich wie erwartet den Index dieses Namens. Mache ich das ganze unter Vista, bekommen ich den Index von 'huebn' :shock: Folgender Code zeigt die betreffenden Quellen von Delphi 6
Delphi-Quellcode:
Ich schätze mal CompareString mit LOCALE_USER_DEFAULT ist der Übeltäter.
function TStrings.CompareStrings(const S1, S2: string): Integer;
begin Result := AnsiCompareText(S1, S2); end; function AnsiCompareText(const S1, S2: string): Integer; begin {$IFDEF MSWINDOWS} Result := CompareString(LOCALE_USER_DEFAULT, NORM_IGNORECASE, PChar(S1), Length(S1), PChar(S2), Length(S2)) - 2; {$ENDIF} {$IFDEF LINUX} Result := WideCompareText(S1, S2); {$ENDIF} end; Hat jemand so ein Verhalten schon einmal beobachtet? Was kann ich da machen? Sie der betreffende Quelltext von Delphi in späteren Versionen evtl. anders aus? MSDN hat mich auch noch nicht weiter gebracht. |
Re: Probleme mit TStrings.IndexOfName unter Vista
uih, gut zu wissen, habs auch gleich mal getestet ... das kann ja wirklich böse folgen haben sowas ...
hab gerade mal in VCL von D2006 geguckt, die sieht ganz gleich aus [edit] wharscheinlich haben die das feature eingebaut, damit man deutsche wörter besser sortieren kann, dann macht es sinn, das ae und ä gleichwertig sind ... |
Re: Probleme mit TStrings.IndexOfName unter Vista
Hm, schön für die Sortierung und dieses neue "Feature". Nur leider entgegen der bisherigen Funktionsweise.
Ich werd morgen mal die verschiedenen Parameter für CompareString prüfen. Vielleicht betrifft es ja nur AnsiSameText und mit AnsiSameStr funktioniert es. Würde heissen, TString geht so dann nicht mehr, TStringList müsste dann auf CaseSensitive = true gesetzt werden. Mal gucken. |
Re: Probleme mit TStrings.IndexOfName unter Vista
Push :duck:
Ich weiß, dass das erst nach 24 Stunden erlaubt ist, aber bei der Brisanz des Themas musste ich mal. Das rumprobieren mit den verschiedenen Flags von ![]() Folgendes unter Vista sollte eigentlich keine MessageBox bringen, bringt es aber
Delphi-Quellcode:
Selbst wenn es ein Problem der Funktionsparameter ist, wäre das ja echt grass. Dann müsste ich ja die Delphi-Quellen anpassen. :shock:
if (CompareStringW(LOCALE_USER_DEFAULT, 0, 'HÜBNER', Length('HÜBNER'),
'HUEBNER', Length('HUEBNER')) - 2) = 0 then ShowMessage('Fehler'); Hat jemand eine Idee, was man da tun sollte? |
Re: Probleme mit TStrings.IndexOfName unter Vista
Wie sehen die Ländereinstellungen unter XP und Vista aus?
|
Re: Probleme mit TStrings.IndexOfName unter Vista
Auf den ersten Blick gleich.
|
Re: Probleme mit TStrings.IndexOfName unter Vista
Habs zwar noch nicht ganz verstanden was die im
![]() |
Re: Probleme mit TStrings.IndexOfName unter Vista
Falls jemand das Plattform-SDK hat, könnte der mal die Werte von
Zitat:
|
Re: Probleme mit TStrings.IndexOfName unter Vista
#define NORM_IGNORECASE 0x00000001 // ignore case
#define NORM_IGNORENONSPACE 0x00000002 // ignore nonspacing chars #define NORM_IGNORESYMBOLS 0x00000004 // ignore symbols #define LINGUISTIC_IGNORECASE 0x00000010 // linguistically appropriate 'ignore case' #define LINGUISTIC_IGNOREDIACRITIC 0x00000020 // linguistically appropriate 'ignore nonspace' #define NORM_IGNOREKANATYPE 0x00010000 // ignore kanatype #define NORM_IGNOREWIDTH 0x00020000 // ignore width #define NORM_LINGUISTIC_CASING 0x08000000 // use linguistic rules for casing //Edit die neuem Parameter als Flag bringen keine Besserung des Ergebnisses. |
Re: Probleme mit TStrings.IndexOfName unter Vista
Also aus meiner Sicht gäbe es nur folgende Lösungen.
1. Kein Vista benutzen bzw. die Einstellung finden, die den Mist verzapft 2. Einen API-Hook für CompareString,CompareStringA,CompareStringW schreiben und auf StrICompW, StrCompW umbiegen, die es in vielen Unicode-Bibliotheken gibt (JCL, Unicode.pas von Mike Lischke) Ansi-Variante bietet Delphi mit SameText und SameStr Wäre 2. sinnvoll? Ist das unter Vista mit Benutzerrechten möglich? Vielleicht langt es ja schon, wie bei TNTs InstallTntSystemUpdates die Delphi-Functionen zu patchen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 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