Editor-Prog - Wie erzeugt diese "gestrichelten Linien"
Editor-Prog - Wie erzeugt diese "gestrichelten Linien"
Tachchen,
Sry für den Titel, wusste aber nichts besseres.
Hier die Komplette Frage:
Fast alle Editoren von verschiedenen Programmen haben ja bei verschiedenen Werkzeugen/Aktionen immer diese gestrichelten Linien die "über alles drüber schweben" und als Vorschau anzeigen wie es aussehen könnte, was man erstellt, und was sich auch mit Mausbewegungen ändert.
Ich habe leider keine Idee wie ich sowas machen könnte ...
Die Strichellinie an sich ist ja kein Problem, aber wie erzeuge ich sie in dieser imaginären Ebene über dem Editor ?
Eine lösung mit Screen oder Image auf denen diese Linie gezeichnet wird, fällt weg!
Es soll auch "zwischen" Gadget usw. sein, und ein Image dauernd zu aktuallisieren ist zu Ressourcen-fressend und ein Screen geht nicht, weil ich die Editorflächen in Fenstern eins MDIGadget liegen, es also mehrere geben muss.
Sry für den Titel, wusste aber nichts besseres.
Hier die Komplette Frage:
Fast alle Editoren von verschiedenen Programmen haben ja bei verschiedenen Werkzeugen/Aktionen immer diese gestrichelten Linien die "über alles drüber schweben" und als Vorschau anzeigen wie es aussehen könnte, was man erstellt, und was sich auch mit Mausbewegungen ändert.
Ich habe leider keine Idee wie ich sowas machen könnte ...
Die Strichellinie an sich ist ja kein Problem, aber wie erzeuge ich sie in dieser imaginären Ebene über dem Editor ?
Eine lösung mit Screen oder Image auf denen diese Linie gezeichnet wird, fällt weg!
Es soll auch "zwischen" Gadget usw. sein, und ein Image dauernd zu aktuallisieren ist zu Ressourcen-fressend und ein Screen geht nicht, weil ich die Editorflächen in Fenstern eins MDIGadget liegen, es also mehrere geben muss.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- NicTheQuick
- Ein Admin
- Beiträge: 8812
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Editor-Prog - Wie erzeugt diese "gestrichelten Linien"
Ich hab damals einfach DrawFocusRect_() benutzt.
Re: Editor-Prog - Wie erzeugt diese "gestrichelten Linien"
Beispielcode für diese API:NicTheQuick hat geschrieben:Ich hab damals einfach DrawFocusRect_() benutzt.
FGK hat geschrieben:Code: Alles auswählen
If OpenWindow(0, 100, 200, 640,480,"",#PB_Window_SystemMenu|#PB_Window_WindowCentered) hdc = GetDC_(WindowID(0)) SetRect_(R.RECT,20,20,620,440) DrawFocusRect_(hdc,R) Repeat DrawFocusRect_(hdc,R) Select Dir Case 0 R\top+2 R\bottom-2 R\left+2 R\right-2 If R\top>220 Dir =1 EndIf Case 1 R\top-2 R\bottom+2 R\left -2 R\right+2 If R\top<20 Dir =0 EndIf EndSelect DrawFocusRect_(hdc,R) If WindowEvent() = #PB_Event_CloseWindow ; If the user has pressed on the close button Quit = 1 EndIf Delay(10) Until Quit = 1 EndIf End
Re: Editor-Prog - Wie erzeugt diese "gestrichelten Linien"
Ich verstehe, es ist also doch ehr sowas wie:
Line machen, Pause, Line löschen, neue Line machen, Pause, neue Line Löschen
Das heißt es geht auch mit PB ... (hier mal auf die schnelle ohne gestrichel)
Ich dachte ja es gibt da noch "was besonderes" als das XOr-Prinzip.
Aber danke schon mal für den Link und das Beispiel, hat mir auf jedenfall geholfen
Line machen, Pause, Line löschen, neue Line machen, Pause, neue Line Löschen
Das heißt es geht auch mit PB ... (hier mal auf die schnelle ohne gestrichel)
Code: Alles auswählen
OpenWindow(0, 100, 200, 640,480,"",#PB_Window_SystemMenu|#PB_Window_WindowCentered)
Repeat
StartDrawing(WindowOutput(0))
DrawingMode(4|3)
Box(0,0,x,y)
StopDrawing()
y=WindowMouseY(0)
x=WindowMouseX(0)
StartDrawing(WindowOutput(0))
DrawingMode(4|3)
Box(0,0,x,y)
StopDrawing()
If WaitWindowEvent() = #PB_Event_CloseWindow ; If the user has pressed on the close button
End
EndIf
ForEver
Aber danke schon mal für den Link und das Beispiel, hat mir auf jedenfall geholfen
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Editor-Prog - Wie erzeugt diese "gestrichelten Linien"
meinst du einfach nur gestrichelt oder meinst du so eine animierte 'ameisenline' bei der die strichelchen um die fläche wandern?
>> Es soll auch "zwischen" Gadget usw. sein..
meinst du damit zwischen den z-order ebenen?
wieso fällt image weg? ich würde die linen aus kleinen images zusammensetzten und auf den WindowOutput zeichnen. dann sind sie auch ganz oben drauf.
>> Es soll auch "zwischen" Gadget usw. sein..
meinst du damit zwischen den z-order ebenen?
wieso fällt image weg? ich würde die linen aus kleinen images zusammensetzten und auf den WindowOutput zeichnen. dann sind sie auch ganz oben drauf.
Re: Editor-Prog - Wie erzeugt diese "gestrichelten Linien"
Wow, interessant. Sieht aus als wenn das Fenster lebt.RSBasic hat geschrieben:Beispielcode für diese API: ...
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Re: Editor-Prog - Wie erzeugt diese "gestrichelten Linien"
Die Art der Line ist erst mal unwichtig ...#NULL hat geschrieben:meinst du einfach nur gestrichelt oder meinst du so eine animierte 'ameisenline' bei der die strichelchen um die fläche wandern?
>> Es soll auch "zwischen" Gadget usw. sein..
meinst du damit zwischen den z-order ebenen?
wieso fällt image weg? ich würde die linen aus kleinen images zusammensetzten und auf den WindowOutput zeichnen. dann sind sie auch ganz oben drauf.
Es geht/ging darum, einfach nur n Line/Rahmen auf der Oberfläche (Gadgets+Window+Image) zu Zeichnen ohne das diese beim verschieben immer noch da bleibt, bzw rumflackert.
Da ja Oberflächen nicht mit jedem Frame aktuallisiert werden wie beim Screen, dachte ich da muss es eine andere Lösung geben.
Diese wurde mir ja nun gegeben, Stichwort: XOr-Zeichnen ...
wieso fällt image weg? ich würde die linen aus kleinen images zusammensetzten und auf den WindowOutput zeichnen. dann sind sie auch ganz oben drauf.
Diese würde doch dann aber dort oben drauf "liegen" bleiben, bis der Untergrund aktuallisiert wird, oder was fenster verschoben...
Mit auf Image Zeichnen fällt weg meinte ich: das ich bei jeder Bewegung das gesamte Image (eigentliche Grafiken+Line) neu zeichne -> Ressourcenfressend ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Editor-Prog - Wie erzeugt diese "gestrichelten Linien"
xor scheint aber so ohne weiteres nicht auszureichen. mit gadgets im hintergrund entstehen linien-reste, weil sich durch mouseover die gadgetfarben ändern (besonders sichtbar mit xp-skin enabled).
wenn du es hinkriegst würde mich auf jedenfall die lösung interessieren 
Code: Alles auswählen
OpenWindow(0, 100, 200, 640,480,"",#PB_Window_SystemMenu|#PB_Window_WindowCentered)
For i=0 To 20
For k=0 To 20
ButtonGadget(#PB_Any,10+i*30,10+k*20,25,15,"..")
Next
Next
mode | #PB_2DDrawing_Outlined
mode | #PB_2DDrawing_XOr
mode | #PB_2DDrawing_Transparent
Repeat
StartDrawing(WindowOutput(0))
DrawingMode(mode)
Box(0,0,x,y)
StopDrawing()
y=WindowMouseY(0)
x=WindowMouseX(0)
StartDrawing(WindowOutput(0))
DrawingMode(mode)
Box(0,0,x,y)
StopDrawing()
If WaitWindowEvent() = #PB_Event_CloseWindow ; If the user has pressed on the close button
End
EndIf
ForEver
Re: Editor-Prog - Wie erzeugt diese "gestrichelten Linien"
#PB_Event_Repaint ? Sorgt dafür das du alles nur neuzeichnest wenn du es musst.
Windows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4
Open Suse 11.2: PB 4.4
Re: Editor-Prog - Wie erzeugt diese "gestrichelten Linien"
das ändert leider nichts an den artefakten vom letzten code. und es beseitigt auch nicht das flackern beim zeichnen direkt auf das fenster, weil du bei jedem mousemove auch ein repaint erzeugen mußt. ich habe auch schon probiert mit InvalidateRect() nur die linien selbst, also nicht das gesamte auswahlrechteck neu zeichnen zu lassen. dann flackert die fläche im rechteck auch nicht mehr, aber die linien flackern trotzdem.
so schlecht finde ich drawFocusRect() auch gar nicht. ist halt nur optisch nicht sehr flexibel nehme ich an.
so schlecht finde ich drawFocusRect() auch gar nicht. ist halt nur optisch nicht sehr flexibel nehme ich an.


