Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TCHeckListBox:Sort sortiert anders als ich (https://www.delphipraxis.net/211775-tchecklistbox-sort-sortiert-anders-als-ich.html)

TurboMagic 1. Nov 2022 14:14

TCHeckListBox:Sort sortiert anders als ich
 
Hallo,

gegeben ist folgendes:

D11.2, VCL Anwendung mit eienr TCheckListBox.
Außerdem eine generische TObjectList, deren Einträge u.a. ein Dateinamensfeld (string) haben.
Die in dieser Liste gespeicherten Einträge werden über eine Methode der CheckListBox.Items
Eigenschaft zugewiesen (diese wird vorher geleert).

Außerdem wurde für die generische Liste eine Sortierung anhand des Dateinamens umgesetzt.
Zum Vergleich der Strings wird CompareStr genutzt. Vermutlich liegt da auch der Hund begraben.

In den Pfad/Dateinamen gibt's u.a. solche:
[..]\Source\AddSomething.pas
[..]\Source\fWizard.pas
[..]\Source\__recovery\AddSomething.pas

Das Sort der TObjectList sortiert die jetzt so:
[..]\Source\AddSomething.pas
[..]\Source\__recovery\AddSomething.pas
[..]\Source\fWizard.pas

weil im ASCII Zeichensatz _ zwischen den großen und kleinen Buchstaben kommt.

Wenn CheckListBox.Sorted true ist, wird dort drin aber so sortiert:
[..]\Source\__recovery\AddSomething.pas
[..]\Source\AddSomething.pas
[..]\Source\fWizard.pas

Wie bekomme ich die selbe Sortierung auch in der TObjectList hin ohne
im Comparer immer .ToUpper oder .ToLower aufrufen zu müssen?

Und: was ist der Unterschied zwischen CompareStr und CompareText?
Auf den ersten Blick auf die Hilfethemen beider sah' ich noch keinen...

DeddyH 1. Nov 2022 14:38

AW: TCHeckListBox:Sort sortiert anders als ich
 
Aus System.SysUtils:
Delphi-Quellcode:
{ CompareText compares S1 to S2, without case-sensitivity. The return value
  is the same as for CompareStr. The compare operation is based on the 8-bit
  ordinal value of each character, after converting 'a'..'z' to 'A'..'Z',
  and is not affected by the current user locale. }
"without case-sensitivity", hier ist die Doku also wohl schlicht falsch. Du kannst ja gerne einen QC-Eintrag machen.

himitsu 1. Nov 2022 14:47

AW: TCHeckListBox:Sort sortiert anders als ich
 
Wie immer
SameStr SameText
CompareStr CompareText
AnsiSameStr AnsiSameText
AnsiCompareStr AnsiCompareText
...


bei Einigen wird ohne "Ansi" es als ASCII (7 Bit) im Pascal verglichen
oder wenn Mit eben mit ANSI/Unicode-Codepage

Str = case-sensitiv
Text = case-insensitiv

TurboMagic 1. Nov 2022 14:49

AW: TCHeckListBox:Sort sortiert anders als ich
 
Ah! Lesen sollte man können. Die Doku ist schon richtig. Bei CompareStr mit Berücksichtigung, bei CompareText ohne.

TurboMagic 1. Nov 2022 14:53

AW: TCHeckListBox:Sort sortiert anders als ich
 
Danke! Habe eben schon CompareText ausprobiert und das tut, was ich will.


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