AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TNT-Unicode-Controls-Hack for Turbo Delphi (and other)
Thema durchsuchen
Ansicht
Themen-Optionen

TNT-Unicode-Controls-Hack for Turbo Delphi (and other)

Ein Thema von himitsu · begonnen am 18. Okt 2009 · letzter Beitrag vom 17. Aug 2015
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von himitsu
himitsu
Registriert seit: 11. Okt 2003
Moin Moin,

ich wollte nur mal einen winzigen Hack vorstellen, welcher "indirekt" z.B. im Turbo Delphi die TNT Unicode Controls v2.3.0 einbindet.

[achtung]
Wenn es Probleme gibt, z.B.:
Zitat:
{$IFDEF COMPILER_10_UP}
* {$MESSAGE FATAL 'Do not refer to TntWideStrings.pas. It works correctly in Delphi 2006.'}
{$ENDIF}
und/oder womöglich auch noch mit mehreren Delphiversionen gearbeitet wird,

dann bitte erstmal das Projekt neu erzeugen und prüfen, ob es nicht an den Compilern liegt.
z.B. siehe hier http://www.delphipraxis.net/internal...126663#1126663

D2006/TDE nutzt z.B. einen erweiterten D7-Compiler und diese sind in den DCUs soweit "leider" kompatibel zueinander, so daß dort die Units nicht automatisch neu kompilert werden und es somit zum einem Versionskonflikt kommen könnte.
[/achtung]


Man bastelt einfach im TD seine GUI zusammen und bindet dann nur noch die entsprechenden TNT-Units in seine Formular-Unit ein ... und/oder wo es sonst noch nötig ist.

z.B. die beiliegende Demo:

* ohne die eingebundenen Units ist alles ANSI ... halt wie gewohnt

* sobald aber die TntHack*-Dateien eingebunden sind,
in der Demo sind es diese
Delphi-Quellcode:
uses ...
  TntHackWindows, TntHackSysUtils, TntHackClasses, TntHackGraphics,
  TntHackControls, TntHackForms, TntHackDialogs, TntHackStdCtrls, TntHackCheckLst;

werden die entsprechenden Delphi-VCL-Komponenten beim "Kompilieren" ersetzt.

siehe Anhang:
- oben = normal
- unten = mit TNT-Hack

* einfach Regel: sobald eine XYZ in den Uses steht und einen gleichnamige TntHackXYZ existiert, dann diese einfach mit in der Uses eintragen (nicht austauschen! ... nur anhängen)



Genauer gesagt, werden die Runtime-Typen überschrieben und es werden dann vom VCL-Form-Loader die TNT-Komponenten geladen.

Vorteil gegenüber dem "normalen" Vorgehen zum Einbinden externer Komponenten ist,
daß man keine Komponenten dynamisch erstellen muß, sondern einfach die Standardkomponenten der VCL nutzt,
um sich die GUI zusammenzuklicken und diese dann später autmatisch ersetzt werden.
> das wird vorallem auch dadurch gefördert, daß die TNTs vorwiegend "nur" ein Unicode-Port der VCL sind.




Achtung: die TntHack*-Dateien müssen natürlich immer als letztes in der Usesklausel stehen, da sonst die "gehackten" Komponenten von der VCL überschrieben werden und nicht andersrum (wie es ja gewollt wäre)


Für alle, welche die TNTs kennen:
Hier müssen die gleichnamigen TntHack*-Dateien verwendet werden und nicht die Tnt*.
Es können aber auch "beide" eingebunden werden, solange die TntHack* ebenfalls als Letztere drinnen steht.



Die Anhänge sind zwar in Delphi 7 erstellt und kompiliert, sollten aber (hoffentlich) auch für die Turbos und andere Versionen bis Delphi 2006/2007 funktionieren.

Es muß auch nichts installiert werden.
> nur entpacken und die Suchpfade in den Projektoptionen angeben



Zur Design-Time sind alle Komponenten noch ANSI
und nach dem Kompilieren sind sie durch die TNTs ersetzt.

Dieses bedeutet aber auch, daß einiges nicht richtig funktiniert.
z.B. das Maskenzeichen von TEdit/TTntEdit ist in unterschiedlichen Properties gespeichert und würe demnach nicht vom OI übernommen.



[info]
es ist noch nicht alles der TNTs in den Hack übertragen, bzw. dahin umgeleitet,
aber die vorhandenen Komponenten sollten alle drinnen sein.

