PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как можно передать мои данные используя Drag&Drop. Не текст.


Как можно передать мои данные используя Drag&Drop. Не текст.

Сообщений 31 страница 44 из 44

1

Давно не был тут, еле вошёл. :crazyfun:

Привет :flag:  Пётр, AZJIO,newJS и другим.

Вопрос ко всем.
Короче у меня есть прога с деревом. И нужно перемещать данные например на другую аналогичную прогу. Например скопировать ветку. Но там не только название ветки, но ещё и куча даных которые висят в каждом итеме.
Вот как их передать и принять.

Пробую что-то разобрать у Фреда DragOSFormats(), но не вижу как получить данные хотя бы адрес. То что возвращает не корректно.

0

31

Пётр написал(а):

Не обязательно. В коде у ListViewGadget не включен DragDrop. Перетащите на него текст например из редактора PB.

Повторюсь, я говорю про EditorGadGet. С ним у меня косяк получается

0

32

AZJIO написал(а):

А как понять, всё обтекаемо написаано, то нужно было одно дерево перекинуть в другое дерево, а теперь оказывается нужно файл в блокнот, из блокнота в деревой, списки фай :yep: лов куда? В дерево? в блокнот? У меня есть готовые примеры бросание файлов в блокнот, возможно в дерево.
...

У меня драг для передачи данных Итема с дерева. Ну и попутно открытие файла простым перетаскиванием файла на окно.  Вот вроде все. Но с файлом для редактора выходит косяк у пурика. Все работает с файлом, но стандартные перестают грн а работать мещение внутри редактора не хочет работать адекватно.

0

33

balex1978 написал(а):

я говорю про EditorGadGet

Нормально текст перетаскивается.

Код:
Procedure DropCallback(TargetHandle, State, Format, Action, x, y)
  
  ProcedureReturn #True
EndProcedure

SetDropCallback(@DropCallback())

If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  EnableWindowDrop(0, #PB_Drop_Text, #PB_Drag_Copy)
  EditorGadget(0, 8, 8, 306, 133)
  For a = 0 To 5
    AddGadgetItem(0, a, "Line "+Str(a))
  Next
  Repeat 
    Event = WaitWindowEvent()
    If Event = #PB_Event_WindowDrop
      Debug "Window"
      Debug EventDropText()
    ElseIf Event = #PB_Event_GadgetDrop
      Debug EventGadget()
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf

Если перетащить в окно, текст отобразится в отладочном окне. Если перенести в EditorGadget, текст добавится в него.

0

34

Webarion написал(а):

Согласен с AZJIO. По этой теме, просто ради интереса, экспериментировал с передачей структуры привязанной к Tree. Проще всего и кроссплатформенно, у меня получилось передавать преобразовав структуру в Json, даже вложенную неизвестное количество раз. Потом на всяк пожарный в Base64. А на приёмке - обратный процесс.

.... Но, почитал я эту переписку ребята и подумал: "у меня же блин дел более важных вагон и маленькая тележка", так и не доделал, остались баги.

Благодарю. Возможно уже не стоит тратить время, темболее я нашел как оно работает.

Проверял Джейсон, интересная штука. Но при создании 10 метров данных он в памяти сожрал более 300 метров. А если я 20 метров преобразую, тогда что.... Мой не совсем крутой ПК, совсем ахнет :D . У меня уже файл имеет размер больше 7 метров

0

35

Пётр написал(а):

Нормально текст перетаскивается.

Если перетащить в окно, текст отобразится в отладочном окне. Если перенести в EditorGadget, текст добавится в него.

Тут если добавить ещё перетаскивание файла для открытия. Я пока не проверял краткий вариант...уже сплю

0

36

balex1978
Windows работает с UTF-16. Например прочитал файл в память по указателю, из него прочитал в переменную и уже 2-я копия данных в 2 раза большего размера. Засунул в гаджет, вот ещё одна увеличенная копия, скопировал из-гаджета в гаджет, ещё одна увеличенная копия. Ну а если в коде отсутствует оптимизация и может хранится не одна копия данных из переменной в переменную скопировал после обработки текста, то вполне можно добиться огромных размеров итогового захвата памяти. Кстати, png-файл в памяти тоже как бы становится растровым как bmp, если на диске он 20кб, а в bmp-формате 400 кб, то и в памяти png будет 400 кб будучи отображённым на плоскости GUI.

0

37

balex1978 написал(а):

тем более я нашел как оно работает

Что именно нашёл? Поделись пожалуйста!? Желательно не только словами, но и примерами, если не трудно)
P.S. никто подлинно не поймёт автора, кроме его самого!

0

38

Для Петра. Вот как тут обрабатывать.
Оно нормально не работает, если выделить текст и перемещать.
Могу ошибиться в коде, я не сразу перекинул код с флешки на мобилу. По этому за ранее извиняюсь.

Код:
#Window = 0: #Editor = 3

OpenWindow(#Window, 50, 70, 700, 550, "РЕДАКТОР EditorGadget", #PB_Window_SystemMenu | $00CF0000)

EditorGadget( #Editor,   0, 50, 350, 450) :;EditorGadget( 4, 400, 50, 300, 450) 

EnableWindowDrop( #Window, #PB_Drop_Text, #PB_Drag_Copy  )
EnableGadgetDrop( #Editor, #PB_Drop_Text, #PB_Drag_Copy | #PB_Drag_Move )

Repeat
    Event = WaitWindowEvent()
    If Event=#PB_Event_Gadget ; 13100;выбрано какоето устройство
        Select EventGadget();выбрано устройство номер-кнопка или редактор
            Case #Editor;РЕДАКТОР =EditorGadget
                Debug "сообщение от редактор #Editor"
        EndSelect
        
    ElseIf Event = #PB_Event_WindowDrop
        Debug "сообщение от #PB_Event_WindowDrop"
        Debug EventDropText()
    ElseIf Event = #PB_Event_GadgetDrop
        Debug "сообщение от #PB_Event_GadgetDrop"
        Debug EventDropText()
    EndIf
Until Event = #PB_Event_CloseWindow

0

39

Webarion написал(а):

Что именно нашёл? Поделись пожалуйста!? Желательно не только словами, но и примерами, если не трудно)
P.S. никто подлинно не поймёт автора, кроме его самого!

Делюсь тем что помогло...точнее что мой брат смог понять и я это переделал в читабельную форму.

передаю данные через буфер

Код:
;передача DragOSFormats()+++++++++++++++СДЕЛАЛ, ВСЕ РАБОТАЕТ

; это пример для DragOSFormats().

; Structure DragDataFormat
;     Format.i    ; Определяемый OS идентификатор формата для перетаскивания (больше информации смотрите ниже)
;    *Buffer      ; Буфер в памяти, содержащий данные в этом формате
;     Size.i      ; Размер данных в буфере
; EndStructure
  
#Window = 0
Enumeration    ; Гаджеты
  #SourceText ;+
  #TargetText;+
EndEnumeration
Procedure DragCallback(Action)
  Debug "+++#PB_Drag_Copy...++++DragCallback(Action)= " + Action
    ProcedureReturn #True
EndProcedure

Procedure DropCallback(TargetHandle, State, Format, Action, x, y)
    Debug "+++++++++++++++TargetHandle="+TargetHandle+" State="+State+" Format="+ Format+" #PB_Drag_Copy...="+ Action+" "+ x+" "+ y
    
    ProcedureReturn #True
  EndProcedure

If OpenWindow(#Window, 0, 0, 460, 310, "Drag & Drop", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
   ; SetDragCallback(@DragCallback())
   ; SetDropCallback(@DropCallback())
    
  
    ; Создание и заполнение исходных гаджетов
  ListIconGadget(#SourceText,       10, 10, 340, 140, "Перетащите текст сюда", 330)   
  AddGadgetItem(#SourceText, -1, "Быстрая, коричневая лиса, перепрыгнула через ленивого пса")
  AddGadgetItem(#SourceText, -1, "АБВГДЕЖ")
  AddGadgetItem(#SourceText, -1, "123456789")
    
  ; Создание принимающих гаджетов
  ListIconGadget(#TargetText,  10, 160, 340, 140, "Бросте Текст здесь", 330)
  AddGadgetItem(#TargetText, -1, ""+WindowID(#Window ) )
  AddGadgetItem(#TargetText, -1, ""+GadgetID(#SourceText ) )
  AddGadgetItem(#TargetText, -1, ""+GadgetID(#TargetText ) )
  
  ; Включить возможность отбрасывания на принимающих гаджетах.
  Format = 1; $1234 ;наш формат номер 1 не гарантирует что данные передающие будут верные для других программ.
  EnableGadgetDrop(#TargetText, Format , #PB_Drag_Copy | #PB_Drag_Move ,1 ) ; это только для гаджета
  EnableWindowDrop(#Window    , Format , #PB_Drag_Copy | #PB_Drag_Move ,1 ); так можно бросать прямо на окно

  
  *Buffer =AllocateMemory(1000); сюда будем писать наши данные, в даном случае наш текст и строку которую перемещаем
  D.DragDataFormat ; создаем структуру данных под наш формат. если данных несколько то они повторяются.
   D.DragDataFormat\Format.i=Format    ; (тут число от фонаря, но это может не верно;-)  )Определяемый OS идентификатор формата для перетаскивания (больше информации смотрите ниже)
   D.DragDataFormat\Buffer =*Buffer  ;AllocateMemory(1000)      ; Буфер в памяти, содержащий данные в этом формате
   D.DragDataFormat\Size.i =1000      ; Размер данных в буфере
; PokeS(*Buffer, "ЭТОТ ТЕКСТ ЗАПИСАН В БУФФЕР И ПЕРЕДАН ЧЕРЕЗ ДРАГ.. *Buffer = Буфер в памяти..."  )

Repeat
    Event = WaitWindowEvent() :; Debug Event
    ; Событие DragStart на исходных гаджетах, инициируем drag & drop
    ; Event = #PB_Event_Gadget пришло сообщение от гаджетов,EventGadget()-можно узнать номер устройства
    ; + EventType() =#PB_EventType_DragStart  если началось перетаскивание наверное.
    ; принимает на окно  Event = #PB_Event_WindowDrop ;  = 13105
    ; принимает на гаджет Event = #PB_Event_GadgetDrop

    If Event = #PB_Event_Gadget And EventType() = #PB_EventType_DragStart
        Debug "                 +++++++++началось перетаскивание"
        Select EventGadget(); от какого гаджета было сообщение. Каждый гаджет имеет свои даные-текст, картинки, списки файлов
            Case #SourceText
                Debug "#SourceText ПЕРЕДАЮЩИЙ ListIconGadget()"
                Text$ = GetGadgetItemText(#SourceText, GetGadgetState(#SourceText))
                PokeS(*Buffer, Text$ + "  + ...ЭТОТ ТЕКСТ ЗАПИСАН В БУФЕР И ПЕРЕДАН ЧЕРЕЗ ДРАГ.. *Buffer = Буфер в памяти..."  )
;                 DragPrivate(1)
;                 DragText(Text$) ; текст
DragOSFormats( D.DragDataFormat, 1 )
                
        EndSelect
    EndIf
    ; Событие Drop (сбрасывание) на принимающих гаджетах, получить сброшенные данные
    If  Event = #PB_Event_GadgetDrop ;  принимаем даные.
        Debug "                 +++++++++начался прием и обработка данных"
        Select EventGadget(); от какого гаджета сообщение.
            Case #TargetText
                Debug " #TargetText ПРИНИМАЮЩИЙ ListIconGadget()"
                ;AddGadgetItem(#TargetText, -1, EventDropText()) ; +EventDropText() получаем текст который был передан командой DragText()
                ;        Debug EventDropText()
                
                Debug "EventDropBuffer()= "+EventDropBuffer()
                Debug PeekS( EventDropBuffer() )
                AddGadgetItem(#TargetText, -1, PeekS( EventDropBuffer() )  )
                Debug "EventDropSize()= "+EventDropSize()
        
                Debug "EventDropType()= "+EventDropType()
                Debug "EventDropAction()= "+EventDropAction()
;                 If EventDropType() = #PB_Drop_Private
;                     Debug "EventDropPrivate()= "+EventDropPrivate()
;                 EndIf
                
        EndSelect
    ElseIf Event = #PB_Event_WindowDrop ;  = 13105
        Debug "                 +++++++++#PB_Event_WindowDrop = 13105"
        AddGadgetItem(#TargetText, -1, PeekS( EventDropBuffer() )  )
    EndIf
    
Until Event = #PB_Event_CloseWindow
EndIf

End

0

40

Ну и ещё не много уже слегка готового кода для дерева.

передача данных в ДЕРЕВЕ между прогами в DragOSFormats()

Код:
; Drag&Drop  ; РАБОТАЮ С ДЕРЕВОМ TreeGadget

;МОГУ ПЕРЕДАВАТЬ ТЕКСТ и переменную ЛОНГ ДАННЫЕ ЧЕРЕЗ Drag&Drop

; ДАТА ПЕРЕДЕЛКИ 2022.08...

Dim s1$(20) : For i=0 To 20 : s1$(i) = "1" : Next ;о булочках... создаю текст, а иначе там нулевой адрес. 
Dim s1(20)

; ДЛЯ НАДЕЖНОСТИ МОЖНО ПРИСВОТЬ Nul1 = 2 ВО ВСЕХ ФОРМАТАХ. НА #PB_UTF8 И ОДНОГО ХВАТАЕТ
Nul1 = 2 ; ДЛЯ #PB_Unicode ; ЭТО КОЛИЧЕСТВО БАЙТ ПОСЛЕ ТЕКСТА, ОБЫЧНО ЭТО ЗАВЕРШЕНИЕ ТЕКСТА НУЛЯМИ.
Format = #PB_Unicode

#TreeViev = 0; номер гаджета дерева
#Edit = 1 
#Window = 0;

OpenWindow(#Window, 300, 200, 600, 500, "TreeViev", #PB_Window_SystemMenu |  #PB_Window_MinimizeGadget) 
    hWndTreeViev=TreeGadget(#TreeViev, 0, 0, 300, 500, #PB_Tree_AlwaysShowSelection)
    EditorGadget(#Edit, 320, 20, 250, 120 )
    SetGadgetState(#TreeViev, 0 )

FormatTree = $1234
 ;EnableGadgetDrop(ГАДЖЕТ, ТИП ФОРМАТА, ЧТО СДЕЛАТЬ(копировать/переслать/линк) [, тип приватный])
 ;EnableGadgetDrop(#TreeViev,     #PB_Drop_Text,   #PB_Drag_Copy |  #PB_Drag_Move | #PB_Drag_Link ); 
EnableGadgetDrop(#TreeViev,     #PB_Drop_Text,   #PB_Drag_Copy |  #PB_Drag_Move  )
  EnableGadgetDrop(#Window    , FormatTree , #PB_Drag_Copy | #PB_Drag_Move ); так можно бросать прямо на окно
  
  *Buffer =AllocateMemory(1000); сюда будем писать наши данные, в даном случае наш текст и строку которую перемещаем
  D.DragDataFormat ; создаем струтуру данных под наш формат. если данных несколько то они повторяются.Проще моздать в массиве и номер масива будет количеством.
   D.DragDataFormat\Format.i=FormatTree    ; (тут число от фонаря, может это не верно;-)  )Определяемый OS идентификатор формата для перетаскивания (больше информации смотрите ниже)
   D.DragDataFormat\Buffer =*Buffer  ;AllocateMemory(1000)      ; Буфер в памяти, содержащий данные в этом формате
   D.DragDataFormat\Size.i =1000      ; Размер данных в буфере
   ; это типа аналог данных связанных с веткой, слово на ветку:
s1$= "скушай еще немного этих прекрасных вкусных ароматных булочек и не вздумай отказаться од этой вкуснятины "
For I=0 To  CountString(s1$, " " )-1 ; ищет КОЛИЧЕСТВО СОВПАДЕНИЙ
    s1$(I) = StringField(s1$, I+1, " " ) ; ВЫРЕЗАЕТ СЛОВО ИСПОЛЬЗУЯ РАЗДЕЛИТЕЛЬ
    Debug s1$(I)
    AddGadgetItem(#TreeViev, i,"Итем Item № " + Str(i) + ", #" + Str(i + 100) , 0, i/4 )
    SetGadgetItemData(#TreeViev, I, i + 100 )
    s1(I ) = $12000078 + (i * $100 )
Next

;-Repeat
Repeat
    Event = WaitWindowEvent()
    Select Event
        Case #PB_Event_Gadget ;выбран гаджет
            Position = GetGadgetState(#TreeViev) ;ВОЗВРАЩАЕТ ТЕКУЩИЙ ВЫБРАННЫЙ пункт
            Select EventGadget() ; Gadgets;выбран гаджет номер
                Case #TreeViev   ; сообщение от нашего дерева.
                    Select EventType(); событие мышки
                        Case #PB_EventType_Change ;768, сменился текст или сделан выьор новой строки.
                            ; выводим данные о выделенном итеме в редактор #Edit:
                            nnn = GetGadgetState(#TreeViev)
                            Debug ""+ nnn+" = номер ВЫДЕЛЕНОЙ строки. EventType() = #PB_EventType_Change сменился выбор или название текста итема."
                            If nnn >=0                            
                                S2$= "" + nnn +" =номер выбраного итема" + #LF$
                                S2$+ GetGadgetText(#TreeViev) +" = текст итема" +#LF$
                                S2$+ GetGadgetItemAttribute(#TreeViev, nnn, #PB_Tree_SubLevel) +" = подуровень итема"+ #LF$; Со следующим атрибутом: 
                                S2$+ GetGadgetItemData(#TreeViev, nnn ) +" = Data итема что присвоил" +#LF$
                                S2$+ S1$(nnn)+" = текстовые данные этого итема" +#LF$
                                S2$+ Hex( s1(nnn ), #PB_Long )+" = бинарное число как данные этого итема" +#LF$
    SetGadgetText(#Edit , S2$ ) ; ИЗМЕНЯЕМ Text$
                            EndIf

                        Case #PB_EventType_DragStart ; событие мышки- DragStart начато перетаскивание.
Debug #LF$+ "+++++++++++++++++++++++++ПЕРЕДАЕМ . ПЕРЕТАСКИВАНИЕ НАЧАЛОСЬ EventType() = #PB_EventType_DragStart"
  ;                          Debug Str(DropNum)+ " = номер по порядку. DropNum ":DropNum+1
                            SelectNum = GetGadgetState(#TreeViev)  ; запоминаем номер выбраной строки до команды DragText иначе будет тот на котором отпустили мышку.
                            If  SelectNum >=0
                                ;*m1.myDat = *Buffer
; записываем в память для передачи:
                                *B_ADR = *Buffer ; *B 
                                R= PokeL( *B_ADR  , $12045078 ) : ; ПЕРЕДАЛИ ЧИСЛО ОТ ФОНАРЯ.
                                *B_ADR +  4 ; 8
                                
                                R= PokeL( *B_ADR  , SelectNum ) : ;*m1.myDat\s1.l = SelectNum; +" =номер выбраного итема"; + #LF$
                                *B_ADR +  4 ; 8
                                
                                *B_ADR+ Nul1 + PokeS( *B_ADR  , GetGadgetText(#TreeViev) , -1 , Format );*m1.myDat\s2.s = GetGadgetText(#TreeViev); +" = текст итема"; +#LF$
                                
                                ; *m1.myDat\s3.l =  GetGadgetItemAttribute(#TreeViev, SelectNum, #PB_Tree_SubLevel); +" = подуровень итема";+ #LF$; Со следующим атрибутом: 
                                R= PokeL( *B_ADR  , GetGadgetItemAttribute(#TreeViev, SelectNum, #PB_Tree_SubLevel) ) : 
                                *B_ADR +  4
                                
                                R= PokeL( *B_ADR  , GetGadgetItemData(#TreeViev, SelectNum ) ) : ; *m1.myDat\s4.l = GetGadgetItemData(#TreeViev, SelectNum ); +" = Data итема что присвоил"; +#LF$
                                *B_ADR +  4
                                
                                *B_ADR+ Nul1 + PokeS( *B_ADR  , S1$(SelectNum) , -1 , Format ); *m1.myDat\s5.s = S1$(SelectNum);+" = текстовые данные этого итема"; +#LF$
                                
                                R= PokeL( *B_ADR  , s1 (SelectNum ) ) : ; *m1.myDat\s6.l = s1 (SelectNum );  Hex( s1(SelectNum ), #PB_Long )+" = бинарное число как данные этого итема" +#LF$
                                *B_ADR +  4 
                                
Rezultat = DragOSFormats( D.DragDataFormat, 1 )

                            EndIf
                            
                            Debug Str(Rezultat)+" = результат передачи данных +++++DragText++++ результат перемещения Drag&Drop:"
                            If Rezultat = #PB_Drag_None
                                Debug "#PB_Drag_None пользователь отменил"
                            ElseIf Rezultat = #PB_Drag_Copy
                                Debug "#PB_Drag_Copy пользователь скопировал"
                            ElseIf Rezultat = #PB_Drag_Move
                                Debug "#PB_Drag_Move пользователь переместил, можно удалить у нас то что перемещено"
                                Debug ""+ SelectNum+" = номер ВЫДЕЛЕНОЙ строки." ; нужно запоминать номер выделеного до того как переместили. Иначе будем удалять тот на который отпустили.
RemoveGadgetItem(#TreeViev, SelectNum ) ; удаляем ту строку что переместили
                            ElseIf Rezultat = #PB_Drag_Link
                                Debug "#PB_Drag_Link пользователь создать ссылку"
                            EndIf
                            Debug "-------конец, ДАНЫЕ ПЕРЕДАНЫ"
                            Debug "выбран пункт в дереве, Position = "+Str(Position)
                            Debug "выбран пункт в дереве, GetGadgetState = "+Str(GetGadgetState(#TreeViev))
                            Debug "текст в дереве, GetGadgetText = "+GetGadgetText(#TreeViev)
                           ; Debug "WindowMouseX()= "+Str(WindowMouseX(#Window));координата мышки

                    EndSelect
            EndSelect
            :
        Case #PB_Event_GadgetDrop; принимаем что передано ;#Arbre_DragDrop_Deplacer=0=номера даных DragDrop
            Debug #LF$+ "-      +++++++++++++++++++++++++ПРИНИМАЕМ Drop даные от гаджета, #PB_Event_GadgetDrop"
         ;   Debug Str(DropNum)+" = DropNum номер по порядку ":DropNum+1
            Select EventGadget(); какой гаджет выбран.
                Case #TreeViev; выбрано дерево.
                    Position = GetGadgetState(#TreeViev)
                    Debug Str(Position)+"=позиция в дереве GetGadgetState, наверное тут отпустили мышкой"
                    Debug "EventDropType() = " + EventDropType()
                    Select EventDropType(); Drag&Drop событие мышки
                        Case FormatTree; если получен наш новый навороченый формат данных с бинарными данными.
                            *Buff = EventDropBuffer(): Tab1$= Chr(9): Tab2$= Chr(9) + Chr(9)
                            Debug "FormatTree: адрес EventDropBuffer() = " + *Buff ;EventDropBuffer()
                            Debug "FormatTree: размер данных EventDropSize() = " + EventDropSize()

; ++++++++++++++++считываем с памяти. Размер трудно определять PeekL =4 байта
                            Debug #LF$+"считываем с буфера памяти в котором переслали данные..."
                            *B_ADR = *Buff ;
                            
                            Debug ""+ Hex(PeekL( *B_ADR  ) )+Tab1$+ " =некое число в Hex формате, для проверки"
                            *B_ADR+  4 ; 8
                            
                            Debug ""+ PeekL( *B_ADR  ) +Tab2$+ " = номер выбраного итема который перетаскиваем";= "" + SelectNum; +" =номер выбраного итема"; + #LF$
                            *B_ADR+  4
                            
                            LP$ = PeekS( *B_ADR  , -1 , Format )
                            Debug ""+ LP$ +Tab1$+ " = текст итема которого перетаскиваем";=  GetGadgetText(#TreeViev); +" = текст итема"; +#LF$
                            L= StringByteLength( LP$ , Format ) ; узнаем сколько байт занято и прибавим 2 для формата #PB_Unicode и для надежности.
                            *B_ADR+ Nul1 + L
                            
                            Debug ""+ PeekL( *B_ADR  ) +Tab2$+ " = подуровень итема который перетаскиваем"; =  GetGadgetItemAttribute(#TreeViev, SelectNum, #PB_Tree_SubLevel); +" = подуровень итема";+ #LF$; Со следующим атрибутом: 
                            *B_ADR+  4
                            
                            Debug ""+ PeekL( *B_ADR  ) +Tab2$+ " = Data итема который перетаскиваем"; =  GetGadgetItemData(#TreeViev, SelectNum ); +" = Data итема что присвоил"; +#LF$
                            *B_ADR+  4
                            
                            LP$ = PeekS( *B_ADR  , -1 , Format )
                            Debug ""+ LP$ +Tab2$+ " = текстовые данные c Dim этого итема который перетаскиваем(о булочках)";=  S1$(SelectNum);+" = текстовые данные этого итема"; +#LF$
                            L= StringByteLength( LP$ , Format ) ; узнаем сколько байт занято и прибавим 2 для формата #PB_Unicode и для надежности.
                            *B_ADR+ Nul1 + L
                            
                            Debug ""+Hex( PeekL( *B_ADR  ) ) + Tab1$+ " = число c Dim(), в Hex формате итема который перетаскиваем" ;=  s1(SelectNum );  Hex( s1(SelectNum ), #PB_Long )+" = бинарное число как данные этого итема" +#LF$
                            *B_ADR+  4

                        Case #PB_Drop_Text; #PB_Drop_Private; событие мышки(наверное отпущено)
                            Debug "обработчик в процедуре "
                            Debug "копировать/переместить...EventDropAction() = " + EventDropAction(); #PB_Drag_Copy, #PB_Drag_Move
                            Debug "адрес EventDropBuffer() = " + EventDropBuffer()
                            Debug "размер данных EventDropSize() = " + EventDropSize()
                            Debug "EventDropText() = " + EventDropText()
                            Debug Str(GetGadgetState(#TreeViev) )+" = НОМЕР ВЫДЕЛЕНОго";возвращает НОМЕР ВЫДЕЛЕНОго
                            
AddGadgetItem(#TreeViev, GetGadgetState(#TreeViev)+1, EventDropText() , 0, 0) ; текст отправлен так DragText().

                            Debug ""+ GetGadgetItemData(#TreeViev, GetGadgetState(#TreeViev) ) + " = номер который присвоен в начале"
                            Debug Str(CountGadgetItems(#TreeViev))+" = ВОЗВРАТИТ КОЛИЧЕСТВО итемов в дереве" ;ВОЗВРАТИТ КОЛИЧЕСТВО ПУНКТОВ
                            
                    EndSelect
            EndSelect
            
        EndSelect
    
Until Event = #PB_Event_CloseWindow

0

41

Прошу прощения за излишние коменты в проге и кривые букавки :D

Отредактировано balex1978 (27.08.2022 12:46:45)

0

42

balex1978 написал(а):

Оно нормально не работает, если выделить текст и перемещать.

Работает. Или речь о том что нет события перетаскивания в редактор?
В этом коде есть Как можно передать мои данные используя Drag&Drop. Не текст.

0

43

Пётр написал(а):

Работает. Или речь о том что нет события перетаскивания в редактор?
В этом коде есть Как можно передать мои данные используя Drag&Drop. Не текст.

Если в редактор и инуть текст и часть выделить и потянуть в другую часть редактора...тут начинаются перлы. Оно не перетаскиваются.

0

44

В этом коде все перетаскивается включая текст внутри редактора и из редактора в окно Как можно передать мои данные используя Drag&Drop. Не текст.

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Как можно передать мои данные используя Drag&Drop. Не текст.