Canvas Keyboard oder Doppelklick

Für allgemeine Fragen zur Programmierung mit PureBasic.
PB_Rainer
Beiträge: 21
Registriert: 10.06.2019 16:00

Canvas Keyboard oder Doppelklick

Beitrag von PB_Rainer »

Hallo zusammen,

nach stundenlagem Suchen habe ich immer noch nicht die Lösung gefunden, die auch funktioniert.

Es gibt einige Beispiele zu dem nachfolgend beschrieben Problem, funktionieren aber alle nicht.

Problem:
Im Canvas sind Symbole vertikal und Horizontal angeordnet, alle haben die Größe x28 y28.
  • Über einen #PB_EventType_LeftButtonUp wird ein Symbol gezeichnet!
  • Über einen #PB_EventType_RightButtonUp wird ein Symbol gelöscht!
  • Über einen #PB_EventType_LeftDoubleClick auf ein Symbol möchte ich den Konfigurationsdialog zu diesem Symbol aufrufen!
Das funktioniert nicht, denn da wird jedesmal der definierte #PB_EventType_LeftButtonUp mit aufgerufen, das darf aber nicht sein.
Also der Ablauf beim Doppelklick ist dann fälschlicherweise:
  • Die Funktion zum #PB_EventType_LeftButtonUp wird aufgerufen, ein Symbol wird gezeichnet! Das darf aber nicht passieren!
und dann direkt danach
  • Die Funktion für #PB_EventType_LeftDoubleClick wird aufegrufen, das soll passieren!
Eine weiter Möglichkeit könnte sein, den Mauszeiger über das Symbol zu führen und eine Taste auf der Tastatur zu drücken, z.B. STRG.
Auch das funktioniert nicht. Im Canvas-Gadget ist #PB_Canvas_Keyboard gesetzt.

Mittlerweile weiß ich schon nicht mehr was ich noch probieren könnte.
Vllt. hat ja jemand die Lösung, oder zündende Idee die mir hilft. Dafür vielen Dank im voraus,

Rainer


EDIT!
Im Source ist der #PB_EventType_LeftDoubleClick mittlerweile durch den #PB_EventType_MiddleButtonUp ersetzt.


Hier der Ausschnitt aus der Eventloop:

Code: Alles auswählen

	Select Event
		Case #PB_Event_CloseWindow
			MobaExit = #True
			ProcedureReturn #False
			
		Case #PB_Event_Menu
			Select EventMenu()
			EndSelect 
			
		Case #PB_Event_SizeWindow
			ResizeGadgetsWindow_Main()
			
		Case #PB_Event_Gadget
			Select EventGadget()

				Case Canvas_Moba 
					Define ActSymbol.i = #T_S_1
					If EventType() = #PB_EventType_MouseMove ;And GetGadgetAttribute(Canvas_Moba, #PB_Canvas_Buttons)
						ShowCanvasMousePosition()
					ElseIf EventType() = #PB_EventType_MouseWheel And GetGadgetAttribute(Canvas_Moba, #PB_Canvas_WheelDelta ) And EditLayout = #True
						ShowCanvasMousePosition()
						RotateSymbol(ActualSymbolBegin, ActualSymbolEnd)					
					ElseIf EventType() = #PB_EventType_MiddleButtonUp And (GetGadgetAttribute(Canvas_Moba, #PB_Canvas_Buttons) | #PB_Canvas_MiddleButton) And EditLayout = #True
						ShowCanvasMousePosition()
;TODO						GetSymbolType()
;TODO						SelectPanelPage()
						MessageRequester("Detaileingabe für Symbol!", "Jetzt auf dem geöffneten Panel-Tab die Daten zum gewählten Symbol eingeben!", #PB_MessageRequester_Info | #PB_MessageRequester_Ok)
					ElseIf EventType() = #PB_EventType_LeftButtonUp And (GetGadgetAttribute(Canvas_Moba, #PB_Canvas_Buttons) | #PB_Canvas_LeftButton) And EditLayout = #True
						ShowCanvasMousePosition()
						DrawTrackSymbol()   
					ElseIf EventType() = #PB_EventType_RightButtonUp And (GetGadgetAttribute(Canvas_Moba, #PB_Canvas_Buttons) | #PB_Canvas_RightButton) And EditLayout = #True
						ShowCanvasMousePosition()
						DeleteTrackSymbol()
					ElseIf EventType() = 	#PB_EventType_Input And (GetGadgetAttribute(Canvas_Moba, #PB_Canvas_Key) And #PB_Canvas_Control) And EditLayout = #True 
						MessageRequester("Detaileingabe für Symbol!", "Jetzt auf dem geöffneten Panel-Tab die Daten zum gewählten Symbol eingeben!", #PB_MessageRequester_Info | #PB_MessageRequester_Ok)
					EndIf   
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Canvas Keyboard oder Doppelklick

Beitrag von STARGÅTE »

Hallo PB_Rainer und willkommen an Bord.
PB_Rainer hat geschrieben: 20.01.2022 13:50 Das funktioniert nicht, denn da wird jedesmal der definierte #PB_EventType_LeftButtonUp mit aufgerufen, das darf aber nicht sein.
Also der Ablauf beim Doppelklick ist dann fälschlicherweise:
Die Funktion zum #PB_EventType_LeftButtonUp wird aufgerufen, ein Symbol wird gezeichnet! Das darf aber nicht passieren!
Nun stelle ich mal die Gegenfrage, wie denn das Programm nach einem (ersten) Up-Event wissen soll, dass du die Maus dann wieder drückst?
Das Doppelklick-Event führt immer auch das Singleclick-Event aus. Du kannst ja z.B. in WIndows auch nicht ein Ordner öffnen (Doppelklick) ohne ihn auszuwählen (Singleklick).
Was ist denn überhaupt so schlimm, wenn das Symbol einmal zusätzlich gezeichnet wird?
PB_Rainer hat geschrieben: 20.01.2022 13:50 Eine weiter Möglichkeit könnte sein, den Mauszeiger über das Symbol zu führen und eine Taste auf der Tastatur zu drücken, z.B. STRG.
Auch das funktioniert nicht. Im Canvas-Gadget ist #PB_Canvas_Keyboard gesetzt.
Die STRG-Taste abzufragen machst du nicht mit #PB_Canvas_Input, das ist für die Texteingabe (die z.B. auch á zurückgibt wenn du ´+ a drückst).
Für die Tasten selbst nutzt du das Event #PB_EventType_KeyDown oder #PB_EventType_KeyUp. Mit GetGadgetAttribute() holst du dir dann die Taste.
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
PB_Rainer
Beiträge: 21
Registriert: 10.06.2019 16:00

Re: Canvas Keyboard oder Doppelklick

Beitrag von PB_Rainer »

Hi,

ja, das Problem ist, durch den ersten LinksKlick wird halt an der Stelle ein neues, meistens falsches, Symbol neu gezeichnet, was nicht sein darf.

Danke, das mit dem Key funktioniert super.
Rainer
Antworten