RichEdit Funktionen (OOP): Jetzt mit ImageSupport

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: RichEdit Funktionen (OOP): Jetzt mit ImageSupport

Beitrag von ts-soft »

Nur fünf von zehn oder fünf von fünf? :lol:

Aber schön, das nach 5 Doppelpostings von mir, mal wieder was geschrieben wird.
Nach 2,3 Jahren und fast 4000 Downloads, scheint also genutzt zu werden, auch
wenn sich nur selten jemand äußert :mrgreen:

Danke, Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
kwp
Beiträge: 2
Registriert: 10.07.2014 08:17

Re: RichEdit Funktionen (OOP): Jetzt mit ImageSupport

Beitrag von kwp »

Hallo Thomas,

ich bin gestern auf die RichEdit-Funktionen gestoßen, dafür auch von mir 5 Sterne (von 5)! Ich habe jedoch folgendes Problem: Wenn ich Bilder in den Text einbinde - egal ob mit cut & paste oder drag & drop - und anschließend den RT-Inhalt wieder auslese, ist der Inhalt verstümmelt. Mit Hilfe von Notepad++ habe ich festgestellt, dass anscheinend der vordere Teil fehlt. Es geht als irgendwo in den Hex-Werten für das Bild los, das Ende ist dann vollständig.

Vielleicht braucht's nur eine zusätzliche Option beim SendMessage in RichEdit_GetRTFText?

Hier das angepasste Beispiel RichEdit_Example_ViewRTFCode, bei dem man den Effekt nachvollziehen kann:

Code: Alles auswählen

EnableExplicit

XIncludeFile "..\RichEdit.pbi"
UsePNGImageDecoder()
UseJPEGImageDecoder()
UseModule RichEdit

Define.RichEdit Edit
Define.RichEdit Edit2

Macro mcDoubleText()
  Edit2\DisableRedraw(#True)
  Edit2\Clear()            
  Edit2\SetText( "{" )    
  Edit2\SetText( Mid(Edit\GetRTFText(),2))    
  Edit2\DisableRedraw(#False)
  Edit2\Redraw()
EndMacro  

If OpenWindow(0, #PB_Ignore, #PB_Ignore, 600, 250, "Test Image")
  Edit = New_RichEdit(0, 0, 600, 100)
  Edit2 = New_RichEdit(0,120,600,100)
  Edit2\SetReadonly(#True)
  Edit\SetInterface()
  Edit\SetText("This is a picture: ")
  
  LoadImage(0, OpenFileRequester("Datei öffnen","*.png","PNG (*.png)|*.png|JPG (*.jpg)|*.jpg",0))
  Edit\SetImage(ImageID(0))
  
  Edit\SetText(" in a EditorGadget!" + #CRLF$)

  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Gadget
        If EventGadget() = Edit\GetId()
          mcDoubleText()
;           
        EndIf          
      Case #WM_KEYUP
        If GetActiveGadget() = Edit\GetId()
          mcDoubleText()

        EndIf

    EndSelect
  ForEver
Else  
  Debug "Could not Open Window!"
EndIf
CloseWindow(0)
End
Benutzeravatar
Cebu-Uli
Beiträge: 22
Registriert: 04.09.2007 03:19
Wohnort: Wernigerode

Re: RichEdit Funktionen (OOP): Jetzt mit ImageSupport

Beitrag von Cebu-Uli »

Hallo Thomas,

Auch ich bin froh, dass RichEdit-Modul gefunden zu haben. Echt Klasse. Doch leider habe ich ein Problem damit, dass mich ziemlich nervt. In meinem Programm benutze ich mehrere RichEdit-Gadgets in verschiedenen Fenstern. Wenn man nun von einem Fenster in ein anderes wechselt und direkt in das RichEdit-Gadget klickt, so wird der Cursor darin nicht positioniert! Er erscheint ziemlich willkürlich irgendwo im Gadget. Erst ein zweiter Klick bewirkt die exakte Positionierung. Mein Code wäre zu lang, um den hier zu posten. Das Problem tritt jedoch bei allen deinen Beispielprogrammen ebenfalls auf. Keine Positionierung des Cursors im Gadget, wenn das Fenster nicht vorher aktiv war. Es wäre schön, wenn du hierfür eine Lösung hättest.

Gruß
Uli
PureBasic 5.31 (x32, x64) Windows 7 SP1 (x64)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: RichEdit Funktionen (OOP): Jetzt mit ImageSupport

Beitrag von ts-soft »

Keine Ahnung :wink:

Wie wäre es, bei #PB_EventType_Focus die Cursorposition zu speichern und bei #PB_EventType_LostFocus neu zu setzen?

Ansonsten fällt mir dazu gerade nichts ein.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Cebu-Uli
Beiträge: 22
Registriert: 04.09.2007 03:19
Wohnort: Wernigerode

Re: RichEdit Funktionen (OOP): Jetzt mit ImageSupport

Beitrag von Cebu-Uli »

ts-soft hat geschrieben:Keine Ahnung :wink:

Wie wäre es, bei #PB_EventType_Focus die Cursorposition zu speichern und bei #PB_EventType_LostFocus neu zu setzen?

Ansonsten fällt mir dazu gerade nichts ein.

Gruß
Thomas
Da verstehst du mich wohl nicht richtig. #PB_EventType_LostFocus spielt hier keine Rolle! Es geht darum den Focus zu erhalten. Wenn ich bei #PB_EventType_Focus die Cursorposition auslese und den Cursor mit Edit\SetCursorPos(X, Y) setze, dann funktioniert das an dieser Stelle einfach nicht. Der Cursor wird immer 2 Zeilen unter den letzten Text gesetzt und darauf habe ich überhaupt keinen Einfluss! Das macht das Rich.Edit-Modul! Und deshalb frage ich dich nach einer Lösung, weil es von dir stammt.

Gruß
Uli
PureBasic 5.31 (x32, x64) Windows 7 SP1 (x64)
Benutzeravatar
Cebu-Uli
Beiträge: 22
Registriert: 04.09.2007 03:19
Wohnort: Wernigerode

Re: RichEdit Funktionen (OOP): Jetzt mit ImageSupport

Beitrag von Cebu-Uli »

Probiere es doch einmal aus. Benutze deinen eigenen Beispiel-Code RichEdit_Example.pb. Dort kann man es sehr schön sehen. Einfach Text eingeben. Dann einem anderen Fenster den Focus geben und anschließend direkt in das RichEditGadget mitten in den Text klicken. Der Cursor landet 2 Zeilen hinter dem letzten Text.
PureBasic 5.31 (x32, x64) Windows 7 SP1 (x64)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: RichEdit Funktionen (OOP): Jetzt mit ImageSupport

Beitrag von ts-soft »

Tut mir leid, kann ich nicht nachvollziehen!

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: RichEdit Funktionen (OOP): Jetzt mit ImageSupport

Beitrag von Kiffi »

ts-soft hat geschrieben:Tut mir leid, kann ich nicht nachvollziehen!
ich auch nicht. Der Cursor bleibt bei mir an seinem Platz.

Grüße ... Peter
Hygge
Benutzeravatar
Cebu-Uli
Beiträge: 22
Registriert: 04.09.2007 03:19
Wohnort: Wernigerode

Re: RichEdit Funktionen (OOP): Jetzt mit ImageSupport

Beitrag von Cebu-Uli »

ts-soft hat geschrieben:Tut mir leid, kann ich nicht nachvollziehen!

Gruß
Thomas
So, ich habe mir noch einmal die neueste Version von RichEdit.pbi geladen, obwohl ich die meines Wissens schon hatte. Gleicher Fehler! Immer wieder einfach nachvollziehbar! Was nicht stimmte war die Aussage mit dem Springen 2 Zeilen hinter den letzten Text. Richtig ist, dass der Cursor immer an die Stelle springt, wo zuletzt der Focus verloren wurde. Das ändert aber nichts an der Tatsache, dass da offensichtlich ein Fehler in deinem Modul ist. Ich bin aber wohl leider zu blöd, den zu finden. Deshalb habe ich ja gehofft, dass du helfen kannst. Na ja, wer nicht will, den soll man nicht weiter bedrängen. Trotzdem Danke.

Gruß
Uli
PureBasic 5.31 (x32, x64) Windows 7 SP1 (x64)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: RichEdit Funktionen (OOP): Jetzt mit ImageSupport

Beitrag von ts-soft »

Ich kann mir beim bestem Willen nicht vorstellen, was da für ein Fehler in meinem Modul sein sollte? Ich ändere nichts am Fokus
und überlasse alles dem Control (RichEdit).

Peter (Kiffi) kann das Problem auch nicht nachvollziehen, somit kann ich da erstmal nichts machen. Vielleicht ein fehlerhaftes
Hintergrundprogramm auf Deinem PC? Z.B. für Dualscreen oder ähnlich?

Vielleicht meldet sich ja noch jemand mit demselben Problem.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten