RTF-Texte mit #PB_Editor_RTF kopieren
Hallo Edel!
Die 4.0 Demo-Version sagt mir beim Öffnen unter Andrem :"no Win32 Api support".
Dein Code erzeugt bei mir
Error:
PureBasic.sam[71]
extrn_SendMessageA@16
error: symbol already defined.
Bin leider kein Experte um dazu was zu sagen.
Vielleicht hast du zu meiner Anfrage von eben eine Lösung:
http://www.purebasic.fr/german/viewtopic.php?t=9603
Die 4.0 Demo-Version sagt mir beim Öffnen unter Andrem :"no Win32 Api support".
Dein Code erzeugt bei mir
Error:
PureBasic.sam[71]
extrn_SendMessageA@16
error: symbol already defined.
Bin leider kein Experte um dazu was zu sagen.
Vielleicht hast du zu meiner Anfrage von eben eine Lösung:
http://www.purebasic.fr/german/viewtopic.php?t=9603
Viele Grüße aus dem Sauerland
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world

So sollte es aber gehen :
Code: Alles auswählen
Prototype SendMessage(hwnd,msg,wparam,lparam)
OpenLibrary(0,"User32.dll")
SendMessage_.SendMessage = GetFunction(0,"SendMessageA")
;SendMessage_.SendMessage = GetFunction(0,"SendMessageW") ; unicode
#WM_CLOSE = 16
#WM_SETTEXT = 12
hwnd = OpenWindow(0,0,0,400,400,"")
CreateGadgetList(hwnd)
Handle = EditorGadget(0,0,0,400,400)
SendMessage_(Handle,#WM_SETTEXT,0,@"Hallo")
Repeat
Event = WaitWindowEvent()
Until Event = #WM_CLOSE
Klasse! Es geht!
Mit SendMessage_.SendMessage = GetFunction(0,"SendMessageA")
bekomme ich "Hallo"
und mit SendMessage_.SendMessage = GetFunction(0,"SendMessageW")
bekomme ich
"??o?", was Hallo in Unicode sein dürfte
Wo erfahre ich nun, was da passiert? In der Hilfe steht nichts über "Sendmessage" und SendMessageW.
Kann ich das nutzen für meine folgende Aufgabe:
http://www.purebasic.fr/german/viewtopic.php?t=9603
Ich hoffe, es gibt eine Lösung, das wäre super!!!!

Mit SendMessage_.SendMessage = GetFunction(0,"SendMessageA")
bekomme ich "Hallo"
und mit SendMessage_.SendMessage = GetFunction(0,"SendMessageW")
bekomme ich
"??o?", was Hallo in Unicode sein dürfte

Wo erfahre ich nun, was da passiert? In der Hilfe steht nichts über "Sendmessage" und SendMessageW.
Kann ich das nutzen für meine folgende Aufgabe:
http://www.purebasic.fr/german/viewtopic.php?t=9603
Ich hoffe, es gibt eine Lösung, das wäre super!!!!
Viele Grüße aus dem Sauerland
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world

- 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
Für API ist die Dokumentation von Microsoft zuständig. Win32.hlp oder besser PSDK installieren. Online in MSDN stöbern geht auch, zu RichEdit:
http://msdn.microsoft.com/library/defau ... ntrols.asp
Als Anfänger und mit der Demo ist das ganze aber nicht so einfach. Einfach
mal die vorhandenen Codesnippets im CodeArchiv, den Foren usw. anpassen, testen usw.
http://msdn.microsoft.com/library/defau ... ntrols.asp
Als Anfänger und mit der Demo ist das ganze aber nicht so einfach. Einfach
mal die vorhandenen Codesnippets im CodeArchiv, den Foren usw. anpassen, testen usw.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- 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
Hier nochmal eine Lösung von edel !!!
Bei grösseren Texten wird StreamOut mehrmals aufgerufen.
PS: funktioniert nur ohne Unicode-Compilerdirektive, das liegt aber am nativ eingefügtem Text, dessen Syntax angepaßt werden müßte
Code: Alles auswählen
Prototype SendMessage(hwnd,msg,wParam,lParam)
OpenLibrary(0,"User32.dll")
Global SendMessage_.SendMessage = GetFunction(0,"SendMessageA")
;PB4
; ************* Variables *************
Fensterueberschrift$ = "Unicode-Test"
Button_1 = 20 ; Button-ID
Global FontID1
FontID1 = LoadFont(1, "Courier", 10) ; Font für die Darstellung
;RTF- Test
text$="{\rtf1\fbidis\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fmodern\fprq1\fcharset0 Courier New;}{\f1\fswiss\fprq2\fcharset0 Arial;}}"
text$=text$ + "{\colortbl ;\red0\green0\blue0;}"
text$=text$ + "\viewkind4\uc1\pard\ltrpar\cf1\f0\fs20 Unicode: \u264?\u284?\u292?\u308?\u348?\u364?\u265?\u285?\u293?\u309?\u349?\u365?\cf0\f1\par "
text$=text$ + "}"
#WM_SETTEXT = 12
#SF_RTF = 2
#EM_STREAMOUT = 1098
CompilerIf Defined(EDITSTREAM,#PB_Structure) = 0
Structure EDITSTREAM
dwCookie.l
dwError.l
pfnCallback.l
EndStructure
CompilerEndIf
; ************* Mainprogram *************
Procedure StreamOut(dwCookie,pbBuff,cb,*pcb)
SetGadgetText(dwCookie,PeekS(pbBuff))
EndProcedure
If OpenWindow(0, 1, 1, 800, 350, Fensterueberschrift$, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
SetWindowColor(0,RGB(100, 150, 100))
CreateGadgetList(WindowID(0))
EditorGadget(1, 20, 50, 650, 110) ;#PB_Editor_ReadOnly
SetGadgetFont(1, FontID1)
EditorGadget(2, 20, 160, 650, 110);#PB_Editor_ReadOnly
SetGadgetFont(2, FontID1)
ButtonGadget(Button_1, 650+25, 130, 100, 20, "Copy")
SetGadgetText(1, text$)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case Button_1
Stream.EDITSTREAM
Stream\dwCookie = 2
Stream\pfnCallback = @StreamOut()
SendMessage_(GadgetID(1), #EM_STREAMOUT, #SF_RTF, @Stream)
EndSelect
EndSelect
ForEver
EndIf ; Open Window
End
PS: funktioniert nur ohne Unicode-Compilerdirektive, das liegt aber am nativ eingefügtem Text, dessen Syntax angepaßt werden müßte
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Hurra! Danke an Edel und ts-soft! Ich bin begeistert!
In msdn usw. müsste ich mich erst mal einlesen. Für den Anfang reichen mir aber einige Erklärungen, den Rest kann ich ja ausprobieren.
Wieso heißt es SendMessage_(GadgetID(1)..
Wo kommt das GadgetID(1) her, bzw. wieso heißt es 1?
Wenn ich ein Debug Stream einfüge:
so bekomme ich 4319844, egal was im EditorGadget für ein Text steht. Ist das eine Adresse?
Die wichtige Frage zum Schluss: Kann ich die Buchstaben oder den String oder RTF-Code irgendwie einzel auslesen?
Ich muss ja z.B. das Wort alpuŝiĝi umwandeln in alpu^si^gi.



In msdn usw. müsste ich mich erst mal einlesen. Für den Anfang reichen mir aber einige Erklärungen, den Rest kann ich ja ausprobieren.
Wieso heißt es SendMessage_(GadgetID(1)..
Wo kommt das GadgetID(1) her, bzw. wieso heißt es 1?
Wenn ich ein Debug Stream einfüge:
Code: Alles auswählen
Stream.EDITSTREAM
Stream\dwCookie = 2
Stream\pfnCallback = @StreamOut()
SendMessage_(GadgetID(1), #EM_STREAMOUT, #SF_RTF, @Stream)
Debug Stream
so bekomme ich 4319844, egal was im EditorGadget für ein Text steht. Ist das eine Adresse?
Die wichtige Frage zum Schluss: Kann ich die Buchstaben oder den String oder RTF-Code irgendwie einzel auslesen?
Ich muss ja z.B. das Wort alpuŝiĝi umwandeln in alpu^si^gi.
Viele Grüße aus dem Sauerland
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world

- 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
Weil das EditorGadget die PB-Interne Nummer 1 hat, die Windows-API benötigt aber das Handle, hWnd, welches mit GadgetID(Gadget) ermittelt wirdEckhard.S hat geschrieben:Hurra! Danke an Edel und ts-soft! Ich bin begeistert!![]()
![]()
![]()
In msdn usw. müsste ich mich erst mal einlesen. Für den Anfang reichen mir aber einige Erklärungen, den Rest kann ich ja ausprobieren.
Wieso heißt es SendMessage_(GadgetID(1)..
Wo kommt das GadgetID(1) her, bzw. wieso heißt es 1?
Das ist die Adresse der structurierten Variable Stream.Eckhard.S hat geschrieben:
Wenn ich ein Debug Stream einfüge:Code: Alles auswählen
Stream.EDITSTREAM Stream\dwCookie = 2 Stream\pfnCallback = @StreamOut() SendMessage_(GadgetID(1), #EM_STREAMOUT, #SF_RTF, @Stream) Debug Stream
so bekomme ich 4319844, egal was im EditorGadget für ein Text steht. Ist das eine Adresse?
Schau ins CodeArchiv und schlage in der API hilfe nach. Anders wirste nicht vorwärts kommen, weil das viel zuviel ist, um es in einen Forum-Beitrag zu posten. Ich muß auch nachschlagen, auswendig weiß ich oder jemand anders es normallerweise auch nichtEckhard.S hat geschrieben:
Die wichtige Frage zum Schluss: Kann ich die Buchstaben oder den String oder RTF-Code irgendwie einzel auslesen?
Ich muss ja z.B. das Wort alpuŝiĝi umwandeln in alpu^si^gi.

Grundkenntnisse über Structuren und ähnlichem sind in jedemfall erforderlich, so das es vielleicht erstmal ratsamer wäre, sich mit den grundfunktionen in PB zu beschäftigen. Ohne diese Kenntnisse wirste da sonst nicht weiterkommen.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- 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
Hier mal ein paar "alte", von mir zusammengestellte Editor-Prozeduren.
Für PB4 sind evtl. Anpassungen erforderlich. Für die Demo-Version wohl
auch, bzw. sind evtl. auch noch Structuren zu definieren.
http://ts-soft.eu/dl/EditorGadgetPlus.pb
Für PB4 sind evtl. Anpassungen erforderlich. Für die Demo-Version wohl
auch, bzw. sind evtl. auch noch Structuren zu definieren.
http://ts-soft.eu/dl/EditorGadgetPlus.pb
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Hurra! Hurra! Hurra! Danke! Ich bin fündig geworden. Zur Info: Der RTF-Code steckt in PeekS(pbBuff).
Hier die Erweiterung:
Letzte Frage: Kann man die folgende Abteilung wie in PHP in einem Befehl machen (ersetze Array1-Elemente durch Array2-Elemente)?
Hier die Erweiterung:
Code: Alles auswählen
Prototype SendMessage(hwnd,msg,wParam,lParam)
OpenLibrary(0,"User32.dll")
Global SendMessage_.SendMessage = GetFunction(0,"SendMessageA")
;PB4
; ************* Variables *************
Global a$
Fensterueberschrift$ = "Unicode-Test"
Button_1 = 20 ; Button-ID
Global FontID1
FontID1 = LoadFont(1, "Courier", 10) ; Font für die Darstellung
;RTF- Test
text$="{\rtf1\fbidis\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fmodern\fprq1\fcharset0 Courier New;}{\f1\fswiss\fprq2\fcharset0 Arial;}}"
text$=text$ + "{\colortbl ;\red0\green0\blue0;}"
text$=text$ + "\viewkind4\uc1\pard\ltrpar\cf1\f0\fs20 Unicode: \u264?\u284?\u292?\u308?\u348?\u364?\u265?\u285?\u293?\u309?\u349?\u365?\cf0\f1\par "
text$=text$ + "}"
#WM_SETTEXT = 12
#SF_RTF = 2
#EM_STREAMOUT = 1098
CompilerIf Defined(EDITSTREAM,#PB_Structure) = 0
Structure EDITSTREAM
dwCookie.l
dwError.l
pfnCallback.l
EndStructure
CompilerEndIf
; ************* Mainprogram *************
Procedure StreamOut(dwCookie,pbBuff,cb,*pcb)
SetGadgetText(dwCookie,PeekS(pbBuff))
A$ = PeekS(pbBuff)
EndProcedure
If OpenWindow(0, 1, 1, 800, 350, Fensterueberschrift$, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
SetWindowColor(0,RGB(100, 150, 100))
CreateGadgetList(WindowID(0))
EditorGadget(1, 20, 50, 650, 110) ;#PB_Editor_ReadOnly
SetGadgetFont(1, FontID1)
EditorGadget(2, 20, 160, 650, 110);#PB_Editor_ReadOnly
SetGadgetFont(2, FontID1)
ButtonGadget(Button_1, 650+25, 130, 100, 20, "Copy")
SetGadgetText(1, text$)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case Button_1
Stream.EDITSTREAM
Stream\dwCookie = 2
Stream\pfnCallback = @StreamOut()
SendMessage_(GadgetID(1), #EM_STREAMOUT, #SF_RTF, @Stream)
A$ = ReplaceString(A$, "\u264?", "^C")
A$ = ReplaceString(A$, "\u284?", "^G")
A$ = ReplaceString(A$, "\u292?", "^H")
A$ = ReplaceString(A$, "\u308?", "^J")
A$ = ReplaceString(A$, "\u348?", "^S")
A$ = ReplaceString(A$, "\u364?", "^U")
A$ = ReplaceString(A$, "\u265?", "^c")
A$ = ReplaceString(A$, "\u285?", "^g")
A$ = ReplaceString(A$, "\u293?", "^h")
A$ = ReplaceString(A$, "\u309?", "^j")
A$ = ReplaceString(A$, "\u349?", "^s")
A$ = ReplaceString(A$, "\u365?", "^u")
;Debug A$
SetGadgetText(2, A$)
EndSelect
EndSelect
ForEver
EndIf ; Open Window
End
Letzte Frage: Kann man die folgende Abteilung wie in PHP in einem Befehl machen (ersetze Array1-Elemente durch Array2-Elemente)?
Code: Alles auswählen
A$ = ReplaceString(A$, "\u264?", "^C")
A$ = ReplaceString(A$, "\u284?", "^G")
A$ = ReplaceString(A$, "\u292?", "^H")
A$ = ReplaceString(A$, "\u308?", "^J")
A$ = ReplaceString(A$, "\u348?", "^S")
A$ = ReplaceString(A$, "\u364?", "^U")
A$ = ReplaceString(A$, "\u265?", "^c")
A$ = ReplaceString(A$, "\u285?", "^g")
A$ = ReplaceString(A$, "\u293?", "^h")
A$ = ReplaceString(A$, "\u309?", "^j")
A$ = ReplaceString(A$, "\u349?", "^s")
A$ = ReplaceString(A$, "\u365?", "^u")
Viele Grüße aus dem Sauerland
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world

- 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
>> Zur Info: Der RTF-Code steckt in PeekS(pbBuff)
Aber nur das Teilstück, welches vom Callback gerade bearbeitet wird!
Bei diesem kurzen Text ist wohl alles enthalten, das muß aber nicht so sein.
Für dein Replacement fällt mir gerade nichts kürzeres ein, bzw. mir ist
sowieso nicht so ganz klar, was das ganze werden soll
Aber nur das Teilstück, welches vom Callback gerade bearbeitet wird!
Bei diesem kurzen Text ist wohl alles enthalten, das muß aber nicht so sein.
Für dein Replacement fällt mir gerade nichts kürzeres ein, bzw. mir ist
sowieso nicht so ganz klar, was das ganze werden soll

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
