Aktuelle Zeit: 09.07.2020 11:19

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Doppelklick auf Textgadget herausfinden
BeitragVerfasst: 20.07.2019 15:10 
Offline

Registriert: 06.03.2019 21:52
Hallo!

Ich habe auf meinem Window ca. 1200 kleine Textgadgets mit dem Flag #SS_NOTIFY (Jahreskalender). Wie kann ich herauskriegen, auf welchem Textgadget ein Doppelklick erfolgte?

Bin mit
Code:
Repeat
  Select WaitWindowEvent()
   
    Select EventType()
        Case #PB_EventType_LeftDoubleClick
        Debug EventGadget()
    EndSelect

;und so weiter

schnell am Ende des Lateins angekommen.

_________________
Der beste Fisch ist der Schnitzel


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelklick auf Textgadget herausfinden
BeitragVerfasst: 20.07.2019 15:15 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Code:
EnableExplicit

Global TextGadgetCB

Procedure TextGadgetCB(hWnd, uMsg, wParam, lParam)
  Select uMsg
    Case #WM_LBUTTONDBLCLK
      Debug "Doppelklick"
  EndSelect
 
  ProcedureReturn CallWindowProc_(TextGadgetCB, hWnd, uMsg, wParam, lParam)
EndProcedure

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  TextGadget(1, 10, 10, 200, 20, "Hallo  bin_neu_hier, klicke hier doppelt.", #SS_NOTIFY)
 
  TextGadgetCB = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @TextGadgetCB())
 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelklick auf Textgadget herausfinden
BeitragVerfasst: 20.07.2019 16:16 
Offline

Registriert: 06.03.2019 21:52
Hallo RSBasic,

erstmal vielen Dank dafür. Um das für mein Prog mit ~1200 Textgadgets anzupassen, muss ich das dann so erweitern?

Code:
for i = 1 to 1200
TextGadgetCB = SetWindowLongPtr_(GadgetID(i), #GWL_WNDPROC, @TextGadgetCB())
next


_________________
Der beste Fisch ist der Schnitzel


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Doppelklick auf Textgadget herausfinden
BeitragVerfasst: 20.07.2019 16:46 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
Das Beispiel von RSBasic ist für EIN Gadget ausgelegt.

Für mehr als eines ist eine kleine Anpassung nötig. Ausserdem würde ich das in eine Prozedur
packen, und damit dann das Textgadget erstellen.

Als Beispiel so :

Code:
EnableExplicit

#PROP_OLDPROC  = "PROP:OLDPROC"
#PROP_PBGADGET = "PROP:PBGADGET"

Procedure TextGadgetCB(hWnd, uMsg, wParam, lParam)
 
  Protected TextGadgetCB = GetProp_(hWnd, #PROP_OLDPROC) ; Für den Originalen CB
  Protected Gadget    ; Die PB Gadgetnummer
 
  ; Raus, wenn es keinen originalen Callback gibt (Irgendwas läuft dann falsch)
  If Not TextGadgetCB
    Debug "Callback wird missbraucht"
    ProcedureReturn #Null
  EndIf
     
  Select uMsg
     
    Case #WM_LBUTTONDBLCLK
     
      Gadget = GetProp_(hwnd, #PROP_PBGADGET)
     
      Debug "Doppelklick auf Gadget " + Str(Gadget)
     
  EndSelect
 
  ProcedureReturn CallWindowProc_(TextGadgetCB, hWnd, uMsg, wParam, lParam)
 
EndProcedure

Procedure.i _TextGadget(Gadget, x, y, w, h, Text$)
 
  Protected CB
 
  TextGadget(Gadget, x, y, w, h, Text$, #SS_NOTIFY)
 
  ; Callback setzen
  CB = SetWindowLongPtr_(GadgetID(Gadget), #GWL_WNDPROC, @TextGadgetCB())
 
  ; Damit keine Liste/Map oder sonstwas gebraucht wird, jedes Gadget seine eigenen Daten
  SetProp_(GadgetID(Gadget), #PROP_OLDPROC, CB)      ; Für den Originalen Callback des Gadgets
  SetProp_(GadgetID(Gadget), #PROP_PBGADGET, Gadget) ; Für die PB GadgetNummer
     
EndProcedure


If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  _TextGadget(1, 10, 10, 200, 20, "1 - Hallo  bin_neu_hier, klicke hier doppelt.")
  _TextGadget(2, 10, 40, 200, 20, "2 - Hallo  bin_neu_hier, klicke hier doppelt.")
  _TextGadget(3, 10, 70, 200, 20, "3 - Hallo  bin_neu_hier, klicke hier doppelt.")
 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf


So mal eben auf die Schnelle ;)

_________________
PureBasic 5.72 LTS (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce RTX 2080 Super | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Toll gelöst! Doppelklick auf Textgadget herausfinden
BeitragVerfasst: 20.07.2019 17:58 
Offline

Registriert: 06.03.2019 21:52
Hallo RSBasic und Bisonte!

Ihr habt mal wieder bestens weitergeholfen. Ihr beide seid klasse!

Hammermäßig!

_________________
Der beste Fisch ist der Schnitzel


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: jacdelad und 13 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye