AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Doppeldeutiger überladener Aufruf nach Unicode-Umstellung
Thema durchsuchen
Ansicht
Themen-Optionen

Doppeldeutiger überladener Aufruf nach Unicode-Umstellung

Ein Thema von messie · begonnen am 25. Aug 2009 · letzter Beitrag vom 25. Aug 2009
Antwort Antwort
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

Doppeldeutiger überladener Aufruf nach Unicode-Umstellung

  Alt 25. Aug 2009, 17:27
Moin,

ich habe mal wieder ein Problem mit dem Umstieg von Tnt-Unicode auf RAD2009.

Meine TTntComboBox ist jetzt so deklariert:

TTntComboBox = class(TComboBox); Nun bekomme ich beim Aufruf
Delphi-Quellcode:
const
  s = WideString('irgendwas');
if pos(s,ComboBox1.Items.Strings[0]) then
  begin
    //machwas
  end;
den beschriebenen Fehler vom Compiler.

Wenn ich Pos() durch AnsiPos() ersetze, tritt der Fehler nicht mehr auf. Das ist aber inhaltlich nicht richtig, da ich durchaus auch mal kyrillisch in der ComboBox stehen habe.
Ich peil' es nicht: durch die Umleitung auf TComboBox müsste doch Unicode in den Items enthalten sein. Oder ist darin anderes Unicode als in meiner Konstante s?

Grüße, Messie
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Doppeldeutiger überladener Aufruf nach Unicode-Umstellun

  Alt 25. Aug 2009, 17:50
Versuch mal eine typisierte Konstante: (ich armer D5 Anwender kann's nicht testen)
Delphi-Quellcode:
const
  s : WideString = 'irgendwas';
if pos(s,ComboBox1.Items.Strings[0]) <> 0 then
  begin
    //machwas
  end;
Dein Codeschnipsel hat übrigens einen Fehler in der If-Bedingung.
Andreas
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Doppeldeutiger überladener Aufruf nach Unicode-Umstellun

  Alt 25. Aug 2009, 18:03
Dabei musst du aber beachten, dass AnsiPos() eine Unicode-Funktion und kein Ansi-Funktion ist, auch wenn der namen etwas anderes suggeriert.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.347 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Doppeldeutiger überladener Aufruf nach Unicode-Umstellun

  Alt 25. Aug 2009, 18:06
Der Unterschied ist, dass die TntControls und deine Variable WideStrings nutzen bzw. sind. Diese sind vom System bereitgestellte Unicodezeichenketten.

Delphi 2009 wiederum benutzt UnicodeString, welches eine delphiinterne Zeichenkette wie auch AnsiStrings sind (inkl. Referenzzähler usw.).

Deshalb muss ein WideString implizit konvertiert werden und da gibt es vermutlich verschiedene Varianten von Pos, die da in Frage kommen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Doppeldeutiger überladener Aufruf nach Unicode-Umstellun

  Alt 25. Aug 2009, 18:20
Zitat von jaenicke:
Der Unterschied ist, dass die TntControls (...) WideStrings nutzen bzw. sind.
Nee, die eben jetzt nicht mehr, wohl aber meine Konstante. Das hat mich ja so verwirrt. Durch die Versionsdirektive wird ja das TntControl auf ein Delphi-Control zurückgeleitet. Somit sind in dem Control auch Delphi-Strings drin. Die sind zwar jetzt Unicode aber nicht WideString. Ich habe mal den Cast für WideString('irgendwas') weggelassen, geht dann auch.
Wenn die Beschreibung von mkinzler zutrifft, wird die Funktion AnsiPos für mich die richtige sein. Ich werde die Varianten mal testen.

Die Haptik des Unicode-Handlings in 2009 finde ich aber ehrlich gesagt katastrophal.

Grüße, Messie
  Mit Zitat antworten Zitat
Antwort Antwort


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:02 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