Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Вопрос о перетаскивании PictureBox Добавлено: 08.12.08 20:49  

Автор вопроса:  busha
У меня есть PictureBox, я хочу его перетаскивать с места на место, для этого есть Form.DragOver, делаю Picture.DragMode = Automatic, при перетаскивании появляется рамка, а как заменить эту рамку на саму картинку, вернее ее дубликат

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 Фенягz



ICQ: 387437448 

Вопросов: 7
Ответов: 202
 Web-сайт: atauenis.narod.ru/
 Профиль | | #1
Добавлено: 08.12.08 21:43
Грузи рисунок из PB в курсор.

Ответить

Номер ответа: 2
Автор ответа:
 busha



Вопросов: 22
Ответов: 18
 Профиль | | #2 Добавлено: 08.12.08 22:05
пытался, он ругается Overflow или неправильный метод
я писал в Picture.DragOver "Picture.MouseIcon=Picture.Picture", как это еще можно сделать? А, люди?

Ответить

Номер ответа: 3
Автор ответа:
 Фенягz



ICQ: 387437448 

Вопросов: 7
Ответов: 202
 Web-сайт: atauenis.narod.ru/
 Профиль | | #3
Добавлено: 08.12.08 23:04
busha пишет:
я писал в Picture.DragOver "Picture.MouseIcon=Picture.Picture"

CRAZY! :-| :-D Скажи, рисунок в ПикчерБокс грузится динамически или он заранее задан в DesingTime?
PS:Я не спец в VBA, у меня вообще ОткрытыйОфис 1.1.5 и я разбираюсь больше в VB6. Может, мои советы подойдут и к мифу (vba)...

Ответить

Номер ответа: 4
Автор ответа:
 busha



Вопросов: 22
Ответов: 18
 Профиль | | #4 Добавлено: 08.12.08 23:36
Рисунок грузится с зашитого рисунка в другой форме.
Кстати я тоже работаю в VB6

Ответить

Номер ответа: 5
Автор ответа:
 Kardinal



ICQ: 360041513 

Вопросов: 1
Ответов: 164
 Web-сайт: kg7.ru
 Профиль | | #5
Добавлено: 09.12.08 08:44
Можно при событии начала перетаскивания начать таскать еще один пикчербокс за мышкой:-)

Ответить

Номер ответа: 6
Автор ответа:
 Фенягz



ICQ: 387437448 

Вопросов: 7
Ответов: 202
 Web-сайт: atauenis.narod.ru/
 Профиль | | #6
Добавлено: 09.12.08 22:50
busha пишет:
Рисунок грузится с зашитого рисунка в другой форме.

А на той форме рисунок постоянный? Можно сделать курсор (CUR) в виде того рисунка (BMP, хоть?)

Ответить

Номер ответа: 7
Автор ответа:
 Kardinal



ICQ: 360041513 

Вопросов: 1
Ответов: 164
 Web-сайт: kg7.ru
 Профиль | | #7
Добавлено: 10.12.08 08:47
Да курсором было б проще:-). Но если рисунок большой не похоже чтоб он влез за курсор:-).

Ответить

Номер ответа: 8
Автор ответа:
 Фенягz



ICQ: 387437448 

Вопросов: 7
Ответов: 202
 Web-сайт: atauenis.narod.ru/
 Профиль | | #8
Добавлено: 10.12.08 14:46
Kardinal пишет:
Да курсором было б проще:-)

Да :)
Kardinal пишет:
Но если рисунок большой не похоже чтоб он влез за курсор:-)

Можно сделать в курсоре его уменьшенную копию-"превью" как у iPicture. ;)

Ответить

Номер ответа: 9
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #9 Добавлено: 10.12.08 15:19
Можно сделать в курсоре его уменьшенную копию

Можно.
  1.  
  2. Option Explicit
  3.     
  4. Private Type GUID
  5.     Data1 As Long
  6.     Data2 As Integer
  7.     Data3 As Integer
  8.     Data4(7) As Byte
  9.     data5(16) As Byte
  10. End Type
  11.  
  12. Private Type BITMAP '14 bytes
  13.         bmType As Long
  14.         bmWidth As Long
  15.         bmHeight As Long
  16.         bmWidthBytes As Long
  17.         bmPlanes As Integer
  18.         bmBitsPixel As Integer
  19.         bmBits As Long
  20. End Type
  21.  
  22. Private Type ICOPICTDESC
  23.     cbSize As Long
  24.     picType As Long
  25.     hicon As Long
  26. End Type
  27.  
  28. Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (lpPictDesc As ICOPICTDESC, riid As Any, ByVal fOwn As Long, ipic As IPicture) As Long
  29. Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, ByVal lpBits As Long) As Long
  30. Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
  31. Private Declare Function CreateIcon Lib "user32" (ByVal hInstance As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Byte, ByVal nBitsPixel As Byte, lpANDbits As Byte, lpXORbits As Byte) As Long
  32.  
  33. Private Const OBJ_BITMAP = 7
  34.  
  35.  
  36. Private Sub Picture1_DragOver(Source As Control, X As Single, Y As Single, State As Integer)
  37.     Dim myBmp As BITMAP
  38.     Dim bmp() As Byte
  39.     Dim guidstr As GUID
  40.     Dim oleico As ICOPICTDESC
  41.     Dim stdpic As StdPicture
  42.     Call GetObject(Picture1.Image.Handle, LenB(myBmp), myBmp)
  43.     ReDim bmp(myBmp.bmHeight * myBmp.bmWidthBytes)
  44.     Call GetBitmapBits(Picture1.Image.Handle, myBmp.bmWidthBytes * myBmp.bmHeight, VarPtr(bmp(0)))
  45.     With oleico
  46.         .cbSize = LenB(oleico)
  47.         .hicon = CreateIcon(App.hInstance, myBmp.bmWidth, myBmp.bmHeight, myBmp.bmPlanes, myBmp.bmBitsPixel, bmp(0), bmp(0))
  48.         .picType = vbPicTypeIcon
  49.     End With
  50.     With guidstr
  51.         .Data1 = &H20400
  52.         .Data4(0) = &HC0
  53.         .Data4(7) = &H46
  54.     End With
  55.   Call OleCreatePictureIndirect(oleico, guidstr, True, stdpic)
  56.   Set Picture1.DragIcon = stdpic
  57.   
  58. End Sub

Можно и всю картинку таскать, может позже напишу, если нужно.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам