Seite 1 von 1

Drag and Drop auch hintereinander

Verfasst: 19.09.2013 23:36
von frankmannb
Hallo Leute,

ich möchte gerne eine Art Seriendruckprogramm für Adressen erstellen, welches aus einer einzulesenden Datei die Überschriften als Variablennamen in ein Gadget "Quelle" einliest und darstellt. Der Anwender soll die Möglichkeit haben, die gewünschten Felder z.B. Vorname und Nachname ins Zielgadget abzulegen (das ganze aber auch nebeneinander). Weiterhin soll der Anwender die Möglichkeit erhalten, zwischen den abgelegten Feldern im Zielgadget variablen Test zu hinterlegen. Zum Schluss soll dann die Zusammenstellung so wie es sich der Anwender erstellt hat, ausgedruckt werden wobei die abgelegten Varablen durch die Werte aus der einzulesenden Datei (nur nicht die Überschrift) ersetzt werden + dem variablen Text den der Anwender zwischen den Variablen abgelegt hat.

Als Ansatz habe ich mir schon etwas aus der Hilfe zusammengebaut, aber so richtig komme ich nicht weiter. Villeicht kann mir jemand von euch etwas auf die Sprünge helfen.

Besten Dank hierfür vorab.

frank

Code: Alles auswählen

#Window = 0

Enumeration    ; Gadgets
  #SourceText
  #TargetText
EndEnumeration

links.i = 150
oben.i = 10
breite.i = 300
hoehe.i = 140


If OpenWindow(#Window, 0, 0, 760, 310, "Drag & Drop", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  ; Create and fill the source gadgets
  ;
  ListIconGadget(#SourceText, 10, 10, 140, 140, "Quelle", 130)   
  AddGadgetItem(#SourceText, -1, "Der Text soll")
  AddGadgetItem(#SourceText, -1, "im Ziel auch")
  AddGadgetItem(#SourceText, -1, "hintereinander")
  AddGadgetItem(#SourceText, -1, "abgelegt werden können")

  ; Create the target gadgets
  ListIconGadget(#TargetText,links.i,oben.i,breite.i,hoehe.i, "ZIEL", breite.i - 5)
  EnableGadgetDrop(#TargetText,     #PB_Drop_Text,    #PB_Drag_Copy)

  Repeat
    Event = WaitWindowEvent()
    
    ; DragStart event on the source gadgets, initiate a drag & drop
    ;
    If Event = #PB_Event_Gadget And EventType() = #PB_EventType_DragStart
      
      Select EventGadget()
        Case #SourceText
          Text$ = GetGadgetItemText(#SourceText, GetGadgetState(#SourceText))
          DragText(Text$)              
      EndSelect
    
    ; Drop event on the target gadgets, receive the dropped data
    ;
    ElseIf Event = #PB_Event_GadgetDrop
      Select EventGadget()
        Case #TargetText
          AddGadgetItem(#TargetText, -1, EventDropText())
      EndSelect
    EndIf
    
  Until Event = #PB_Event_CloseWindow
EndIf

End


Re: Drag and Drop auch hintereinander

Verfasst: 21.09.2013 09:30
von dysti
Hier ein Beispiel:

Code: Alles auswählen

EnableExplicit

Define event,links, oben, breite, hoehe, text$, lvabfrage

#Window = 0

Enumeration    ; Gadgets
  #SourceText
  #TargetText
  #VarText
  #TText
EndEnumeration

links.i = 150
oben.i = 10
breite.i = 300
hoehe.i = 140


If OpenWindow(#Window, 0, 0, 460, 310, "Drag & Drop", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  ; Create and fill the source gadgets
  ;
  ListIconGadget(#SourceText, 10, 10, 140, 140, "Quelle", 130)   
  AddGadgetItem(#SourceText, -1, "Der Text soll")
  AddGadgetItem(#SourceText, -1, "im Ziel auch")
  AddGadgetItem(#SourceText, -1, "hintereinander")
  AddGadgetItem(#SourceText, -1, "abgelegt werden können")

  ; Create the target gadgets
  ListIconGadget(#TargetText,links.i,oben.i,breite.i,hoehe.i, "ZIEL", breite.i - 5,#PB_ListIcon_FullRowSelect)
  EditorGadget(#VarText,10,180,440,20)
  TextGadget(#TText,10,220,440,20,"Mit gleichzeitigem drücken der STRG-Taste wird der Text in eine neue Zeile eingefügt")
  EnableGadgetDrop(#TargetText,     #PB_Drop_Text,    #PB_Drag_Copy, #PB_Drag_Move)

  Repeat
    Event = WaitWindowEvent()
    
    ; DragStart event on the source gadgets, initiate a drag & drop
    ;
    If Event = #PB_Event_Gadget And EventType() = #PB_EventType_DragStart
      
      Select EventGadget()
        Case #SourceText
          Text$ = GetGadgetItemText(#SourceText, GetGadgetState(#SourceText))
          DragText(Text$)              
      EndSelect
    
    ; Drop event on the target gadgets, receive the dropped data
    ;
    ElseIf Event = #PB_Event_GadgetDrop
      Select EventGadget()
        Case #TargetText
          lvabfrage = GetGadgetState(#TargetText)
          If lvabfrage>=0
            If GetAsyncKeyState_(#VK_CONTROL)
              AddGadgetItem(#TargetText, lvabfrage, EventDropText())
            Else
            SetGadgetItemText(#TargetText,lvabfrage,GetGadgetItemText(#TargetText,lvabfrage) + " " + EventDropText())
            EndIf
          Else
            AddGadgetItem(#TargetText, -1, EventDropText())
            EndIf
      EndSelect
    EndIf
    
  Until Event = #PB_Event_CloseWindow
EndIf

End

Re: Drag and Drop auch hintereinander

Verfasst: 24.09.2013 20:21
von frankmannb
Hallo :-)

Das sieht schon gut aus, allerdings müsste es auch die Möglichkeit geben die entsprechenden Einträge die man per Drag/Drop ins rechte Fenster geschoben hat, wieder zu entfernen.

PS: Das mit der STRG-Taste funktioniert bei mir irgendwie nicht, allerdings geht es ohne auch.

Danke und Gruß
frankmannb
dysti hat geschrieben:Hier ein Beispiel:

Code: Alles auswählen

EnableExplicit

Define event,links, oben, breite, hoehe, text$, lvabfrage

#Window = 0

Enumeration    ; Gadgets
  #SourceText
  #TargetText
  #VarText
  #TText
EndEnumeration

links.i = 150
oben.i = 10
breite.i = 300
hoehe.i = 140


If OpenWindow(#Window, 0, 0, 460, 310, "Drag & Drop", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  ; Create and fill the source gadgets
  ;
  ListIconGadget(#SourceText, 10, 10, 140, 140, "Quelle", 130)   
  AddGadgetItem(#SourceText, -1, "Der Text soll")
  AddGadgetItem(#SourceText, -1, "im Ziel auch")
  AddGadgetItem(#SourceText, -1, "hintereinander")
  AddGadgetItem(#SourceText, -1, "abgelegt werden können")

  ; Create the target gadgets
  ListIconGadget(#TargetText,links.i,oben.i,breite.i,hoehe.i, "ZIEL", breite.i - 5,#PB_ListIcon_FullRowSelect)
  EditorGadget(#VarText,10,180,440,20)
  TextGadget(#TText,10,220,440,20,"Mit gleichzeitigem drücken der STRG-Taste wird der Text in eine neue Zeile eingefügt")
  EnableGadgetDrop(#TargetText,     #PB_Drop_Text,    #PB_Drag_Copy, #PB_Drag_Move)

  Repeat
    Event = WaitWindowEvent()
    
    ; DragStart event on the source gadgets, initiate a drag & drop
    ;
    If Event = #PB_Event_Gadget And EventType() = #PB_EventType_DragStart
      
      Select EventGadget()
        Case #SourceText
          Text$ = GetGadgetItemText(#SourceText, GetGadgetState(#SourceText))
          DragText(Text$)              
      EndSelect
    
    ; Drop event on the target gadgets, receive the dropped data
    ;
    ElseIf Event = #PB_Event_GadgetDrop
      Select EventGadget()
        Case #TargetText
          lvabfrage = GetGadgetState(#TargetText)
          If lvabfrage>=0
            If GetAsyncKeyState_(#VK_CONTROL)
              AddGadgetItem(#TargetText, lvabfrage, EventDropText())
            Else
            SetGadgetItemText(#TargetText,lvabfrage,GetGadgetItemText(#TargetText,lvabfrage) + " " + EventDropText())
            EndIf
          Else
            AddGadgetItem(#TargetText, -1, EventDropText())
            EndIf
      EndSelect
    EndIf
    
  Until Event = #PB_Event_CloseWindow
EndIf

End

Re: Drag and Drop auch hintereinander

Verfasst: 25.09.2013 07:41
von dysti
Da hättest du auch selber drauf können. Es gibt eine Hilfe zu PB über Mouseevents.

Code: Alles auswählen

 ElseIf EventType() = #PB_EventType_LeftDoubleClick
            lvabfrage = GetGadgetState(#TargetText)
            RemoveGadgetItem(#TargetText,lvabfrage)
    EndIf
  Until Event = #PB_Event_CloseWindow