Копирование физического файла с диска в буфер обмена

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
NewUser
Старожил
Сообщения: 238
Зарегистрирован: 10 Ноябрь 2005, 23:07
Откуда: Краснодар
Благодарил (а): 9 раз

Копирование физического файла с диска в буфер обмена

Сообщение NewUser »

Вот ещё довесок к раннее приведенному Дипсиком коду:
Поддержка Unicode
Если нужна поддержка Unicode (для путей в UTF-16), замените:

DragQueryFileA → DragQueryFileW
fWide = FALSE → fWide = TRUE

Этот код должен работать в Clarion 6, 7, 10 и других версиях. Если что-то не работает, проверьте:
• Подключены ли CWINDOWS.INC и CSHELL.INC.
• Корректность пути к файлу (лучше использовать абсолютный путь).
NewUser
Старожил
Сообщения: 238
Зарегистрирован: 10 Ноябрь 2005, 23:07
Откуда: Краснодар
Благодарил (а): 9 раз

Копирование физического файла с диска в буфер обмена

Сообщение NewUser »

finsoftrz писал(а): 20 Июнь 2025, 12:11 Я бы не очень обращал внимание на то, что пишет Дипсик.
Всё верно! Так и есть. Но:
а) он подтвердил негативный эмпирический опыт по невозможности вставки пути к файлу в некоторые программы для их прикрепления;
б) выдает вполне структурированный (и проверенный, что не мало важно - Дедом Пахомом) код, который можно уже самому править с точки зрения знания синтаксиса, если есть, конечно, знание и опыт (за которым я, собственно, и обратился к сообществу, раз уж нет готового решения "под ключ").
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 6164
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 26 раз
Поблагодарили: 92 раза

Копирование физического файла с диска в буфер обмена

Сообщение finsoftrz »

Если есть знание и опыт, код быстрее написать, чем вникать в ту чепуху, которую дает Дипсик. ИИ это сейчас скорее для начинающих программистов, чтобы уменьшить отвлечение более квалифицированных на их обучение. Со временем будет, видимо, наращивать свои базы знаний. Но это не про кларион, он слишком мало распространен. И среди кларионистов хватает модных старперов, которые будут его учить чему-то нехорошему. :lol:
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8812
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 155 раз

Копирование физического файла с диска в буфер обмена

Сообщение Игорь Столяров »

Всем привет !

Меня тоже заставили сделать отправку файла с счетом через буфер обмена в MAX (-ик) . :D
Для записи данных в ClipBoard юзаю класс из библиотеки FreeImage и методы из класса АТОЛ.
А чего добру пропадать если уже всё сделано ? Не принципиально, здесь главное заполнить структуру данных.

Код: Выделить всё

LinkToClipBoard  Procedure(String sFileName)
cb            SaClipboardClass  ! Работа с ClipBoard из FreeImage
loc_W         &WINDOW
cbText        UnSigned,Auto
hDropStruct   Group
pFiles          Long   ! offset from here to FileList
pt              Group
pt_x              Long
pt_y              Long
                end
fNC             Long
fWide           Long   
FileList        String(File:MaxFileName * 2)
              end
  Code
  loc_W &= Null
  If cb.OpenClipboard(loc_W) = True
     
     Clear(hDropStruct.FileList)
     hDropStruct.pFiles   = 20 ! 14h 
     hDropStruct.fWide    =  1   
     hDropStruct.filelist = Atol::ASCIIToUnicode(sFileName) & '<0,0>'
    
     cbText = 20 + (Len(Clip(sFileName)) * 2) + 3

     If cb.SetClipboard(Address(hDropStruct), cbText, SA_CF_HDROP)
        Atol::FastMess(1,'Выполните вставку ссылки в MAX<13,10>Клавиши: CTRL + V')
     end   

     cb.CloseClipboard()     
  else
     Atol::FastMess(3,'Нет доступа к буферу обмена Windows !')
  end
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Ответить