[edit 19.10.2009 17:45] Aufgrund einiger Fehler (siehe #2) wurden alle Anhänge ausgetauscht
[update 20.10.2009 23:45] kleine Änderungen und vorallem bezüglich #2 nochmal alles durchgesehn
Miniaturansicht angehängter Grafiken
unbenannt_784.png  
Angehängte Dateien
Dateityp: 7z hacked-tntunicodecontrols_v2.3.0_180.7z (310,2 KB, 179x aufgerufen)
Dateityp: exe exampleunicode_876.exe (619,0 KB, 85x aufgerufen)
Dateityp: exe exampleunicode.nontnt_167.exe (423,5 KB, 71x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
 
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#11
  Alt 8. Dez 2009, 06:53
Bei mir sieht es etwas anders aus als in Deinem Bild.
Miniaturansicht angehängter Grafiken
mhh_142.png  
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#12
  Alt 8. Dez 2009, 08:12
Hast du in deinem System auch die nötigen Sprachen/Schriftarten installiert?

Systemsteuerung > Regions- und Sprachoptionen > Sprachen > Zusätzliche Sprachoptionen
für dieses Beispiel werden vorwiegend die ostasiatischen Sprachen benötigt (siehe Anhang),
welche bis Win XP standardmäßig nichts installiert werden.
Miniaturansicht angehängter Grafiken
unbenannt_209.png  
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#13
  Alt 8. Dez 2009, 09:41
Zitat von himitsu:
... welche bis Win XP standardmäßig nichts installiert werden.
Genau so ist das bei mir.

Ich habe in das Example ein TEdit, einen TButton und einen TOpenDialog eingefügt und eine Datei in einem Ordner mit griechischen Buchstaben geöffnet. Der erste Test funktioniert. Prima Arbeit!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#14
  Alt 8. Dez 2009, 09:56
Zitat von Garfield:
Genau so ist das bei mir.
Dann isses aber schon komisch ... könnte natürlich auch sein, daß irgendwas mit den Schwiftarten nicht klappt und irgendeine Schriftart genommen wurde, welche diese Zeichen nicht darstellen kann.
Hatte mir gestern meine XP SP3-VM inkl. dem ostasiatischen Zeugs ganz frisch installiert und da läuft die Demo erstmal problemlos.
(solange man die VMs nicht produktiv, sondern nur zum Testen nutzt, dann ist es ohne Hardwarevirtualisierung schon besser ... nach Wechsel der CPU liefen meine VMs nimmer so richtig )

Zitat von Garfield:
Der erste Test funktioniert. Prima Arbeit!
Das ist schonmal gut.
Und Danke.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#15
  Alt 8. Dez 2009, 10:24
Zitat von himitsu:
Zitat von Garfield:
Genau so ist das bei mir.
Dann isses aber schon komisch ...
Nee, nee. Es ist noch Standard, also nichts installiert. Kyrillisch und Griechisch gehen ja, mehr ist - zumindest im Moment - nicht notwendig.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#16
  Alt 3. Feb 2010, 01:02
Zitat von himitsu:
Man bastelt einfach im TD seine GUI zusammen und bindet dann nur noch die entsprechenden TNT-Units in seine Formular-Unit ein ... und/oder wo es sonst noch nötig ist.

...

in der Demo sind es diese
Delphi-Quellcode:
uses ...
  TntHackWindows, TntHackSysUtils, TntHackClasses, TntHackGraphics,
  TntHackControls, TntHackForms, TntHackDialogs, TntHackStdCtrls, TntHackCheckLst;
Ganz so scheint es nicht zu sein. Beim Compilieren bleibt man in der Unit TntWideStrings hängen:
Delphi-Quellcode:
{$IFDEF COMPILER_10_UP}
  {$MESSAGE FATAL 'Do not refer to TntWideStrings.pas.  It works correctly in Delphi 2006.'}
{$ENDIF}
Wenn man dies entfernt, hat man im TEdit und TRichEdit ????????? stehen, im TMemo |||||||||||. Über die Zwischenablage kopiert hierher sind das dann ????????? und Программа.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#17
  Alt 3. Feb 2010, 08:56
Zitat von Garfield:
Ganz so scheint es nicht zu sein. Beim Compilieren bleibt man in der Unit TntWideStrings hängen:
Ist auch richtig so, denn ab D2006/TDE soll/darf diese TntWideStrings nicht verwendet werden.
Darum wurde absichtlich dieser Compilerfehler dort eingebaut.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#18
  Alt 3. Feb 2010, 09:34
Dann müsste das in Deinem Hack unterbunden werden!?

Muss mir das mal ansehen:
Zitat von himitsu:
nja, die Lösung war, daß eine unter D7 compilierte Unit natürlich entsprechend seiner Compilerversion diese Unit einbinden wollte und TDE jetzt (wegen gleicher CDU-Verionen) diese Unit einfach nicht mit der anderen Compilerverion neu kompilierte
Ich habe zwar nur die obigen Units eingebunden, aber zuerst unter D7. Mal sehen.

Nachtrag: Das war es. Und das obwohl ich "... erzeugen" zum Kompilieren verwendet hatte. Dummerweise ändert das nichts an den ? und |.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#19
  Alt 3. Feb 2010, 10:11
Hier macht sich leider der D7-Kompiler im TDE bemerkbar ... jetzt wo du es sagst, fält mir ein, daß ich das bei mir auch mal hatte

Hmmmm, hab es ja selber in D7 und TDE getestes und da ging's
Welches OS nutzt du denn und ist da auch die nötige Sprachunterstüzung installiert?

Das ||||||||||| könnte darauf hinweisen, daß die verwendete Schriftart diese Zeichen nicht darstellen kann.

Kannst du soeine EXE mal hochladen?
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#20
  Alt 3. Feb 2010, 11:04
War falsch, was ich oben geschrieben habe. Ich habe die Warnung gelöscht, damit ich es compilieren konnte.

Wenn ich den Charset auf RUSSIAN_CHARSET ändere, geht es. Ich dachte eigentlich, dass das bei TNT und Widestring nicht notwendig ist.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 00:45 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