Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   TRtfLabel - Label zur Darstellung von RTF (https://www.delphipraxis.net/66569-trtflabel-label-zur-darstellung-von-rtf.html)

ThYpHoOn 20. Jan 2011 12:01

AW: TRtfLabel - Label zur Darstellung von RTF
 
Zitat:

Zitat von mkinzler (Beitrag 1076061)
Danke. Am Besten du ergänzt deinen 1. Beitrag entsprechend


Ich bin nicht der ersteller der Komponente, mir ist dies nur als Benutzer der Komponente aufgefallen :) Hab Flocke aber noch eine Mail geschrieben, hoffe auf Antwort.


Greetz, ThYpHoOn

JYPDWhite 4. Feb 2011 16:28

AW: TRtfLabel - Label zur Darstellung von RTF
 
Hallo Flocke,


erstmal wollte ich sagen dass ich das RTFLabel echt super finde.
Endlich kann man mal ein Label ein bisschen Layout einhauchen. Nun zu meinem Problem.
Ich habe ein RTFLabel wo der Text rechtsbündig sein soll. Aber zur Laufzeit wird der Text Linksbündig angezeigt.
Das hier ist der Text der in dem Label drinne steht:
Code:
{\rtf1\ansi\deff0{\fonttbl{\f0\fswiss\fcharset0 Arial;}} {\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\qr\lang1031\f0\fs20 %s*10\super 3\par }

JYPDWhite 14. Jun 2017 13:58

AW: TRtfLabel - Label zur Darstellung von RTF
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hat es hier schon jemand geschafft TRtfLabel auf 64 Bit zu verwenden?
Ich probiere das gerade und bekomme immer folgende Exception:

Zitat:

Im Projekt Project5.exe ist eine Exception der Klasse $C0000005 mit der Meldung ' c0000005 ACCESS_VIOLATION' aufgetreten.
Ich habe ein Beispielprojekt im Anhang wo ich das ganze mal nicht als Komponente für die IDE installieren muss sondern einfach von TRTFLabel eine Instanz erzeuge.

Zur Sicherheit habe ich auch die TLB für die msftedit.dll neu erzeugt aus der 64 Bit Version der DLL(RichTom.pas, die alte Version ist auch im Zip mit Unterstrich am Anfang).

Hat jemand eine Idee was hier schief läuft?
Der Aufruf von TRTFLabel.Create verhält sich bei 64Bit anders als in 32 Bit (andere Funktionen werden aufgerufen), deswegen pase ich hier auch mal beide Stacktraces.
Der 64 Bit Stacktrace geht genau bis zu der Zeile bis dann die Access_Violation auftritt.

Zitat:

System._IntfClear(Pointer(nil) as IInterface)
DelphiTextServ.TTextServices.CreateEx([])
DelphiTextServ.TTextServices.Create
RtfLabel.TLabelTextServices.Create($24BA270)
RtfLabel.TCustomRtfLabel.Create($24B2C20)
Unit5.TForm5.FormCreate($24B2C20)
Vcl.Forms.TCustomForm.DoCreate
Vcl.Forms.TCustomForm.AfterConstruction
System._AfterConstruction($24B2C20)
Vcl.Forms.TCustomForm.Create($24D0DB0)
Vcl.Forms.TApplication.CreateForm(TComponentClass( $5A3CF0),(no value))
Project5.Project5
:0000000076D059CD ; C:\WINDOWS\system32\kernel32.dll
:0000000076F3A561 ; ntdll.dll
32Bit:
Zitat:

DelphiTextServ.TTextServices.TxGetPropertyBits(646 3,0)
:6b9bb324 ; C:\WINDOWS\SysWOW64\MSFTEDIT.DLL
:6b9bb220 MSFTEDIT.CreateTextServices + 0x52
DelphiTextServ.TTextServices.CreateEx([])
DelphiTextServ.TTextServices.Create
RtfLabel.TLabelTextServices.Create($1074C90)
RtfLabel.TCustomRtfLabel.Create($1075CC0)
Unit5.TForm5.FormCreate($1075CC0)
:004fec6f TCustomForm.DoCreate + $37
:004fe8b3 TCustomForm.AfterConstruction + $17
:004fe882 TCustomForm.Create + $1A6
:005092ad TApplication.CreateForm + $79
Project5.Project5
:74e5336a kernel32.BaseThreadInitThunk + 0x12
:77129902 ntdll.RtlInitializeExceptionChain + 0x63
:771298d5 ntdll.RtlInitializeExceptionChain + 0x36

JYPDWhite 29. Jun 2017 16:51

AW: TRtfLabel - Label zur Darstellung von RTF
 
Liste der Anhänge anzeigen (Anzahl: 1)
So ich möchte hier auch was zurück geben.
Ich habe es hinbekommen. Im Endeffekt musste man den ThisCallWrapper anpassen, das habe ich gelöst indem ich den in eine neue Datei für x64 ausgelagert habe. Bei den usese der anderen Units wird per Compilerdirektive entschieden welche Datei eingebunden werden soll.
Dann gab es noch ein paar Stellen wo Pointer an Windows übergeben werden diese wurden vorher in integer umgewandelt das habe ich ebenfalls geändert damit da keine Probleme auftreten sollten. Das ganze ist jetzt nicht groß getestet. Ich kann nur Sagen dass es bei mir soweit funktioniert ob es nicht noch irgendwo Probleme gibt möchte ich nicht ausschließen.

jas 18. Apr 2018 08:30

AW: TRtfLabel - Label zur Darstellung von RTF
 
Danke Flocke und JYPDWhite für die Arbeit.
Ich habe den Code auf Delphi Tokyo 32 und 64 Bit ausprobiert. Sehr schön.

Allerdings konnte ich in der Versionsauswahl im RtfLabel Example nicht auf Version 4.1 (bzw.auf MSFTEDIT.DLL) wechseln, was die Darstellung schon etwas einschränkt.

Beim Debuggen habe ich dann festgestellt, dass in RichEditDll.pas -> DllVersionNumber für die MSFTEDIT.dll die dwFileVersionMS=$A0000 ergibt.
Da nur die unteren 2 Bytes (typecast word) als VersionNumber gelesen werden, ist das Ergebnis 0 und die DLL wird nicht in der Combobox angeboten.

Wenn ich den Typecast entferne, erhalte ich zwar unsinnige Versionsnummern, kann aber die MSFTEDIT.dll auswählen und alles ist okay.

Weiß jemand, warum das so ist und wie das korrekt zu beheben ist?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:15 Uhr.
Seite 3 von 3     123   

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