AGB  ·  Datenschutz  ·  Impressum  







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

D2010 Char-AnsiChar Problem

Ein Thema von Thorben86 · begonnen am 16. Mär 2010 · letzter Beitrag vom 17. Mär 2010
Antwort Antwort
Thorben86

Registriert seit: 20. Nov 2003
Ort: Brühl
365 Beiträge
 
Delphi 2005 Personal
 
#1

D2010 Char-AnsiChar Problem

  Alt 16. Mär 2010, 21:20
Hi, habe hier ein kleines Problem mit einer JEDI-Unit (JvVCLUtils) und der neuen Typendeklaration von 2009/2010.

Delphi-Quellcode:
function AnsiUpperFirstChar(const S: string): string;
var
  Temp: string[1];
begin
  Result := AnsiLowerCase(S);
  if S <> 'then
  begin
    Temp := Result[1];
    Temp := AnsiUpperCase(Temp);
    Result[1] := Temp[1]; <--- Fehler
  end;
end;
Fehlermeldung: [DCC Fehler] JvVCLUtils.pas(2256): E2010 Inkompatible Typen: 'Char' und 'AnsiChar'
Ich weis jetzt allerdings nicht, wie ich hier das ganze richtig deklarieren muss.
Dabei ist es eigentlich die aktuelle Version, die schon kompatibel sein sollte.

Hoffe mir kann wer nen Tipp geben.

Gruß
Thorben
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: D2010 Char-AnsiChar Problem

  Alt 16. Mär 2010, 21:52
Mach aus string AnsiString
Oder besser besorge dir eine neue Version der Unit
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: D2010 Char-AnsiChar Problem

  Alt 16. Mär 2010, 22:47
Einfach etwas umbauen (ungetestet):
Delphi-Quellcode:
function AnsiUpperFirstChar(const S: string): string;
begin
  if S <> 'then
    result = AnsiUpperCase(Copy(S, 1, 1)) + AnsiLowerCase(Copy(S, 2, Length(S)));
  else
    result = '';
end;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: D2010 Char-AnsiChar Problem

  Alt 17. Mär 2010, 09:03
Die unit ist schon seit geraumer Zeit nicht mehr Teil der JCL (bzw liegt im Achive Verzeichnis).
Ich würde mal die ganze Library auf aktuellen Stand bringen sofern möglich.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: D2010 Char-AnsiChar Problem

  Alt 17. Mär 2010, 10:52
Delphi-Quellcode:
function AnsiUpperFirstChar(const S: string): string;
var
  Temp: string; // <<<<<
begin
  Result := AnsiLowerCase(S);
  if S <> 'then
  begin
    Temp := Result[1];
    Temp := AnsiUpperCase(Temp);
    Result[1] := Temp[1];
  end;
end;
String[x] ist und bleibt, auch weiterhin unter D2009/D2010, ein ShortString und ein ShortString ist quasi die "alte" Version eines AnsiString, mit fester Speicherlänge.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

Re: D2010 Char-AnsiChar Problem

  Alt 17. Mär 2010, 11:44
Zitat von himitsu:
Delphi-Quellcode:
function AnsiUpperFirstChar(const S: string): string;
var
  Temp: string; // <<<<<
begin
  Result := AnsiLowerCase(S);
  if S <> 'then
  begin
    Temp := Result[1];
    Temp := AnsiUpperCase(Temp);
    Result[1] := Temp[1];
  end;
end;
String[x] ist und bleibt, auch weiterhin unter D2009/D2010, ein ShortString und ein ShortString ist quasi die "alte" Version eines AnsiString, mit fester Speicherlänge.
Auch damit wirst du keine Freude haben, wenn mal Umlaute oder anderssprachige Zeichen am Wortanfang stehen. Besser wäre:
Delphi-Quellcode:
uses
  Character;

function UpperFirstChar(const s: string): string;
var
  Temp: Char;
begin
  Result := ToLower(s);
  if S <> 'then
  begin
    Temp := Result[1];
    Temp := ToUpper(Temp);
    Result[1] := Temp;
  end;
end;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: D2010 Char-AnsiChar Problem

  Alt 17. Mär 2010, 11:54
Solange du nicht gerade die AnsiStrings-Unit (oder wie die heißt) eingebunden ist, dann ist AnsiLowerCase eigentlich eine WideString-Version und sollte keine Probleme mit Umlauten oder sonstwas bekommen.

Das ist "leider" eine der schwachsinnigen/unverständlichen versuche seitens Emba, um Codeumstellungen auf Unicode zu erleichtern.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

Re: D2010 Char-AnsiChar Problem

  Alt 17. Mär 2010, 12:24
Zitat von himitsu:
Solange du nicht gerade die AnsiStrings-Unit (oder wie die heißt) eingebunden ist, dann ist AnsiLowerCase eigentlich eine WideString-Version und sollte keine Probleme mit Umlauten oder sonstwas bekommen.
Bei Umlauten hast du wahrscheinlich recht, aber bei anderen Sprachen ist das nicht unbedingt richtig.
AnsiLowerCase und AnsiUpperCase benutzen die API Funktionen CharLowerBuff und CharUpperBuff. Die Methoden aus der Characters Unit benutzen LCMapString.
Zitat von msdn:
Remarks

Note that CharLowerBuff always maps uppercase I to lowercase I ("i"), even when the current language is Turkish or Azeri. If you need a function that is linguistically sensitive in this respect, call LCMapString.
Gut, wahrscheinlich brauchst du das nicht in deiner Anwendung - ich wollte nur mal darauf hinweisen.
Außerdem ist die Verwendung einer Funktion die AnsiWhatever heißt, aber eigentlich Unicode ist imho einfach nur
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

Re: D2010 Char-AnsiChar Problem

  Alt 17. Mär 2010, 13:50
LCMapString ... achso, na dann isses was Anderes

Zitat von Stevie:
Außerdem ist die Verwendung einer Funktion die AnsiWhatever heißt, aber eigentlich Unicode ist imho einfach nur
Joar, für neue Programme ist das vollkommen schwachsinnig ... neue Programme würde ich da eher mit WideIrgendwas schreiben, aber es gibt ja (standardmäßig) nur AnsiIrgendwas.

Und bei der Umstellung eines Programmes einfach mal alle Ansi durch Weide zu ersetzen wäre nun wirklich kein sooooooo großer Aufwand gewesen, alsdas Emba hier wirklich hätte unbedingt sowas berbrocken hätte müssen, dazumal der Compiler eh an entsprechenden Stellen 'ne Warnung ausgegeben würde.

PS: Nett ist es ja, wenn man dann wirklich mal die AnsiVersion für einen AnsiString benötigt ... denn leider wurden diese Funktionen nicht als Ansi/Wide überladen.
$2B or not $2B
  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 13:58 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