AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Sonderzeichen in TEdits (Charset?)

Ein Thema von uligerhardt · begonnen am 2. Nov 2010 · letzter Beitrag vom 3. Nov 2010
Antwort Antwort
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.233 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Sonderzeichen in TEdits (Charset?)

  Alt 2. Nov 2010, 20:28
Wenn du kein Win9x/ME benötigst nimm die letzte freie Version der TNTWare-Kompos (oder die neuen von TMS) und schmeiß die Codepage/Charset-Krücke weg.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Sonderzeichen in TEdits (Charset?)

  Alt 2. Nov 2010, 20:56
Wenn du kein Win9x/ME benötigst nimm die letzte freie Version der TNTWare-Kompos (oder die neuen von TMS) und schmeiß die Codepage/Charset-Krücke weg.
Da hätte ich mal ne Frage - hab leider kein Delphi hier, um's auszuprobieren: Der Benutzer kann dann in ein TNT-Edit das komplette Unicode-Spektrum eingeben, sagen wir auf einem russischen System auch griechische oder türkische (chinesische? arabische?) Zeichen, richtig? Was passiert dann, wenn ich die ohne irgendwelche Umcodierungen direkt als AnsiString (genauer gesagt als string[N]) speichere, also:
Delphi-Quellcode:
type
  TMyStoredRecord = record
    EinString: string[50];
  end;
var
  rec: TMyStoredRecord;
begin
  rec.EinString := TntEdit1.Text;
...
Das ist ja wohl verlustbehaftet. Kann mas das TNT-Edit irgendwie veranlassen, nur "passende" Eingaben zuzulassen? Und wenn wir schon dabei sind: Wie wäre das mit einem Unicode-VCL-TEdit?
Uli Gerhardt
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Sonderzeichen in TEdits (Charset?)

  Alt 2. Nov 2010, 20:58
Der Inhalt solcher Komponenten ist dann WideString.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Sonderzeichen in TEdits (Charset?)

  Alt 2. Nov 2010, 21:07
Der Benutzer kann dann in ein TNT-Edit das komplette Unicode-Spektrum eingeben, sagen wir auf einem russischen System auch griechische oder türkische (chinesische? arabische?) Zeichen, richtig?
Ja

Was passiert dann, wenn ich die ohne irgendwelche Umcodierungen direkt als AnsiString (genauer gesagt als string[N]) speichere,
Wenn du es nicht selber umkodierst, dann wird die CodePage des Systems zum Speichern verwendet.
Also auf einem russischen System wird nur der rusische Teil in ANSI gespeichert.
Ließt man nun diesen AnsiString in einem anderem System aus, so wird da ebenfalls die SystemCodePage verwendet und es wird falsch ausgelesen.

Also lieber WideString nutzen, oder
Delphi-Quellcode:
TMyStoredRecord = record
  EinString: array[1..50] of WideChar;
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 2. Nov 2010 um 21:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Sonderzeichen in TEdits (Charset?)

  Alt 2. Nov 2010, 22:03
Was passiert dann, wenn ich die ohne irgendwelche Umcodierungen direkt als AnsiString (genauer gesagt als string[N]) speichere,
Wenn du es nicht selber umkodierst, dann wird die CodePage des Systems zum Speichern verwendet.
Also auf einem russischen System wird nur der rusische Teil in ANSI gespeichert.
Ließt man nun diesen AnsiString in einem anderem System aus, so wird da ebenfalls die SystemCodePage verwendet und es wird falsch ausgelesen.
Das ist in unserer Anwendung ja bisher schon so, also erstmal keine Verschlechterung.
Also lieber WideString nutzen, oder
Delphi-Quellcode:
TMyStoredRecord = record
  EinString: array[1..50] of WideChar;
end;
Das geht eben nicht, ohne eine Unmenge von Code anzufassen. Das wollen wir momentan vermeiden. Für eine Prüfung, ob nicht in der Codepage vefügbare Zeichen eingegeben wurden, finde ich vermutlich eine zentrale Stelle, um den Benutzer dann zu warnen. (Wenn es keine in die Unicode-Edits eingebaute Möglichkeit gibt.)
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Sonderzeichen in TEdits (Charset?)

  Alt 3. Nov 2010, 07:35
Da D2007 Recordoperatoren bietet, könnte man für das WideChar-Array einen Ersatz stellen, welcher 100%ig wie ein WideString nutzbar ist und zugleich die Vorteile des ShortString/CharArray bietet.
http://www.delphipraxis.net/129846-c...l-einfach.html
Gut, bei gespeicherten Records müßte man die Dateien/Recorddaten erstmal konvertieren.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Sonderzeichen in TEdits (Charset?)

  Alt 3. Nov 2010, 08:27
Da D2007 Recordoperatoren bietet, könnte man für das WideChar-Array einen Ersatz stellen, welcher 100%ig wie ein WideString nutzbar ist und zugleich die Vorteile des ShortString/CharArray bietet.
http://www.delphipraxis.net/129846-c...l-einfach.html
Gut, bei gespeicherten Records müßte man die Dateien/Recorddaten erstmal konvertieren.
Hmm, in de Richtung habe ich schon mal mit der XE-Trial rumgespielt. Leider habe ich es nicht fertiggebracht, ein generisches Unicode-string[N]-Äquivalent zu bauen, da man ja die Größe nicht Compilezeit-konstant hinkriegt. Ich hätte ja gern FixedSizeUnicodeString<N: Integer> genommen, aber das geht schon mal gar nicht. Als Notbehelf dachte ich an FixedSizeUnicodeString<BaseT> , den ich z.B. als var s50: FixedSizeUnicodeString<string[50]> o.ä. instantiiert hätte, aber auch da ging nix. Habt ihr da schon mal eine funktionierende Lösung gesehen?
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Sonderzeichen in TEdits (Charset?)

  Alt 3. Nov 2010, 08:47
Nee, leider gibt es keine Möglichkeit, um bei den Generics Nummern zu übergeben.
Und wenn man den Speicher als String[x] oder array[0..x] of Char als Parameter übergibt, dann kann man nicht innerhalb des generischen Typs darauf zugreifen, um die nötigen Konvertierungen für die Operatoren zu implementieren.

Praktisch sind die Generics dafür komplett nutzlos.

Von der Sprache/Syntax her wäre es schon möglich den Generigs etwas von Makros mitzugeben oder eben, daß man nicht nur Typen, sondern auch Werte (Nummern oder Strings) als "Parameter" an den Generic übergibt ... aber ob Emba jemals sowas Cooles in die Generics einbaut? (wäre immerhin ein Pluspunkt gegenüber den anderen Programmiersprachen, welche Generics kennen)

Der Einzige Ausweg blieb halt nur noch ein "blödes" Template, über welches man sich zumindestens passende Typen basteln könnte.



Da die Generics nur einmal geparst und sofort auf Syntax und Typverträglichkeit geprüft werden, wo der ersetzende Typ noch nichtmal bekannt ist, kann man da innerhalb der Generics leider nicht viel machen.
Ein mehrschichtiger Parser würde mir in Delphi wirklich gefallen, welcher die Typkompatibilität erst nach dem Ersetzen der generischen Typen prüft.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Nov 2010 um 08:53 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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