erledigt- wie im Forum üblich, geht das? BBCode EditorGadget
erledigt- wie im Forum üblich, geht das? BBCode EditorGadget
ist es möglich für ein EditorGadget folgendes zu realisieren?
wie auch in einem Forum üblich, dass man einen markierten Text mit [u] und [/u] umschließt?
Beispiel:
"Dieser Beitrag soll helfen das Problem zu lösen."
im Forum üblich, markiere ich den Text und klicke oben auf "u"
heraus soll kommen:
"Dieser Beitrag [u]soll helfen[/u] das Problem zu lösen."
Ich möchte nicht, das der Text dann unterstrichen wird, sondern die BB-Tags den markierten Text im Endergebnis umschließen.
ich erstell einen Button "[u]". Nun markiere ich im EditorGadget, Text, und dieser markierte Text soll nun am Anfang eingefügt bekommen:
"[u]" und am Ende der Markierung "[/u]"
Es muss also der markierte Bereich erkannt werden und per klick auf den erstellten Button in die Tags gesetzt werden.
Ansatz Hilfen?
Vielen Dank
wie auch in einem Forum üblich, dass man einen markierten Text mit [u] und [/u] umschließt?
Beispiel:
"Dieser Beitrag soll helfen das Problem zu lösen."
im Forum üblich, markiere ich den Text und klicke oben auf "u"
heraus soll kommen:
"Dieser Beitrag [u]soll helfen[/u] das Problem zu lösen."
Ich möchte nicht, das der Text dann unterstrichen wird, sondern die BB-Tags den markierten Text im Endergebnis umschließen.
ich erstell einen Button "[u]". Nun markiere ich im EditorGadget, Text, und dieser markierte Text soll nun am Anfang eingefügt bekommen:
"[u]" und am Ende der Markierung "[/u]"
Es muss also der markierte Bereich erkannt werden und per klick auf den erstellten Button in die Tags gesetzt werden.
Ansatz Hilfen?
Vielen Dank
Zuletzt geändert von udg am 08.07.2015 07:22, insgesamt 3-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
- thinkitsimple
- Beiträge: 16
- Registriert: 25.05.2012 15:14
- Wohnort: Berlin, Germany
- Kontaktdaten:
Re: Frage- wie im Forum üblich, geht das?
Du kannst doch den String selbst zusammensetzen, etwa so:
Code: Alles auswählen
neuerString.s = chr(91) + "u" + chr(93) + markierterText.s + chr(91) + chr(92) "u" + chr(93)
Michael
PureBasic 5.60, Windows und macOS
PureBasic 5.60, Windows und macOS
Re: Frage- wie im Forum üblich, geht das?
Aus diesen zwei Funktionen
müßtest Du Dir was basteln können. Den Text der Auswahl mit #EM_GETSEL holen, die Textteile davor und dahinter einfügen und den neuen Text mit #EM_REPLACESEL an Stelle der Auswahl setzen.
Code: Alles auswählen
Procedure InsertGadgetText(gID.l, text.s) ;Text bei Cursor in StringGadget einfügen
SendMessage_(GadgetID(gID), #EM_REPLACESEL, #True, @text)
EndProcedure
Procedure.s GetSelGadgetText(gID.l) ;Text aus Markierung von StringGadget kopieren
text.s = GetGadgetText(gID) ;Buffer reservieren
SendMessage_(GadgetID(gID), #EM_GETSEL, @cstart.l, @cende.l)
text = Mid(text, cstart + 1, cende - cstart)
ProcedureReturn text
EndProcedure
Re: Frage- wie im Forum üblich, geht das?
Danke euch beiden. Ich werde das eben mal testen.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Re: Frage- wie im Forum üblich, geht das?
Es spricht natürlich nichts dagegen, das gleich so zu schreiben:thinkitsimple hat geschrieben:Code: Alles auswählen
neuerString.s = chr(91) + "u" + chr(93) + markierterText.s + chr(91) + chr(92) "u" + chr(93)
Code: Alles auswählen
neuerString.s = "[u]" + markierterText.s + "[/u]"
Code: Alles auswählen
#in_u$ = "[u]" : #out_u$ = "[/u]"
#in_b$ = "[b]" : #out_b$ = "[/b]"
...
neuerString.s = #in_u$ + markierterText.s + #out_u$
Re: Frage- wie im Forum üblich, geht das?
So, erstmal ein Gerüst gebaut:
jetzt muss ich den BB Code noch integrieren.
Code: Alles auswählen
EnableExplicit
Enumeration
#Window_0
EndEnumeration
Enumeration
#Editor_Info
#btnPaste
#btnBBCode
EndEnumeration
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
OpenWindow(#Window_0, 0, 0, 600, 400, "", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
;Editor Gadget
EditorGadget(#Editor_Info, 20, 70, 560, 180,#PB_Editor_WordWrap)
ButtonGadget(#btnPaste, 120, 10, 140, 30, "füge Text aus clipboard ein")
ButtonGadget(#btnBBCode, 20, 10, 85, 30, "[u][/u]")
;MAIN
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #btnPaste
SendMessage_(GadgetID(#Editor_Info),#WM_PASTE,0,0)
Case #btnBBCode
If EventGadget()= #btnBBCode
;bb Code
EndIf
EndSelect
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Window_0
CloseWindow(#Window_0)
Break
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow
End
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Re: Frage- wie im Forum üblich, geht das?
was bedeutet dies hier: gID.l
wo gibt es infos dazu?
aus der Prozedur:
Procedure InsertGadgetText(gID.l, text.s) ;Text bei Cursor in StringGadget einfügen
SendMessage_(GadgetID(#hier_mein_editorGadget), #EM_REPLACESEL, #True, @text)
EndProcedure
Im Moment fügt es nichts ein sondern löscht das markierte wenn ich auf meinen Button klicke.
wo gibt es infos dazu?
aus der Prozedur:
Procedure InsertGadgetText(gID.l, text.s) ;Text bei Cursor in StringGadget einfügen
SendMessage_(GadgetID(#hier_mein_editorGadget), #EM_REPLACESEL, #True, @text)
EndProcedure
Im Moment fügt es nichts ein sondern löscht das markierte wenn ich auf meinen Button klicke.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Re: Frage- wie im Forum üblich, geht das?
Das ist die Gadget-ID, die wird hier mit übergeben, damit die Funktion universell auf verschiedene Gadgets anwendbar ist. Das wäre bei Dir #Editor_Info.udg hat geschrieben:was bedeutet dies hier: gID.l
Du mußt unterscheiden:
#Editor_Info ist die PB-eigene ID, anhand der PB das Gadget erkennt.
SendMessage_ möchte aber die Windows-eigene ID, die Windows einmalig vergibt. Die bekommst Du mit GadgetID(#Editor_Info) für genau dieses Gadget oder GadgetID(gID) für das übergebene Gadget in meiner Funktion.
Es empfiehlt sich, in Prozeduren keine festen IDs zu verwenden, sondern diese als Variablen zu übergeben, um die Prozedur universell einsetzen zu können.
Re: Frage- wie im Forum üblich, geht das?
Ungetestet, aber so sollte es gehen:
Code: Alles auswählen
#in_u$ = "[u]" : #out_u$ = "[/u]"
Procedure InsertBrackets(gID.l, intxt.s, outtxt.s)
Protected text.s, cstart.l, cende.l
text = GetGadgetText(gID) ;Text aus Gadget holen
SendMessage_(GadgetID(gID), #EM_GETSEL, @cstart, @cende) ;Anfang und Ende der Markierung holen
text = Mid(text, cstart + 1, cende - cstart) ;Text zwischen Anfang und Ende ausschneiden
text = intxt + text + outtext ;Brackets um Text setzen
SendMessage_(GadgetID(gID), #EM_REPLACESEL, #True, @text) ;Text an Markierung einfügen
EndProcedure
InsertBrackets(#Editor_Info, #in_u$, #out_u$)
Re: Frage- wie im Forum üblich, geht das?
Danke für die super Erklärung.
Wieder etwas dazugelernt. Die Hilfe hat mir nichts darüber ausgegeben.
einen Schreibfehler noch schnell gefixd und so gehts nun:
text = intxt + text + outtxt ;Brackets um Text setzen

FIXED VERSION LETZTE SEITE
Ergebnis:
Dickes Danke.

Wieder etwas dazugelernt. Die Hilfe hat mir nichts darüber ausgegeben.
Sven hat geschrieben:Ungetestet, aber so sollte es gehen:Code: Alles auswählen
#in_u$ = "[u]" : #out_u$ = "[/u]" Procedure InsertBrackets(gID.l, intxt.s, outtxt.s) Protected text.s, cstart.l, cende.l text = GetGadgetText(gID) ;Text aus Gadget holen SendMessage_(GadgetID(gID), #EM_GETSEL, @cstart, @cende) ;Anfang und Ende der Markierung holen text = Mid(text, cstart + 1, cende - cstart) ;Text zwischen Anfang und Ende ausschneiden text = intxt + text + outtext ;Brackets um Text setzen SendMessage_(GadgetID(gID), #EM_REPLACESEL, #True, @text) ;Text an Markierung einfügen EndProcedure InsertBrackets(#Editor_Info, #in_u$, #out_u$)
einen Schreibfehler noch schnell gefixd und so gehts nun:
Code: Alles auswählen
#in_u$ = "[u]" : #out_u$ = "[/u]"
Procedure InsertBrackets(gID.l, intxt.s, outtxt.s)
Protected text.s, cstart.l, cende.l
text = GetGadgetText(gID) ;Text aus Gadget holen
SendMessage_(GadgetID(gID), #EM_GETSEL, @cstart, @cende) ;Anfang und Ende der Markierung holen
text = Mid(text, cstart + 1, cende - cstart) ;Text zwischen Anfang und Ende ausschneiden
Code: Alles auswählen
SendMessage_(GadgetID(gID), #EM_REPLACESEL, #True, @text) ;Text an Markierung einfügen
EndProcedure
...
InsertBrackets(#Editor_Info, #in_u$, #out_u$)[/color]

FIXED VERSION LETZTE SEITE
Ergebnis:
Code: Alles auswählen
EnableExplicit
Enumeration
#Window_0
EndEnumeration
Enumeration
#Editor_Info
#btnPaste
#btnBBCode
EndEnumeration
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
#in_u$ = "[u]" : #out_u$ = "[/u]"
Procedure InsertBrackets(gID.i, intxt.s, outtxt.s)
Protected text.s, cstart.l, cende.l
text = GetGadgetText(gID) ;Text aus Gadget holen
SendMessage_(GadgetID(gID), #EM_GETSEL, @cstart, @cende) ;Anfang und Ende der Markierung holen
text = Mid(text, cstart + 1, cende - cstart) ;Text zwischen Anfang und Ende ausschneiden
text = intxt + text + outtxt ;Brackets um Text setzen
SendMessage_(GadgetID(gID), #EM_REPLACESEL, #True, @text) ;Text an Markierung einfügen
EndProcedure
OpenWindow(#Window_0, 0, 0, 600, 400, "BB Code in EditorGadget", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
;Editor Gadget
EditorGadget(#Editor_Info, 20, 70, 560, 180,#PB_Editor_WordWrap)
ButtonGadget(#btnPaste, 120, 10, 140, 30, "füge Text aus clipboard ein")
ButtonGadget(#btnBBCode, 20, 10, 85, 30, "[u][/u]")
;MAIN
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #btnPaste
SendMessage_(GadgetID(#Editor_Info),#WM_PASTE,0,0)
Case #btnBBCode
InsertBrackets(#Editor_Info, #in_u$, #out_u$)
EndSelect
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Window_0
CloseWindow(#Window_0)
Break
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow
End
Dickes Danke.
Zuletzt geändert von udg am 08.07.2015 07:22, insgesamt 2-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS