2011年10月6日 星期四

#VB DragDrop 控件內容淡色繪製呈現拖拉圖示效果


再來就是應該要能夠繪製多個選取資料
而不是單一個row

重點應該是放在怎麼選擇擷取範圍大小
1. 當多選時,中間可能跳過空白
2. 描繪的基底圖層,是畫面上可視範圍的GridView內容
3. 被選取托放的 row, 被景色深藍
4. 應該空下未被選取的 row, 然後繼續描繪之後有被選取的 row
  *************
  *************
   空白
  *************

可能需要一個一個row判斷

發現說目前的托放動作
有可能畫面上不會出現選取的資料
選取資料在畫面之外

如果照目前走,會碰到說
基底圖層並沒有包含任何選取 row

弄一個空白圖只有一個row表示

有點複雜
除非說我自己控制繪圖

目前先在滑鼠點選的row進行基底圖層的抽取
家個判斷該 row是不是屬於 選取row
不是的話就用個空白的 基底圖層代替

目前又卡在說form跟隨滑鼠跑,但是放開以後,
滑鼠還是在form之上
變成說mouse up事件無法發生在原本表單之上
無法執行關閉 form 的動作

除非說form是完全穿透的狀態
所有事件都會直接穿透

目前設定讓 form 稍微位移,
不至於讓鼠標壓在 圖層form 上

發現目前如果再非合法托放區放開滑鼠
將會造成圖層form停留
無法引發form的關閉

目前想法是
透過一個全域form
只是配合 圖層改變 去呼叫或隱藏 form

用hide跟show會造成表單閃爍
在想看其他方式能不能解決

先這樣

========================================================
再來要讓 form 跟隨滑鼠


            Dim f As Form = PictureBox2.FindForm
            f.Location = New Point(MousePosition.X - (f.Width / 2), MousePosition.Y - (f.Height / 2))

@要注意遺下mouse_up的時候要釋放關閉form
要先將pictureBox從該表單拿掉
        PictureBox2.Dock = DockStyle.None
        PictureBox2.Parent = Nothing
在座關閉動作



VB.NET 调整图片透明度 半透明图片
http://hi.baidu.com/nazi_1911/blog/item/22a73d3eeabc2e1abaa167ba.html

感覺目前做法不太好
應該根本上只是抓圖片
然後對圖片座透明處理
然後再讓他跟隨滑鼠

而不是弄出一個form



@感覺可以做出透明圖片
但是實際上並不能真正穿透
似乎還是要透過form去做到穿透

幹~多此一舉
還是要form
================================================
一直碰壁

可否將DataGridView內容另存為圖檔(含背景顏色)http://www.blueshop.com.tw/board/show.asp?subcde=BRD20080602121510OF2

試著先將girdview存為圖片
然後再切割該圖片內容
































'目前測試可以擷取到所要的範圍

Dim ht As DataGridView.HitTestInfo = DataGridView1.HitTest(e.X, e.Y) 

If ht.RowIndex >= 0 Then 
 Try 
 Dim g As Graphics = Me.DataGridView1.CreateGraphics 
 Dim ibitMap As New Bitmap( _ Me.DataGridView1.ClientSize.Width, _                        Me.DataGridView1.ClientSize.Height, g) 
 Dim DataGridViewRectangle As New _ Rectangle(Me.DataGridView1.ClientRectangle.X, _ Me.DataGridView1.ClientRectangle.Y, _ Me.DataGridView1.ClientSize.Width, _ Me.DataGridView1.ClientSize.Height) 
 Me.DataGridView1.DrawToBitmap(ibitMap, DataGridViewRectangle)
Dim g2 As Graphics = PictureBox2.CreateGraphics()

'擷取範圍 
 Dim rec As Rectangle = New Rectangle(ht.ColumnX, ht.RowY, Me.DataGridView1.ClientSize.Width - 4, DataGridView1.Rows(ht.RowIndex).Height)
 '顯示位置 
 Dim recShow As Rectangle = New Rectangle(0, 0, Me.DataGridView1.ClientSize.Width - 4, DataGridView1.Rows(ht.RowIndex).Height)
g2.DrawImage(ibitMap, recShow, rec, GraphicsUnit.Pixel) 

 Catch ex As Exception
 MessageBox.Show(ex.Message) 
 End Try
 End If



@目前希望將繪圖繪製在pictureBox上
然後開一個新的form
將圖片放在該form
透過form的透明化
來達到需求

但是會需要PictureBox需要不斷重新繪製
不然只要剛呼叫Form.show
就會造成剛剛繪製完成的PictureBox


目前作法是
把 BitMap, 顯示Rectangle, 切割Rectangle 宣告為全域變數
將 PictureBox.Paint 事件加入判斷
當 BitMap 非 Nothing
引發自我重繪
    e.Graphics.DrawImage(ibitMap, recShow, rec, GraphicsUnit.Pixel)



Bitmap.clone 引發記憶體不足問題






=======================================

VB無所不能之四:制作透明和半透明窗體
http://merry05.blog.hexun.com.tw/48876475_d.html

透過建立一個 半透明 form
將繪圖繪製在 form 上
然後讓 form 跟隨滑鼠
直到停止托放

=========================================


VB.net的繪圖 [Part I]





VB.net 繪圖

'圖片擷取
Dim g As Graphics = e.Graphics
Dim im As Image = Image.FromFile("c:\vb教本\picture\Stone.bmp")
Dim 截圖方塊 As Rectangle = New Rectangle(87, 37, 84,104)
Dim 顯示位置 As Rectangle = New Rectangle(0, 0, 84,

104)g.DrawImage(im, 顯示位置, 截圖方塊, GraphicsUnit.Pixel)

Bitmap.MakeTransparent 方法 ()


為這個 Bitmap 將預設的透明色彩變為透明。



'有機會改改托放作業的顯示方式
希望做到panel淡色描繪的玻璃樣式

RegionData 類別

描繪區塊內容


HOW TO:使用區域的裁剪


看起來這些好像是把文字繪製在控件上面

有點不符需求

Winform中DataGridView单元格内容字体突出显示
http://hi.baidu.com/xiangboren/blog/item/1bbf9fd422ebc50ca08bb7b5.html


HOW TO:使用 Windows Form DataGridView 控制項中的影像資料行



為何不使用 Contro.DrawToBitmap 方法
http://blog.xuite.net/alwaysfuturevision/liminzhang/8534715


看能不能抓到點選 row 的 location
從該row去描繪

或是說透過panel
描繪一個方塊
複製點選區塊


======================================================================


.NET中DragDrop的光标






Control.GiveFeedback 事件



目前可以描繪控制向外框
但是侷限在controls
要找辦法描繪 GridViewRow
然後描繪整個row,而不只是外框

沒有留言:

張貼留言