erledigt- wie im Forum üblich, geht das? BBCode EditorGadget
- HeX0R
- Beiträge: 3040
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: Erledigt- wie im Forum üblich, geht das? BBCode EditorGa
Nimm integer (.i) und nicht long (.l)!
Spätestens, wenn Du x64 kompiliert und #PB_Any zur Gadgeterstellung nutzt, könnte es sonst zu merkwürdigen Effekten kommen.
Spätestens, wenn Du x64 kompiliert und #PB_Any zur Gadgeterstellung nutzt, könnte es sonst zu merkwürdigen Effekten kommen.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
Re: Erledigt- wie im Forum üblich, geht das? BBCode EditorGa
Danke, habe es geändert.
aber ich habe folgendes Problem entdeckt , dass mir auf die Schnelle nicht auffiehl:
Wenn ich längeren Text benutze und einen späteren Abschnitt in BB tags setzen will, werden am letzten Wort Buchstaben weggeschnitten
---------
Beispiel:
... Welt verliebte sich in dieses rehäugige, unerfahrene, immer etwas schüchtern wirkende Mädchen. Gleich für ihre erste Hauptrolle wurde die Schauspielerin 1954 mit einen Oscar ausgezeichnet und war fortan ein Star.
[u]
Doch Hepburn wurde nic[/u] <--- hier wird vom WORT "nicht" das "ht" weggeschnitten.
nur eine bekannte Schauspielerin - ...
------------------------
wie kann ich das lösen?
je länger der Text um so ungenauer wird das korrekte Umschließen.
aber ich habe folgendes Problem entdeckt , dass mir auf die Schnelle nicht auffiehl:
Wenn ich längeren Text benutze und einen späteren Abschnitt in BB tags setzen will, werden am letzten Wort Buchstaben weggeschnitten

---------
Beispiel:
... Welt verliebte sich in dieses rehäugige, unerfahrene, immer etwas schüchtern wirkende Mädchen. Gleich für ihre erste Hauptrolle wurde die Schauspielerin 1954 mit einen Oscar ausgezeichnet und war fortan ein Star.
[u]
Doch Hepburn wurde nic[/u] <--- hier wird vom WORT "nicht" das "ht" weggeschnitten.
nur eine bekannte Schauspielerin - ...
------------------------
wie kann ich das lösen?
je länger der Text um so ungenauer wird das korrekte Umschließen.
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: Erledigt- wie im Forum üblich, geht das? BBCode EditorGa
genauer gesagt: Je mehr Zeilenumbrüche, desto ungenauer. Die werden meiner Erfahrung nach mit EM_GETSEL nicht mitgezählt. Diese Zeichen musst Du separat berechnen und auf Dein cende addieren.udg hat geschrieben:je länger der Text um so ungenauer wird das korrekte Umschließen.
Grüße ... Peter
a²+b²=mc²
Re: noch BUG- wie im Forum üblich, geht das? BBCode EditorGa
Code: Alles auswählen
text = Mid(text, cstart + 1, cende - cstart) ;Text zwischen Anfang und Ende ausschneiden
ich selektiere zb. im weiteren Text nur 3 Wörter. Dort ist doch kein Zeilenumbruch vorhanden und
Code: Alles auswählen
SendMessage_(GadgetID(gID), #EM_GETSEL, @cstart, @cende) ;Anfang und Ende der Markierung holen
Sehe ich was falsch?
Code: Alles auswählen
cende
Code: Alles auswählen
cende + 5
Da gibts doch bestimmt eine ordentliche Lösung.
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: noch BUG- wie im Forum üblich, geht das? BBCode EditorGa
aber mit Sicherheit vor der Markierung.udg hat geschrieben:Dort ist doch kein Zeilenumbruch vorhanden
Grüße ... Peter
a²+b²=mc²
Re: noch BUG- wie im Forum üblich, geht das? BBCode EditorGa
ja vor der markierung sind 6 Zeilenumbrüche und diese 6 Zeichen werden dann weggelassen.Kiffi hat geschrieben:aber mit Sicherheit vor der Markierung.udg hat geschrieben:Dort ist doch kein Zeilenumbruch vorhanden
Grüße ... Peter
Worried. Gibt es noch eine andere Methode außer #EM_GETSEL ?
Für mich nur gerade unverständlich warum ich sage: "nehme nur den markierten Text" aber alles davor wird auch mit verarbeitet.
Gruß
Zuletzt geändert von udg am 08.07.2015 04:42, insgesamt 1-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
Re: noch BUG- wie im Forum üblich, geht das? BBCode EditorGa
Schau mal hier:
Original-Posting von Christi (ein wenig modifiziert und lauffähig gemacht):
Grüße ... Peter
Original-Posting von Christi (ein wenig modifiziert und lauffähig gemacht):
Code: Alles auswählen
OpenWindow(0, 0, 0, 200, 220, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
editorid = EditorGadget(0, 0, 0, 200, 200)
ButtonGadget(1, 50, 200, 100, 20, "Klick")
For z = 1 To 10
AddGadgetItem(0, -1, "zeile " + Space(z) + Str(z))
Next
Repeat
w_ereignis = WaitWindowEvent()
Select w_ereignis
Case #PB_Event_Gadget
If EventGadget() = 1
textlaenge = SendMessage_(editorid, #WM_GETTEXTLENGTH, 0, 0)
text = AllocateMemory(textlaenge)
SendMessage_(editorid, #WM_GETTEXT, textlaenge, text)
SendMessage_(editorid, #EM_GETSEL, @anfang, @ende)
anfang + SendMessage_(editorid, #EM_EXLINEFROMCHAR, 0, anfang)
ende + SendMessage_(editorid, #EM_EXLINEFROMCHAR, 0, ende)
SendMessage_(editorid, #EM_REPLACESEL, 0, ">" + PeekS(text + anfang, ende - anfang) + "<")
FreeMemory(text)
EndIf
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
a²+b²=mc²
Re: noch BUG- wie im Forum üblich, geht das? BBCode EditorGa
Danke für deine Version. Ich habe dies mal eingearbeitet.
PS:
bei deiner Version wird bei Zeile 10, am Schluss bei der 10 die "null" weggeschnitten. Da ist auch noch ein Bug
So, weiter im Text.
Hier mein Code:
funktioniert, wie vorher auch schon mit der Version von Sven - AAAber:
Ich konnte nun das Problem lokalisieren warum es nicht funktioniert wie gedacht.
Vorab: fügst Du in meine Version Langen Text ein und machst irgendwo unten eine Markierung und dann klick auf den [BBCode button], wirst Du sehen, dass wieder etwas weggeschnitten wird. (wer gerade keinen längeren Text zur Hand hat, hier ein Online "Lorem Ipsum" Generator: http://www.blindtextgenerator.com/lorem-ipsum)
Schuld ist in der Zeile:editorid = EditorGadget(#Editor_Info, ... das #PB_Editor_WordWrap am Ende.
nimmst Du: #PB_Editor_WordWrap raus, funktioniert es.
Nun will ich aber nicht, dass der lange Text bis 1 Meter nach rechts geht (als Beispiel) sondern es soll schon am Rand des EditorGadgets umgebrochen werden.
Wie kann man das nun wieder lösen???
Das ist ja zum Mäuse melken.
Grüße aus der Ver2flungs Ecke
PS:
bei deiner Version wird bei Zeile 10, am Schluss bei der 10 die "null" weggeschnitten. Da ist auch noch ein Bug
So, weiter im Text.
Hier mein Code:
Code: Alles auswählen
EnableExplicit
Enumeration
#Window_0
EndEnumeration
Enumeration
#Editor_Info
#btnPaste
#btnBBCode
#btnClearText
EndEnumeration
Define.l Event, EventWindow, EventGadget, EventType, EventMenu, editorid, textlaenge, text, start, ende
OpenWindow(#Window_0, 0, 0, 600, 400, "BB Code in EditorGadget", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
;Editor Gadget
editorid = EditorGadget(#Editor_Info, 20, 70, 560, 280, #PB_Editor_WordWrap)
;Buttons
ButtonGadget(#btnBBCode, 20, 10, 85, 30, "[u][/u]")
ButtonGadget(#btnPaste, 120, 10, 140, 30, "füge Text aus clipboard ein")
ButtonGadget(#btnClearText, 275, 10, 100, 30, "lösche Text")
;MAIN
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #btnPaste
SendMessage_(GadgetID(#Editor_Info),#WM_PASTE,0,0)
Case #btnClearText
SetGadgetText(#Editor_Info,"")
Case #btnBBCode
textlaenge = SendMessage_(editorid, #WM_GETTEXTLENGTH, 0, 0)
text = AllocateMemory(textlaenge)
SendMessage_(editorid, #WM_GETTEXT, textlaenge, text)
SendMessage_(editorid, #EM_GETSEL, @start, @ende)
start + SendMessage_(editorid, #EM_EXLINEFROMCHAR, 0, start)
ende + SendMessage_(editorid, #EM_EXLINEFROMCHAR, 0, ende)
SendMessage_(editorid, #EM_REPLACESEL, 0, "[u]" + PeekS(text + start, ende - start) + "[/u]")
FreeMemory(text)
EndSelect
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Window_0
CloseWindow(#Window_0)
ClearClipboard()
Break
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow
End
Ich konnte nun das Problem lokalisieren warum es nicht funktioniert wie gedacht.
Vorab: fügst Du in meine Version Langen Text ein und machst irgendwo unten eine Markierung und dann klick auf den [BBCode button], wirst Du sehen, dass wieder etwas weggeschnitten wird. (wer gerade keinen längeren Text zur Hand hat, hier ein Online "Lorem Ipsum" Generator: http://www.blindtextgenerator.com/lorem-ipsum)
Schuld ist in der Zeile:editorid = EditorGadget(#Editor_Info, ... das #PB_Editor_WordWrap am Ende.
nimmst Du: #PB_Editor_WordWrap raus, funktioniert es.

Nun will ich aber nicht, dass der lange Text bis 1 Meter nach rechts geht (als Beispiel) sondern es soll schon am Rand des EditorGadgets umgebrochen werden.
Wie kann man das nun wieder lösen???
Das ist ja zum Mäuse melken.

Grüße aus der Ver2flungs Ecke
Zuletzt geändert von udg am 08.07.2015 04:54, insgesamt 1-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
Re: noch BUG- wie im Forum üblich, geht das? BBCode EditorGa
Wir wäre es so? Finde ich auch etwas elegantger, einfach die Tags an die entsprechenden Stellen zu schreiben
Damit sollten auch keine Probleme durch Zeilenumbrüchen auftreten da setsel und getsel gleich arbeiten und nichts anderes benutzt wird zur Positionsbestimmung.
Code: Alles auswählen
EnableExplicit
Define.i ev, start, ende, editorID
OpenWindow(0, 0, 0, 300, 300, "Einfügen", #PB_Window_SystemMenu)
EditorGadget(1, 5, 35, 290, 255)
editorID = GadgetID(1)
ButtonGadget(2, 5, 5, 45,20,"Unterstreichen")
Repeat
ev = WaitWindowEvent()
If (ev = #PB_Event_Gadget And EventGadget() = 2)
SendMessage_(editorID, #EM_GETSEL, @start, @ende)
SendMessage_(editorID, #EM_SETSEL, ende , ende)
SendMessage_(editorID, #EM_REPLACESEL, 0, "[/u]")
SendMessage_(editorID, #EM_SETSEL, start, start)
SendMessage_(editorID, #EM_REPLACESEL, 0, "[u]")
SendMessage_(editorID, #EM_SETSEL, start, ende + 7) ; Nur nötig, falls Selektion bestehen bleiben soll
EndIf
Until ev = #PB_Event_CloseWindow
Re: noch BUG- wie im Forum üblich, geht das? BBCode EditorGa
Ligatur! mein Held. So funktioniert es . Kann keine Fehler finden.
CODE: FINAL VERSION

CODE: FINAL VERSION
Code: Alles auswählen
EnableExplicit
Enumeration
#Window_0
EndEnumeration
Enumeration
#Editor_Info
#btnPaste
#btnBBCode
#btnClearText
EndEnumeration
Define.l Event, EventWindow, EventGadget, EventType, EventMenu, editorid, textlaenge, text, start, ende
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, 280, #PB_Editor_WordWrap)
editorID = GadgetID(#Editor_Info)
;Buttons
ButtonGadget(#btnBBCode, 20, 10, 85, 30, "[u][/u]")
ButtonGadget(#btnPaste, 120, 10, 140, 30, "füge Text aus clipboard ein")
ButtonGadget(#btnClearText, 275, 10, 100, 30, "lösche Text")
;MAIN
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #btnPaste
SendMessage_(GadgetID(#Editor_Info),#WM_PASTE,0,0)
Case #btnClearText
SetGadgetText(#Editor_Info,"")
Case #btnBBCode
SendMessage_(editorID, #EM_GETSEL, @start, @ende)
SendMessage_(editorID, #EM_SETSEL, ende , ende)
SendMessage_(editorID, #EM_REPLACESEL, 0, "[/u]")
SendMessage_(editorID, #EM_SETSEL, start, start)
SendMessage_(editorID, #EM_REPLACESEL, 0, "[u]")
SendMessage_(editorID, #EM_SETSEL, start, ende + 7) ; Nur nötig, falls Selektion bestehen bleiben soll
EndSelect
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Window_0
CloseWindow(#Window_0)
ClearClipboard()
Break
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow
End
Zuletzt geändert von udg am 08.07.2015 16:30, 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