Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Auf XE3 programmiert, auf 5 solls laufen. (https://www.delphipraxis.net/172491-auf-xe3-programmiert-auf-5-solls-laufen.html)

Bernhard Geyer 7. Jan 2013 11:19

AW: Auf XE3 programmiert, auf 5 solls laufen.
 
Zitat:

Zitat von greenmile (Beitrag 1198084)
Zitat:

Zitat von Getox (Beitrag 1198083)
Ja ich wurde auch schon drauf hingewiesen, dass ich einige fehlerhafte Properties in meinem Stringgrid habe...

Normalerweise löscht man die dann aus der DFM und gut is'.

Und vergisst das bei jeder 5ten Lieferung. Ein Quell von Fehlermeldungen die man übersieht.
Solche Händischen Aktionen welche nicht durch einfache Compilierungen offensichtlich werden wird man sehr oft übersehen bzw. verursachen letztendlich realtiv viel Zeitaufwand.

p80286 7. Jan 2013 12:10

AW: Auf XE3 programmiert, auf 5 solls laufen.
 
Zitat:

Zitat von Getox (Beitrag 1198077)
OK... hab jetzt alles Weggelöscht.. also "VCL." und so weiter... und dann DAS:

[Fatal Error] SQLiteTable3.pas(1): Line too long (more than 1023 characters)

:cry: Der Tag fängt wundervoll an... Ja das ist eine Datei aud dem SQLite Wrapper.

Wenn es sich um eine Const handelt könntest Du damit erfolgreicher sein:
Delphi-Quellcode:
const
cMyText='bla bla max 255?'+
        'bla bla max 255?'+
        'bla bla max 255?'
Gruß
K-H

Getox 7. Jan 2013 12:19

Ich habe jetzt mit Hilfe den Wrapper so hinbekommen, dass die Zeilen nicht mehr zu lang sind.

Das hatte mit dem Format der Quelldatei zu tun... Da gibt es ja irgendwie #13 und #10. Linux benutzt nur eins, Mac das andere und Windows beide um Absätze zu machen (wenn ich es richtig verstanden habe).

Das habe ich im Notepad++ geändert bekommen (Bearbeiten -> Format Teilenende -> Konvertiere zu Windows(CR + LF)).

Nun habe ich auch noch Unterstützung bekommen, indem mein Wrapper von SQLite noch zum Teil umgeschrieben wurde und ich begebe mich jetzt auf die Suche nach UTF8Encode() für Delphi5. Mal sehen, ob ich da fündig werde. Wenn ich noch ein Problem habe, werde ich wieder schreiben :)

Danke aber vorerst, dass ihr euch mit meinem Problem auseinandersetzt.

Bernhard Geyer 7. Jan 2013 12:26

AW: Auf XE3 programmiert, auf 5 solls laufen.
 
Zitat:

Zitat von Getox (Beitrag 1198095)
... und ich begebe mich jetzt auf die Suche nach UTF8Encode() für Delphi5 ...

In der JCL (AFAIK JclUnicode.pas) gibts da was.

Getox 7. Jan 2013 14:36

AW: Auf XE3 programmiert, auf 5 solls laufen.
 
So... ich habe nun herausgefunden, dass JCL wohl was "Externes" ist, dass man zusätzlich installieren muss. nach einiger Zeit habe ich nun auch geschafft eine JCL Version zu besorgen, welche mit Delphi5 Läuft. JVCL 3.37 war wohl die letzte Version die unter Delphi5 lief und darin war auch ne funktionierende Version von JCL.

Jetzt bin ich aber leicht verwirrt mit dem ganzen String, WideString, UTF8 und keine Ahnung. Mit diesem Thema habe ich mich nicht ganz befasst.

Ich habe nun in meiner Datei vom SQL Wrapper erstmal die JclUnicode unter USES hinzugefügt und bin nun an der Stelle an der vorher stand:

Delphi-Quellcode:
function StrToUTF8(const S: WideString): AnsiString;
begin
  Result := UTF8Encode(S);
end;
Die Funktion UTF8Encode gib es nicht und will ich ja durch die entsprechende Funktion der JCL ersetzen. Aufgrund mangelnden Wissens, was diese ganzen Textformate angeht, stehe ich etwas aufm Schlauch. Welche Funktion aus der JCLUnicode ist denn die, welche ich benötige?

stahli 7. Jan 2013 14:55

AW: Auf XE3 programmiert, auf 5 solls laufen.
 
Denke nochmal über den Tipp von Uwe nach (Projekt im Rahmen von D5 neu aufsetzen).

Vielleicht kannst Du auch irgendwo ein günstiges D2009 bekommen - dort wäre zumindest schon Unicode mit dabei (wenn Du es wirklich brauchst).

Getox 7. Jan 2013 15:03

AW: Auf XE3 programmiert, auf 5 solls laufen.
 
Das Problem vor dem ich stehe, dass ich mit SQLite arbeite. Dafür nutze ich einen Wrapper und der geht nur mit diesem Unicodegedöns.

Wenn ich das Programm neu schreibe, kann ich aus diesem Grunde immernoch keine Datanbank anlegen, benutzen oder sonst was...

sh17 7. Jan 2013 22:42

AW: Auf XE3 programmiert, auf 5 solls laufen.
 
Warum soll es denn eigentlich auf D5 laufen? Aus Kostengründen? In XE3 schien ja alles gut geklappt zu haben. Klang oben zumindest so. Für die Stunden, die Du jetzt mit dem rumgefrickel Zeit verlierst, kannst Du Dir auch XE3 Pro zulegen.

Bernhard Geyer 7. Jan 2013 23:03

AW: Auf XE3 programmiert, auf 5 solls laufen.
 
Zitat:

Zitat von Getox (Beitrag 1198108)
Dafür nutze ich einen Wrapper und der geht nur mit diesem Unicodegedöns.

SQLite ist nunmal ein DBMS das die Daten in so einem Uniocdegedöns ablegt

Ach ja: Müsste nicht ZEOS auch SQLite unterstützen? Ist evtl. einfacher damit zu arbeiten. Die Frage ist nur ob du die neustes Version noch verwenden kannst oder auf Alte Version zurückspringen musst.


Kannst du nicht mindestens auf D7 hochgehen? Diese müsste noch von mehr Bibliotheken unterstützt werden so das du keine Antiken Versionen einsetzen musst.

EgonHugeist 7. Jan 2013 23:47

AW: Auf XE3 programmiert, auf 5 solls laufen.
 
Soweit ich weiß haben wir alle defines in Zeos7 für Compiler, älter als D7 rausgeschmissen. Außerdem ist ist das UTF8Encode/UTF8Decode da auch schon überall drin.

Es gab da eine kurze Absprache, ob irgendwer noch Interesse an solchen Compilern haben könnte. Das gleiche Spiel mit FPC2.2../Kylix

Mit 6.6.6 könnte das alles noch gehen, du bräuchtest jedoch irgendwelche UTF8 oder WideString Componenten wie TNT o.ä..

Altenativen für:

uses windows;

UTF8Decode

Delphi-Quellcode:
function AnsiToWide(const S: AnsiString): WideString;
var
  l: Integer;
begin
  l := MultiByteToWideChar(CP, 0, PAnsiChar(@s[1]), - 1, nil, 0); //Checkout the Result-Lengh
  if l = 0 then Exit;
  SetLength(Result, l - 1);
  MultiByteToWideChar(65001, 0, PAnsiChar(@s[1]),
    - 1, PWideChar(@Result[1]), l - 1); //Convert Ansi to Wide with supported Chars
end;
UTF8Encode:

Delphi-Quellcode:
function WideToAnsi(const ws: WideString): AnsiString;
var
  L: Integer;
begin
  l := WideCharToMultiByte(65001,0, @ws[1], - 1, nil, 0, nil, nil); //Checkout the result length
  if l = 0 then Exit;
  SetLength(Result, l - 1); //SetResult Length
  WideCharToMultiByte(65001,0, @ws[1], - 1, @Result[1], l - 1, nil, nil); // Convert Wide down to Ansi
end;
Du kannst die CP65001(UTF8) auch mit 1252 austauschen (dann aber dwFlags anstatt 0 mit WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR austauschen), somit WideToAnsi oder AnsiToWide erstellen, was deine Controls dann darstellen können.

Habe das alles so bei Zeos reingebröselt und funzt wunderbar. Jedoch werden unter CP1252 alle nicht unterstützen Bytesequenzen zu '?' umgewandelt.

Gruß Michael


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

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 by Thomas Breitkreuz