Seite 1 von 1

Button mit mehreren klick Funktionen IF ELSE ?

Verfasst: 17.06.2015 04:44
von udg
ich habe einen "kopieren/ einfügen" button der mehrmals auf Events ansprechen soll.

Wenn ich mit der Maus in das entsprechende Panel Feld klicke, markiert es automatisch den kompletten Textinhalt.
Der Button prüft nun ob der Text von start bis end markiert ist und wenn ja, kopiert er den Text in die Zwischenablage.
Anschließend wird der Text sofort automatisch wieder deselekted.

Der button macht was er soll aber nur von hinten nach vorn, sprich von Panel 6 zu Panel 1. Anders rum, keine weitere Reaktion.
Der Code im Event wird nur von hinten nach vorn abgearbeitet. Ich möchte jedoch, dass es egal ist wo ich hinklicke.

Meine Schleife stimmt nicht Bild

Code: Alles auswählen

      ;- Kopiere markierten Panel-Text in Zwischenablage 
         Case #btn_Copy_Paste
            EventGadget = EventGadget()
            EventType = EventType()
           ; wenn Text kopiert, entferne die automatische Markierung aus dem Panel 
            If EventGadget = #btn_Copy_Paste
              If SendMessage_(GadgetID(#Panel_1), #EM_GETSEL, @startPos, @stopPos)
                 SetClipboardText(Mid(GetGadgetText(#Panel_1), startPos+0, stopPos+stopPos))
                 SendMessage_(GadgetID(#Panel_1), #EM_HIDESELECTION, Len(GetGadgetText(EventGadget())),0) 
                  Else       
                  If SendMessage_(GadgetID(#Panel_2), #EM_GETSEL, @startPos, @stopPos)
                     SetClipboardText(Mid(GetGadgetText(#Panel_2), startPos+0, stopPos+stopPos))
                     SendMessage_(GadgetID(#Panel_2), #EM_HIDESELECTION, Len(GetGadgetText(EventGadget())),0) 
                      Else
                      If SendMessage_(GadgetID(#Panel_3), #EM_GETSEL, @startPos, @stopPos)
                         SetClipboardText(Mid(GetGadgetText(#Panel_3), startPos+0, stopPos+stopPos))
                         SendMessage_(GadgetID(#Panel_3), #EM_HIDESELECTION, Len(GetGadgetText(EventGadget())),0)      
                          Else
                          If SendMessage_(GadgetID(#Panel_4), #EM_GETSEL, @startPos, @stopPos)
                             SetClipboardText(Mid(GetGadgetText(#Panel_4), startPos+0, stopPos+stopPos))
                             SendMessage_(GadgetID(#Panel_4), #EM_HIDESELECTION, Len(GetGadgetText(EventGadget())),0)      
                             Else
                             If SendMessage_(GadgetID(#Panel_5), #EM_GETSEL, @startPos, @stopPos)
                                SetClipboardText(Mid(GetGadgetText(#Panel_5), startPos+0, stopPos+stopPos))
                                SendMessage_(GadgetID(#Panel_5), #EM_HIDESELECTION, Len(GetGadgetText(EventGadget())),0)      
                                Else
                                If SendMessage_(GadgetID(#Panel_6), #EM_GETSEL, @startPos, @stopPos)
                                   SetClipboardText(Mid(GetGadgetText(#Panel_6), startPos+0, stopPos+stopPos))
                                   SendMessage_(GadgetID(#Panel_6), #EM_HIDESELECTION, Len(GetGadgetText(EventGadget())),0)      
                                EndIf
                             EndIf
                          EndIf
                      EndIf
                  EndIf  
              EndIf 
            EndIf

; [u]UND SO ARBEITET ES GENAU ANDERSRUM jedoch auch nur in eine Richtung[/u]

      ;- Kopiere markierten Panel-Text in Zwischenablage 
         Case #btn_Copy_Paste
            EventGadget = EventGadget()
            EventType = EventType()
           ; wenn kopiert, entferne die automatische Markierung aus dem Panel 
            If EventGadget = #btn_Copy_Paste
              If SendMessage_(GadgetID(#Panel_1), #EM_GETSEL, @startPos, @stopPos)
                 SetClipboardText(Mid(GetGadgetText(#Panel_1), startPos+0, stopPos+stopPos))
                 SendMessage_(GadgetID(#Panel_1), #EM_HIDESELECTION, Len(GetGadgetText(EventGadget())),0) 
              EndIf;    Else       
                  If SendMessage_(GadgetID(#Panel_2), #EM_GETSEL, @startPos, @stopPos)
                     SetClipboardText(Mid(GetGadgetText(#Panel_2), startPos+0, stopPos+stopPos))
                     SendMessage_(GadgetID(#Panel_2), #EM_HIDESELECTION, Len(GetGadgetText(EventGadget())),0) 
                  EndIf;    Else
                      If SendMessage_(GadgetID(#Panel_3), #EM_GETSEL, @startPos, @stopPos)
                         SetClipboardText(Mid(GetGadgetText(#Panel_3), startPos+0, stopPos+stopPos))
                         SendMessage_(GadgetID(#Panel_3), #EM_HIDESELECTION, Len(GetGadgetText(EventGadget())),0)      
                      EndIf;    Else
                          If SendMessage_(GadgetID(#Panel_4), #EM_GETSEL, @startPos, @stopPos)
                             SetClipboardText(Mid(GetGadgetText(#Panel_4), startPos+0, stopPos+stopPos))
                             SendMessage_(GadgetID(#Panel_4), #EM_HIDESELECTION, Len(GetGadgetText(EventGadget())),0)      
                          EndIf;   Else
                             If SendMessage_(GadgetID(#Panel_5), #EM_GETSEL, @startPos, @stopPos)
                                SetClipboardText(Mid(GetGadgetText(#Panel_5), startPos+0, stopPos+stopPos))
                                SendMessage_(GadgetID(#Panel_5), #EM_HIDESELECTION, Len(GetGadgetText(EventGadget())),0)      
                             EndIf;   Else
                                If SendMessage_(GadgetID(#Panel_6), #EM_GETSEL, @startPos, @stopPos)
                                   SetClipboardText(Mid(GetGadgetText(#Panel_6), startPos+0, stopPos+stopPos))
                                   SendMessage_(GadgetID(#Panel_6), #EM_HIDESELECTION, Len(GetGadgetText(EventGadget())),0)      
                                EndIf

            EndIf


VG

Re: Button mit mehreren klick Funktionen IF ELSE ?

Verfasst: 17.06.2015 19:27
von Andesdaf
nimm statt EM_HIDESELECTION mal EM_SETSEL mit zweimal 0 als Parameter.

Re: Button mit mehreren klick Funktionen IF ELSE ?

Verfasst: 17.06.2015 20:50
von udg
pf. krass, Danke, und schon funktioniert es.

statt:
SendMessage_(GadgetID(#Panel_1), #EM_HIDESELECTION, Len(GetGadgetText(EventGadget())),0)
habe ich es nun geändert in:
SendMessage_(GadgetID(#Panel_1), #EM_SETSEL, 0,0)

und auf einmal funktioniert der Button kreuz und quer.

Ich hatte uA. probiert:
SendMessage_(GadgetID(#Panel_1), #EM_SETSEL, Len(GetGadgetText(EventGadget())),0)

hier war aber das Problem, dass es die Markierung des Textest zwar aufhob aber nicht komplett (das erste Wort blieb markiert), somit konnte ich anderen selektierten Text mit dem selben Button nicht ansprechen.

ok. nun geht es aber was habe ich damit verändert?
Es müsste logischerweise? mit: Len(GetGadgetText(EventGadget())),0) zu tun haben?
Das ist jetzt raus aus dem Code und der Button macht was er soll.

hier nochmal der Button-Code der jetzt arbeitet :allright: :

Code: Alles auswählen

         Case #btn_Copy_Paste
              If SendMessage_(GadgetID(#Panel_1), #EM_GETSEL, @startPos, @stopPos)
                 SetClipboardText(Mid(GetGadgetText(#Panel_1), startPos+0, stopPos+stopPos))
                 SendMessage_(GadgetID(#Panel_1), #EM_SETSEL, 0,0);Len(GetGadgetText(EventGadget())),0)
               EndIf               
                    If SendMessage_(GadgetID(#Panel_2), #EM_GETSEL, @startPos, @stopPos)
                       SetClipboardText(Mid(GetGadgetText(#Panel_2), startPos+0, stopPos+stopPos))
                       SendMessage_(GadgetID(#Panel_2), #EM_SETSEL, 0,0);Len(GetGadgetText(EventGadget())),0)
                    EndIf
                         If SendMessage_(GadgetID(#Panel_3), #EM_GETSEL, @startPos, @stopPos)
                            SetClipboardText(Mid(GetGadgetText(#Panel_3), startPos+0, stopPos+stopPos))
                            SendMessage_(GadgetID(#Panel_3), #EM_SETSEL, 0,0);Len(GetGadgetText(EventGadget())),0) 
                         EndIf
                              If SendMessage_(GadgetID(#Panel_4), #EM_GETSEL, @startPos, @stopPos)
                                 SetClipboardText(Mid(GetGadgetText(#Panel_4), startPos+0, stopPos+stopPos))
                                 SendMessage_(GadgetID(#Panel_4), #EM_SETSEL, 0,0);Len(GetGadgetText(EventGadget())),0)
                              EndIf
                                   If SendMessage_(GadgetID(#Panel_5), #EM_GETSEL, @startPos, @stopPos)
                                      SetClipboardText(Mid(GetGadgetText(#Panel_5), startPos+0, stopPos+stopPos))
                                      SendMessage_(GadgetID(#Panel_5), #EM_SETSEL, 0,0);Len(GetGadgetText(EventGadget())),0)
                                   EndIf
                                        If SendMessage_(GadgetID(#Panel_6), #EM_GETSEL, @startPos, @stopPos)
                                           SetClipboardText(Mid(GetGadgetText(#Panel_6), startPos+0, stopPos+stopPos))
                                           SendMessage_(GadgetID(#Panel_6), #EM_SETSEL, 0,0);Len(GetGadgetText(EventGadget())),0)
                                        EndIf

Re: Button mit mehreren klick Funktionen IF ELSE ?

Verfasst: 17.06.2015 22:04
von Andesdaf
EM_HIDESELECTION entfernt die Auswahl nicht, sondern versteckt sie nur. EM_GETSEL liefert deshalb weiterhin einen Wert ungleich null zurück. Das bringt im ersten Codeteil die verschachtelten Abfragen durcheinander. Im zweiten Teil ohne Verschachtelung werden dann aber alle Blöcke durchlaufen, für die eine Auswahl gefunden wird und und damit funktioniert wieder nur die eine Richtung.

Re: Button mit mehreren klick Funktionen IF ELSE ?

Verfasst: 17.06.2015 22:47
von udg
Vielen Dank für die Erklärung.

Genau das war mein Problem, welches ich nicht lokalisieren konnte.
Wieder etwas gelernt.

Grüße