Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Erläuterung was "native unicode string" ist? (https://www.delphipraxis.net/161517-erlaeuterung-native-unicode-string-ist.html)

RWarnecke 9. Jul 2011 08:50

AW: Erläuterung was "native unicode string" ist?
 
Zitat:

Zitat von torud (Beitrag 1110898)
Nur, um kurz mal sicher zu gehen.

Du meinst, ich soll mir die 2 übermittelten Werte jeweils in einer WideString-Variablen zwischenspeichern und dann der TLB-Funktion übergeben?

Wäre dabei was anders?
Oder soll ich mir das dann loggen?
Was ist der Hintergrund Deines Vorschlags?

Wenn ich Sebastian richtig verstanden habe, will er damit erreichen, wie Dein übergebener Wert im Widestring aussieht. Du setzt an der Stelle wieder einen Haltepunkt und dann schaust Du Dir die temporären Werte an, ob Sie gleich sind mit der Quelle oder nicht.

jaenicke 9. Jul 2011 11:11

AW: Erläuterung was "native unicode string" ist?
 
Nicht nur deshalb. Dadurch wird sichergestellt, dass ein neuer WideString als direkte WideString Variable an den OleVariant Wert übergeben wird.

Eigentlich sollte das keinen Unterschied machen. Aber man weiß ja nie...

torud 11. Jul 2011 10:05

AW: Erläuterung was "native unicode string" ist?
 
Zitat:

Zitat von FredlFesl (Beitrag 1110899)
So nebenbei würde ich auch 'ValueFromIndex' verwenden. Tut zwar nix zur Sache, ist aber schneller und übersichtlicher.
Delphi-Quellcode:
for i := 0 to TextString.Count - 1 do
   loc_AkiTitle.set_(TextString.Names[i],'Text',TextString.ValueFromIndex[i]);

TextString.ValueFromIndex[i] gibt es nicht in einer TWideStringlist;
aber trotzdem danke für den Optimierungsversuch.

torud 11. Jul 2011 10:37

AW: Erläuterung was "native unicode string" ist?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von jaenicke (Beitrag 1110905)
Nicht nur deshalb. Dadurch wird sichergestellt, dass ein neuer WideString als direkte WideString Variable an den OleVariant Wert übergeben wird.

Eigentlich sollte das keinen Unterschied machen. Aber man weiß ja nie...

Also ich habe testhalber mal den Code so angepasst:

Delphi-Quellcode:
var
  i : integer;
  sName, sValue : WideString;
begin
...
      for i := 0 to TextString.Count - 1 do begin
        sName := TextString.Names[i];
        sValue := TextString.Values[TextString.Names[i]];
        //loc_AkiTitle.set_(TextString.Names[i],'Text',TextString.Values[TextString.Names[i]]);
        loc_AkiTitle.set_(sName,'Text',sValue);
      end;
Habe mir einen Haltpunkt gesetzt und bin mit der Maus über die Variablen gefahren. Scheinbar sind die Hints NICHT UniCode, da ich viele ? zu sehen bekam.

Damit Ihr mal seht, wie sich das Problem visuell darstellt, hier mal ein Bildanhang. Links seht Ihr ein TTnTMemo, welches ja UniCode kann.
Komisch ist hier schon in der Ansicht, dass in Zeile
4 statt subline der Code etwas komisch aussieht. Die 1. wird rechts im Preview auch nicht angezeigt
5 bei Cracovia das hier steht -> Cracoⅵa und in der Anzeige nur Cracoa

Bin kurz vorm verzeifeln.

torud 11. Jul 2011 10:56

AW: Erläuterung was "native unicode string" ist?
 
Ich habe nun mal die WideStringList gespeichert.
Sieht leider nicht gut aus. Das Problem ist also definitiv auf meiner Seite:


header=EKSTRAKLASA
subl㏌e=⒈ kolejka
team_a=Cracoⅵa Kraków
team_b=Legia Warszawa

Das sieht nicht wirklich nach UniCode aus. Muss ich vielleicht bei den TNT-Controls irgendwas am Charset einstellen oder der WideStringlist noch eine spezielle Eigenschaft verpassen?

jaenicke 11. Jul 2011 12:15

AW: Erläuterung was "native unicode string" ist?
 
Zitat:

Zitat von torud (Beitrag 1111109)
Muss ich vielleicht bei den TNT-Controls irgendwas am Charset einstellen oder der WideStringlist noch eine spezielle Eigenschaft verpassen?

Dabei kann ich dir leider nicht helfen, da ich Unicode nur in aktuellen Delphiversionen ohne Verrenkungen benutze. Damals in Delphi 7 habe ich nur AnsiStrings benutzt.

Das Problem ist wie du bemerkt hast natürlich, dass die Delphi IDE durch die fehlende Unicodeunterstützung auch keine Unicodestrings beim Debuggen auswerten kann...
Was du versuchen kannst um definitiv festzustellen, ob die Strings falsch sind, ist, dass du diese einfach einmal ausgibst:
Delphi-Quellcode:
MessageBoxW(0, PWideChar(sName), 'Test: sName', 0);
MessageBoxW(0, PWideChar(sValue), 'Test: sValue', 0);
Das sollte auch mit Delphi 7 problemlos funktionieren.

torud 11. Jul 2011 12:28

AW: Erläuterung was "native unicode string" ist?
 
Sorry, wenn ich mich dämlich anstelle, aber mein Delphi kennt kein MessageBoxW.

jaenicke 11. Jul 2011 12:32

AW: Erläuterung was "native unicode string" ist?
 
Dann fehlt die Unit Windows in der uses Klausel.

torud 11. Jul 2011 12:46

AW: Erläuterung was "native unicode string" ist?
 
Jo, jetzt kommen die MessageBoxen.

---------------------------
Test: sValue
---------------------------
Cracoⅵa Kraków
---------------------------
OK
---------------------------

ist der Inhalt. Hier ist auch wieder das vi im Teamnamen so "komisch".

Und so "baue" ich den Code zusammen:

Delphi-Quellcode:
procedure Tmatchid.btn_showClick(Sender: TObject);
begin
  //hinzufügen der strings
  TextString.Add('header=' + ed_header.Text);
  TextString.Add('subline=' + ed_subline.Text);
  TextString.Add('team_a=' + ed_team_a.Text);
  TextString.Add('team_b=' + ed_team_b.Text);
  TextString.Add('footer_1=' + ed_footer_1.Text);
  TextString.Add('footer_2=' + ed_footer_2.Text);
  TextString.Add('footer_3=' + ed_footer_3.Text);
  //schicken der inhalte zum laden der grafik
  form1.TS_AKI_ProviderUC1.ShowGraphic('match_id.gse',1,TextString,LogoString,PropList,0,'IN',True);
end;
Die Messagbox kommt aus einer UnterRoutine von TS_AKI_ProviderUC1.ShowGraphic.
Dort ist alles auf WideString und TWideStringlist eingestellt.

jaenicke 11. Jul 2011 13:07

AW: Erläuterung was "native unicode string" ist?
 
Funktioniert es denn, wenn du den Inhalt der Editfelder direkt per MessageBoxW ausgibst?
(Gibt es vielleicht noch eine andere Eigenschaft als Text? Also ist Text wirklich WideString?)

Lass doch den Unsinn mit der TWideStringList weg. Wenn du mehrere Werte nicht einzeln übergeben willst, nimm einen Record. Aber das ganze zu einer Liste verwursten und dann wieder auseinanderzubasteln ist Blödsinn...


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 Uhr.
Seite 2 von 3     12 3      

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