| |
|
|
- Seite 1 - |
|
Dieter Zornow | Hier mein zweiter Wettbewerbsbeitrag
Download
Ich habe mich mal mit dem Richedit befasst und eine PCU geschrieben, die das ganze Handling stark vereinfachen soll. Es sind 99 Funktionen enthalten, mit vielen Features wie zoomen, das komplette Handling einschließlich der Dialoge für Suchen und Suchen und Ersetzen sowie verschiedene Bullets Zeilenumbruch, ein Kontextmenü und drucken, hoffe dass das Drucken überall funktioniert, da ich nur mit dem PDF-Printer getestet habe Dabei ist eine, wie ich meine, gute Dokumentation und ein Beispielprogramm als prf das die Funktionen lauffähig zeigt, so dass es kinderleicht sein sollte sie zu nutzen. Ich habe Wert darauf gelegt immer das komplette Handling einer Funktion zu integrieren, so dass das meiste mit einem Aufruf abgedeckt ist, sowie die Anzahl der Parameter so gering als möglich zu halten, meistens wird nur das Handle des Richedits übergeben. Es ist kein Subclassing vorhanden, da ich die PCU ab XProfan 8.0 lauffähig machen wollte. Da ich keine 8 er Version installiert habe, müssen Tests zeigen ob es mir gelungen ist. Auch im Beispielprogramm habe ich mich bemüht nur Befehle der 8.0 Version zu nutzen, kenne aber den Befehlsumfang nicht genau. Unter Version 11 läuft aber alles. Bilder einfügen ist ebenfalls noch nicht integriert, da mir aus Zeitgründen der Aufwand zu groß war. Kommt aber noch, wie es meine Zeit erlaubt. Vorschläge und Kritik zur Weiterentwicklung sind willkommen.
Im Paket enthalten sind
Demo.prf, Ein Demonstartionsprogramm für Möglichkeiten der PCU Dokumentation.chm, Die Dokumentation der 99 Funktionen. Dokumentation.rtf, Die Dokumentation als RTF-Datei MinitextPad.zip, Ein kleiner Editor den ich zur Demonstartion geschrieben habe (als Exe) RTFHandling.def, Die von XPSE erzeugte Definationsdatei, RTFHandling.pcu, Die PCU RTFHandling.html Die von XPSE erzeugte Hilfe.
Gruß
Dieter |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 24.11.2008 ▲ |
|
|
|
| |
|
- Seite 4 - |
|
|
Dieter Zornow | Hallo Thomas,
UTF-8. kann nicht funktionieren. hat schon einige erhebliche Unterschiede zu Unicode,
Unicode: Hier werden die Zeichen immer mit 2 Bytes dargestellt und am Anfang der Textdatei stehen zwei Bytes (FF FE), die kennzeichnen, dass es sich um eine Unicode-Datei handelt.
UTF-8: Bei UTF-8 verbrauchen die Zeichen unterschiedlich viele Bytes.
Wenn du aber UTF-8 normal als Ansi und nicht als Unicode lädst wird alles bis auf die Sonderzeichen normal angezeigt bedeutet wahrscheinlich, dass die normalen Ansizeichen in UTF-8 auch nur ein Byte groß sind und nur die Sonderzeichen aus mehreren Bytes bestehen. |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 08.09.2009 ▲ |
|
|
|
|
Thomas Freier | Hallo Dieter, ich hatte jetzt eine kleine RTF-Anwendung auf die RTFHandling.pcu umgestellt. Leider bekomme ich den Zeilenumbruch (kommt zu früh) nicht wie gewünscht hin. Wo liegt mein Problem? |
|
|
| |
|
|
|
Dieter Zornow | Hallo Thomas,
Ich stehe im Moment auch auf dem Schlauch, muss ich mich erst mal schlau machen, wenn ich was finde melde ich mich. Vielleicht könntest du ein Richedit ohne Scrollen verwenden. Würde aber horizontales und vertikales Scrollen verhindern
ed& = Control("Richedit","",$54011004,10,40,360,362,%hwnd,9000,%hinstance,$0)
Dein Programm ist mir als Prf abgestürzt, da das Bild nicht gespeichert werden konnte. Kann sein, dass das ein Problem von XProfan 12 ist, denn deine Exe läuft ja einwandfrei, auch bei mir unter Win 7. so wie du es gespeichert hast, hat es im Interpreter nicht funktioniert, es kam ein Bild der Größe 0 heraus. KompilierenMarkierenSeparieren so funktioniert es aber einwandfrei KompilierenMarkierenSeparierentext$=new_file$+"\Bild.png"
BlockWrite text$,mem#,0,2736
|
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 21.02.2010 ▲ |
|
|
|
|
Thomas Freier | Dieter, ist eigentlich nicht so wichtig. Hatte es beim optischen Aufpeppen einmal über die PCU versucht. Kann aber auch wieder wie vorher angewendet, aus Pascals Beispiel (RTF-Edit mit fester Höhe und Breite), die Breite festlegen. |
|
|
| |
|
|
|
Dieter Zornow | Hallo Thomas,
habe die Lösung gefunden, ich habe einen festen Multiplikator eingebaut der den Text immer auf eine feste Größe relativ zur Controlgröße setzt. Da ich das nur zum lesen überlanger Texte gedacht hatte, funktioniert es bei so speziellen Anwendungen, wo es sehr genau sein muss, nicht zufriedenstellend. Ich muss wohl die Funktion um einen Parameter zum Einstellen des Multiplikators erweitern, dann kann man die Relative Größe zum Control einstellen. Ich habe 12 als Standard eingestellt, bei dir müsste es 15 sein um genau die gewünschte Größe zu erhalten |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 23.02.2010 ▲ |
|
|
|
|
Thomas Freier | Hallo Dieter, DANKE für die Mühe. Geht jetzt, und werde es noch bei den Etiketten testen, wenn du bitte die Funktion ändern Font markierter Text dahin erweitern würdest, dass im Fontdialog gleich Art, Höhe, Farbe, usw. des markierten Textes vorgegeben werden. |
|
|
| |
|
|
|
Dieter Zornow | Hallo Thomas,
ich weiß jetzt nicht was du meinst. Meinst du SETMARKEDTEXTFONT Der Fontdialog ist ja nicht in der PCU vorhanden. Hier wird ja nur der Name des Fonts als String übergeben. Den Dialog dazu musst du ja selbst erstellen. Im Demo ist er auch außerhalb. Oder meinst du was anderes. |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 24.02.2010 ▲ |
|
|
|
|
Thomas Freier | Ja, der Fontdialog ist extern. Habe das Beispiel mal erweitert. Ein GETGetMarkedTextSize(), ists FETT, KURSIV, usw., kann ich nicht finden oder wie hast du das realisiert hast. Ob die Lösung für Höhe und Farbe allgemeingültig ist??? Lassen sich die anderen Einstellungen auch noch über eine GetMarkedTextSize(ed&)-Abfrage realisieren? |
|
|
| |
|
|
|
Dieter Zornow | Hallo Thomas,
Das Auslesen ob eine Schrift Fett usw ist, ist nicht enthalten, diese Funktionen habe ich nur als Umschalter drin. Wenn etwas fett ist wird es beim Aufruf normal und umgekehrt. Wäre aber kein Problem sowas einzubauen, da ich beim umschalten ja auch den jeweiligen Zustand ermitteln muss. Werde das in den nächsten Tagen einbauen. |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 24.02.2010 ▲ |
|
|
|
|
Thomas Freier | Das liest sich gut. Neben dem Fontdialog läßt sich ja dann auch bei markiertem oder bei Curserposition im Text, die Darstellung des entsprechenden Button steuern. DANKE! |
|
|
| |
|
|
|
Thomas Freier | Hallo Dieter,
bevor ich mich den Objekten zuwende, habe ich noch ein Problem. Bis dato bin ich mit der Erstellung, Bearbeitung, usw. der RTF sehr zufrieden. Nun, durch Zufall entdeckt, führt ein Rechtsklick in der RTF zu einer Speicherverletzung. Könntest du, oder jeder der daran Spaß hat, bitte einmal auf den stark eingekürzten Script sehen, was falsch läuft. KompilierenMarkierenSeparieren $U RTFHandling.pcu = R_'TRF-PCU einbinden
$U objects.pcu = R_
cls
Bilder_Rep
WaitInput
end
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Bilder Report ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Proc Bilder_Rep
Declare RichEdit&,rtf_dll&,rtf_hdc&,linebreak&
rtf_dll& = R_INTITFORCREATERTF()'DLL laden mit PCU
WINDOWSTYLE 538
var B_dlg& = @Create("Window",%hwnd," Bilder-Report " ,80,10,900,720)
rtf_dll& = R_INTITFORCREATERTF()'DLL laden mit PCU
RichEdit& = R_CREATERICHEDIT(B_dlg&,"",9000,60,750,580)' Richedit erstellen mit PCU
rtf_hdc& = R_PREPAREFORLINEBREAK(RichEdit&)' Device Context erzeugen mit PCU
R_Init_object(RichEdit&)'Zum Bildempfang vorbereiten
R_SETMARKEDTEXTSIZE(RichEdit&,18)
R_SETMARKEDTEXTFONT(RichEdit&,"Sheffield")
R_RTFREPLACE(RichEdit&,"SAV Pliete e.V. Lübeck")
SendString(RichEdit&,"^{ENTER}")
R_SETMARKEDTEXTSIZE(RichEdit&,14)
R_SETMARKEDTEXTFONT(RichEdit&,"Sheffield")
R_RTFREPLACE(RichEdit&,"Bilder vom Bootsplatz")
SendString(RichEdit&,"^{ENTER}")
R_GotoEnd(Richedit&)
R_SETMARKEDTEXTSIZE(RichEdit&,12)
R_SETMARKEDTEXTFONT(RichEdit&,"Verdana")
WhileLoop 3
SendString(RichEdit&,"^{ENTER}")
EndWhile
R_GotoEnd(Richedit&)
SetWindowPos RichEdit&=60,60
R_RTFMarkAll(Richedit&)
R_SETTEXTCENTER(RichEdit&)
R_RTFSetCaretPosition(RichEdit&,0,0)
setfocus(B_Dlg&)
While 1
WaitInput
case %key=2:BREAK
wend
R_DEINITRTF(RichEdit&,rtf_hdc&,RTF_DLL&)'RTF-Aufräumen
R_DeInit_object()
DestroyWindow(B_dlg&)
setfocus(%hwnd)
EndProc
|
|
|
| |
|
|
|
Thomas Freier | Hallo Dieter, habe den Fehler einkreisen können: R_GETRIGHTCLICKMENU(ed&) 'Rechtsklickabfrage muß vorhanden sein, auch wenn RTFMenu(ed&) nicht gesetzt ist. Ist im Beispiel DEMO.rtf nachzuvollziehen. Leider öffnet sich dann auch ohne RTFMenu(ed&) das Menü, was mich nicht stören würde, aber leider ist bei meiner Bilder-RTF der Druck dann unvollständig. |
|
|
| |
|
|