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 3 von 4     123 4      
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
 
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#21
  Alt 3. Feb 2010, 11:11
Eigentlich müßte es möglich sein.

In der Demo wurde auch ohne Charsets gearbeitet:
http://www.delphipraxis.net/download.php?id=41107 ( Bild aus der #1 )
OK, da ist zwar kein Russisch drin, aber das ist ja vom Prinzip her egal.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#22
  Alt 3. Feb 2010, 11:48
Wie ich früher oben geschrieben hatte, funktioniert die Anzeige des Pfades in einem Edit und Memo. Anscheinend liegt das Problem im anzuzeigenden String bzw. in der Erstellung desselben.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#23
  Alt 3. Feb 2010, 11:59
@Garfield: Ich mach das jetzt mal öffentlich, damit alle was davon haben.

Er hat mir sein Projekt zugesendet und beim Test ist mir was ganz einfaches, aber leicht zu übersehendes aufgefallen.

Es werden ja nur die Komponenten ausgetauscht, zu welchen die passenden TntHack-Dateien eingebunden wurden, also auch da wo diese Komponente sich befindet.

Die Edits und Memos wurden getauscht, darum funktionierte es dort.
Die ListView war aber nicht getauscht, weswegen sie noch die ANSI-Version war und demnach kein Unicode konnte.

Diese Units wären noch möglich, bzw, fehlten
Zitat:
TntHackExtCtrls, TntHackComCtrls, TntHackGrids, TntHackClipbrd
( die ListView versteckt sich in der TntHackComCtrls )

Als Einfachste ist wirklich:
- alles in Uses kopieren und nochmal hinten dranzuhängen
- dann vor jede Unit "TntHack" davorkopieren
- und dann einfach nur noch alles rauslöschen, was es nicht gibt (OK, und die eine TntWideStrings, welche ab D2006 rummotzt)

PS: Wenn es Probleme gibt, dann kann auch bei den Komponenten mal nachsehn, ob die Schnittstellen mit WideString oder AnsiString arbeiten.
Bei deinem
Delphi-Quellcode:
with lvw_Events.Items.Add
do begin
  Caption := IntTostr(EIT.service_id);
  SubItems.Add(CodeToTime(EITBody.start_time));
  ...
waren Caption und SubItems.Add mit AnsiString und Strg+Mausklick leiteten mich in die ComCtrls, anstatt in die entsprechende TNT-Unit.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#24
  Alt 3. Feb 2010, 12:58
Ich habe mir Deine Änderungen angesehen. es fehlten nicht nur Units in den Uses, sondern ich hatte auch die falsche Schriftart. Das heißt, ich hatte sie nicht geändert und auf MS Sans Serif belassen. Damit kommen dann die ||. Mit der von/bei Dir eingestellten Schriftart Tahoma funktioniert es.

Vielen Dank.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#25
  Alt 21. Mär 2010, 18:06
Ich bin gerade dabei die Hacks in eine weitere Anwendung einzubauen. In dieser arbeite ich mit Dateien, welche Zeichen anderer Codepages enthalten. Für den TOpenDialog brauchte ich erwartungsgemäß nur die Unit TntHackDialogs einbinden und es funktionierte. Dann sollte es mit ExtractFileDir weitergehen. Anstelle dessen muss man WideExtractFileDir verwenden. Allerdings kann man nicht die TntHackSysUtils verwenden sondern muss direkt TntSysUtils einbinden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#26
  Alt 22. Mär 2010, 00:25
Joar .... ähhhhh ... hmmmmm ... nja, dieses ist/war vorzugsweise auf die Komponenten (VCL) ausgelegt, da diese ja in Turbo Delphi nicht direkt eingebunden werden können, und es wurden diesbezüglich nur kleinere Unitinhalte und wichtige Stellen geändert/weitergeleitet/überschrieben.

Vorallem die Umleitung von vielen Funktionen ist schon ein bissl aufwändig (also von der Erstellung und Auflistung der Funktionen her, aber mal sehn was sich machen läßt ... also wann und wie schnell ich dazu komm diesbezüglich ein paar zusätzliche Umleitungen einzurichten.

(Bin grad erst heimgekommen und nach 4 Messetagen bin auch noch ganz schön fertig, hab noch viel auszuwerten und zusätzlich auch noch andere Dinge zu erledigen ... parallel zum Beginn an einer neuen Arbeitsstelle)
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#27
  Alt 22. Mär 2010, 11:08
Zitat von himitsu:
... nja, dieses ist/war vorzugsweise auf die Komponenten (VCL) ausgelegt, da diese ja in Turbo Delphi nicht direkt eingebunden werden können, ...
Deshalb verwende ich die Hacks.

Zitat von himitsu:
Vorallem die Umleitung von vielen Funktionen ist schon ein bissl aufwändig (also von der Erstellung und Auflistung der Funktionen her, aber mal sehn was sich machen läßt ... also wann und wie schnell ich dazu komm diesbezüglich ein paar zusätzliche Umleitungen einzurichten.
Ich habe gesehen, dass es sehr aufwändig ist. Vielleicht ist es sinnvoll, auf die Unit TntHackSysUtils und ähnliche zu verzichten und in einer Readme auf die direkte Verwendung hinzuweisen!?

Viel Spaß und Erfolg im neuen Job.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#28
  Alt 22. Mär 2010, 13:01
Danke

Gut, bei der TntHackSysUtils ist es einfach, weil dort wirklich nichts gemacht wird, aber es gibt auch Units, wo "nur" ein Teil umgeleitet wurde (weiß grad nicht Welche), da müßte man dann beide Units (z.B. TntHackSysUtils und TntSysUtils) einbinden.
Aber es wird sich bestimmt eine möglichst einfache Lösung finden

Hatte den Code damals halt nur zur Ersetzung der Komponenten genutzt und da fällt dann ein derartiges Problem einfach nicht auf.
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

 
Delphi XE5 Professional
 
#29
  Alt 23. Mär 2010, 07:19
Das, worauf es ankommt, funktioniert. Was erst später auffällt, sind dann die "Nebensächlichkeiten".
  Mit Zitat antworten Zitat
evilboy

 
Delphi 2009 Enterprise
 
#30
  Alt 15. Dez 2011, 00:48
Vielen Dank für diese Tools, sie sind sehr nützlich und fühlen sich deutlich besser und nicht so wackelig an wie UTF8VCL. Letzteres läuft zwar auch noch auf Delphi 4, aber soweit zurück muss man auch wieder nicht gehen…

Nur eine kleine Bugmeldung: Bei mir (Delphi 7) beschwert es sich, wenn das PasswordChar eines Edits nicht #0 ist. Dann heißt es:
"Project Project1.exe raised exception class EReadError with message 'Property *Tab does not exist'. Process stopped. Use Step or Run to continue."

Wenn man also Password-Edits hat, sollte man das PasswordChar auf #0 setzen und stattdessen SendMessage(Edit1.Handle, EM_SETPASSWORDCHAR, Ord('*'), 0); in den Code einbinden.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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