AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit TStrings.IndexOfName unter Vista

Offene Frage von "sh17"
Ein Thema von sh17 · begonnen am 31. Mär 2007 · letzter Beitrag vom 28. Dez 2007
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.643 Beiträge
 
Delphi 11 Alexandria
 
#1

Probleme mit TStrings.IndexOfName unter Vista

  Alt 31. Mär 2007, 13:15
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'



Folgender Code zeigt die betreffenden Quellen von Delphi 6

Delphi-Quellcode:
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;
Ich schätze mal CompareString mit LOCALE_USER_DEFAULT ist der Übeltäter.

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.
Sven Harazim
--
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Probleme mit TStrings.IndexOfName unter Vista

  Alt 31. Mär 2007, 14:13
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 ...
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.643 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Probleme mit TStrings.IndexOfName unter Vista

  Alt 1. Apr 2007, 20:39
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.
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.643 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Probleme mit TStrings.IndexOfName unter Vista

  Alt 2. Apr 2007, 13:54
Push

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 CompareString bringt gar nichts.

Folgendes unter Vista sollte eigentlich keine MessageBox bringen, bringt es aber

Delphi-Quellcode:
  if (CompareStringW(LOCALE_USER_DEFAULT, 0, 'HÜBNER', Length('HÜBNER'),
    'HUEBNER', Length('HUEBNER')) - 2) = 0 then
    ShowMessage('Fehler');
Selbst wenn es ein Problem der Funktionsparameter ist, wäre das ja echt grass. Dann müsste ich ja die Delphi-Quellen anpassen.

Hat jemand eine Idee, was man da tun sollte?
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Probleme mit TStrings.IndexOfName unter Vista

  Alt 2. Apr 2007, 13:56
Wie sehen die Ländereinstellungen unter XP und Vista aus?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.643 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Probleme mit TStrings.IndexOfName unter Vista

  Alt 2. Apr 2007, 13:57
Auf den ersten Blick gleich.
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
17.198 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Probleme mit TStrings.IndexOfName unter Vista

  Alt 2. Apr 2007, 14:57
Habs zwar noch nicht ganz verstanden was die im MSDN schreiben, aber dort stehen einige Hinweise auf Vista.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
17.198 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Probleme mit TStrings.IndexOfName unter Vista

  Alt 2. Apr 2007, 15:07
Falls jemand das Plattform-SDK hat, könnte der mal die Werte von

Zitat:
LINGUISTIC_IGNORECASE
LINGUISTIC_IGNOREDIACRITIC
NORM_IGNORECASE
NORM_IGNOREKANATYPE
NORM_IGNORENONSPACE
NORM_IGNORESYMBOLS
NORM_IGNOREWIDTH
NORM_LINGUISTIC_CASING
SORT_STRINGSORT
nachschauen
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.643 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Probleme mit TStrings.IndexOfName unter Vista

  Alt 2. Apr 2007, 15:18
#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.
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.643 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Probleme mit TStrings.IndexOfName unter Vista

  Alt 2. Apr 2007, 15:46
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.
Sven Harazim
--
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:23 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