home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 6_2008-2009.ISO / data / zips / A_Real_Inp2140301122009.psc / FrmInPaint.frm < prev    next >
Text File  |  2009-01-11  |  16KB  |  568 lines

  1. VERSION 5.00
  2. Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "comdlg32.ocx"
  3. Begin VB.Form FrmInPaint 
  4.    Caption         =   "Real InPainting in VB"
  5.    ClientHeight    =   7110
  6.    ClientLeft      =   165
  7.    ClientTop       =   855
  8.    ClientWidth     =   7560
  9.    Icon            =   "FrmInPaint.frx":0000
  10.    KeyPreview      =   -1  'True
  11.    LinkTopic       =   "Form1"
  12.    ScaleHeight     =   474
  13.    ScaleMode       =   3  'Pixel
  14.    ScaleWidth      =   504
  15.    StartUpPosition =   3  'Windows-Standard
  16.    Begin VB.PictureBox PicScroll 
  17.       BorderStyle     =   0  'Kein
  18.       Height          =   5775
  19.       Left            =   120
  20.       ScaleHeight     =   385
  21.       ScaleMode       =   3  'Pixel
  22.       ScaleWidth      =   489
  23.       TabIndex        =   11
  24.       Top             =   1320
  25.       Width           =   7335
  26.       Begin VB.VScrollBar VscrPic 
  27.          Height          =   7335
  28.          LargeChange     =   10
  29.          Left            =   8520
  30.          TabIndex        =   14
  31.          Top             =   0
  32.          Visible         =   0   'False
  33.          Width           =   255
  34.       End
  35.       Begin VB.Frame FrmHide 
  36.          BorderStyle     =   0  'Kein
  37.          Height          =   255
  38.          Left            =   8520
  39.          TabIndex        =   13
  40.          Top             =   7440
  41.          Visible         =   0   'False
  42.          Width           =   255
  43.       End
  44.       Begin VB.HScrollBar HscrPic 
  45.          Height          =   255
  46.          LargeChange     =   10
  47.          Left            =   0
  48.          TabIndex        =   12
  49.          Top             =   7560
  50.          Visible         =   0   'False
  51.          Width           =   8415
  52.       End
  53.       Begin VB.PictureBox PicOrg 
  54.          AutoRedraw      =   -1  'True
  55.          AutoSize        =   -1  'True
  56.          BackColor       =   &H00000000&
  57.          BorderStyle     =   0  'Kein
  58.          FillColor       =   &H0000FF00&
  59.          FillStyle       =   0  'Ausgefⁿllt
  60.          ForeColor       =   &H0000FF00&
  61.          Height          =   5700
  62.          Left            =   0
  63.          MousePointer    =   2  'Kreuz
  64.          OLEDropMode     =   1  'Manuell
  65.          ScaleHeight     =   380
  66.          ScaleMode       =   3  'Pixel
  67.          ScaleWidth      =   487
  68.          TabIndex        =   15
  69.          Top             =   0
  70.          Width           =   7305
  71.       End
  72.    End
  73.    Begin VB.CommandButton CmdBox 
  74.       Caption         =   "Box"
  75.       Height          =   495
  76.       Left            =   5295
  77.       Picture         =   "FrmInPaint.frx":1272
  78.       Style           =   1  'Grafisch
  79.       TabIndex        =   10
  80.       Top             =   735
  81.       Width           =   600
  82.    End
  83.    Begin VB.CommandButton CmdLine 
  84.       Caption         =   "Poly"
  85.       Height          =   495
  86.       Left            =   4575
  87.       Picture         =   "FrmInPaint.frx":15D6
  88.       Style           =   1  'Grafisch
  89.       TabIndex        =   9
  90.       Top             =   735
  91.       Width           =   600
  92.    End
  93.    Begin VB.HScrollBar HScroll2 
  94.       Height          =   255
  95.       LargeChange     =   10
  96.       Left            =   6120
  97.       Max             =   500
  98.       Min             =   10
  99.       SmallChange     =   2
  100.       TabIndex        =   6
  101.       Top             =   960
  102.       Value           =   10
  103.       Width           =   975
  104.    End
  105.    Begin VB.HScrollBar HScroll1 
  106.       Height          =   255
  107.       LargeChange     =   8
  108.       Left            =   6120
  109.       Max             =   32
  110.       Min             =   2
  111.       SmallChange     =   2
  112.       TabIndex        =   3
  113.       Top             =   240
  114.       Value           =   4
  115.       Width           =   975
  116.    End
  117.    Begin VB.CheckBox ChkPrev 
  118.       Caption         =   "Preview"
  119.       Height          =   255
  120.       Left            =   4560
  121.       TabIndex        =   2
  122.       Top             =   420
  123.       Value           =   1  'Aktiviert
  124.       Width           =   1215
  125.    End
  126.    Begin MSComDlg.CommonDialog CMDlg 
  127.       Left            =   3600
  128.       Top             =   3120
  129.       _ExtentX        =   847
  130.       _ExtentY        =   847
  131.       _Version        =   393216
  132.       CancelError     =   -1  'True
  133.    End
  134.    Begin VB.CommandButton CmdInpaint 
  135.       Caption         =   "Remove"
  136.       Height          =   255
  137.       Left            =   4560
  138.       TabIndex        =   0
  139.       Top             =   120
  140.       Width           =   1335
  141.    End
  142.    Begin VB.Label LblInfo2 
  143.       Caption         =   $"FrmInPaint.frx":198C
  144.       Height          =   1095
  145.       Left            =   120
  146.       TabIndex        =   16
  147.       Top             =   120
  148.       Visible         =   0   'False
  149.       Width           =   4335
  150.    End
  151.    Begin VB.Shape ShpMark 
  152.       BorderWidth     =   3
  153.       Height          =   525
  154.       Left            =   4560
  155.       Top             =   720
  156.       Width           =   630
  157.    End
  158.    Begin VB.Label Label5 
  159.       Caption         =   "Scannborder"
  160.       Height          =   255
  161.       Left            =   6120
  162.       TabIndex        =   8
  163.       Top             =   720
  164.       Width           =   1575
  165.    End
  166.    Begin VB.Label Label4 
  167.       Caption         =   "10"
  168.       Height          =   255
  169.       Left            =   7200
  170.       TabIndex        =   7
  171.       Top             =   960
  172.       Width           =   495
  173.    End
  174.    Begin VB.Label Label3 
  175.       Caption         =   "Blocksize"
  176.       Height          =   255
  177.       Left            =   6120
  178.       TabIndex        =   5
  179.       Top             =   45
  180.       Width           =   975
  181.    End
  182.    Begin VB.Label Label2 
  183.       Caption         =   "4"
  184.       Height          =   255
  185.       Left            =   7200
  186.       TabIndex        =   4
  187.       Top             =   240
  188.       Width           =   255
  189.    End
  190.    Begin VB.Label LblInfo 
  191.       Caption         =   $"FrmInPaint.frx":1A84
  192.       Height          =   975
  193.       Left            =   120
  194.       TabIndex        =   1
  195.       Top             =   120
  196.       Width           =   4335
  197.    End
  198.    Begin VB.Menu MnuFile 
  199.       Caption         =   "File"
  200.       Begin VB.Menu MunLoad 
  201.          Caption         =   "Load"
  202.       End
  203.       Begin VB.Menu MnuSave 
  204.          Caption         =   "Save"
  205.       End
  206.       Begin VB.Menu MnuLine1 
  207.          Caption         =   "-"
  208.       End
  209.       Begin VB.Menu MnuExit 
  210.          Caption         =   "Exit"
  211.       End
  212.    End
  213. End
  214. Attribute VB_Name = "FrmInPaint"
  215. Attribute VB_GlobalNameSpace = False
  216. Attribute VB_Creatable = False
  217. Attribute VB_PredeclaredId = True
  218. Attribute VB_Exposed = False
  219. Option Explicit
  220. 'Simple form to demonstrate the Inpaint routine
  221. 'I┤ve written the gui in about 10 Minutes
  222. 'the real thing is the inpainting.bas
  223. 'Scythe 2009
  224.     
  225.     
  226. 'Version 1.0.18
  227. 'Removed Bug with Picture Scrollbars
  228. 'The Scrollbars Position was on the Forms border and not on the Pictures Border
  229. '
  230. 'Improved speed in Inpaint.bas
  231. 'Recoded PatchTexture to get 46% faster result with Bungee Jumper sample
  232. 'Thanks to ThePiper for his idea (about 17% more speed)
  233.  
  234.  
  235. 'Version 1.0.17
  236. 'Removed Compiling BUG
  237. 'In Project Properties / Compile / Advanced
  238. 'Disable Remove Array Bounds Checks
  239. 'If not the programm will crash if you inpaint near the borders of the picture
  240. '
  241. 'Removed error in DoInPaint
  242. 'm_width = UBound(PicAr1, 1) should be m_width = UBound(PicAr1, 1) + 1
  243. 'm_height = UBound(PicAr1, 2) should be m_height = UBound(PicAr1, 2) + 1
  244. 'Now it scanns the whole picture
  245. '
  246. 'Added Scrollbars to the Picture
  247. 'Now you can resize the form
  248. '
  249. 'Added Box as Drawmode
  250.  
  251. 'Fixed an error in Polydraw
  252. 'Added Close Poly if you click near the start Point
  253. '
  254. 'Added Copy and Paste for fast transfer Picture to or from other Apps
  255.  
  256.  
  257.     Const ABS_AUTOHIDE = &H1
  258.     Const ABS_ONTOP = &H2
  259.     Const ABM_GETSTATE = &H4
  260.     Const ABM_GETTASKBARPOS = &H5
  261. Private Type RECT
  262.     Left As Long
  263.     Top As Long
  264.     Right As Long
  265.     Bottom As Long
  266. End Type
  267.  
  268. Private Type APPBARDATA
  269.     cbSize As Long
  270.     hwnd As Long
  271.     uCallbackMessage As Long
  272.     uEdge As Long
  273.     rc As RECT
  274.     lParam As Long '  message specific
  275. End Type
  276.  
  277. Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long
  278.  
  279. Private Type POINTAPI
  280.     X As Long
  281.     Y As Long
  282. End Type
  283.  
  284. Private Declare Function Polygon Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long
  285. Private Position() As POINTAPI
  286. Private Polyctr As Long
  287. Private DrawType As Long
  288.  
  289. Private Sub CmdInpaint_Click()
  290. Dim X As Long
  291.     If CmdInpaint.Caption = "Remove" Then
  292.         CmdInpaint.Caption = "STOP"
  293.         Me.MousePointer = 11
  294.         StopIt = False
  295.         X = DoInPaint(PicOrg, PicOrg, 0, 255, 0, CBool(ChkPrev.Value), HScroll1.Value, HScroll2.Value)
  296.         CmdInpaint.Caption = "Remove"
  297.         Me.MousePointer = 0
  298.         If X > 0 Then MsgBox "Done" & vbCrLf & "Needed " & X & " repeats"
  299.     Else
  300.         CmdInpaint.Caption = "Remove"
  301.         Me.MousePointer = 0
  302.         StopIt = True
  303.     End If
  304. End Sub
  305. Private Function InIDE() As Boolean
  306.  
  307.     On Error GoTo DivideError
  308.     Debug.Print 1 / 0
  309.     InIDE = False
  310.     Exit Function
  311. DivideError:
  312.     InIDE = True
  313.  
  314. End Function
  315.  
  316. Private Sub CmdLine_Click()
  317.  
  318.     ShpMark.Top = CmdLine.Top - 1
  319.     ShpMark.Left = CmdLine.Left - 1
  320.     DrawType = 0
  321.     LblInfo.Visible = True
  322.     LblInfo2.Visible = False
  323.     Polyctr = -1
  324.     PicOrg.Cls
  325.  
  326. End Sub
  327. Private Sub CmdBox_Click()
  328.  
  329.     ShpMark.Top = CmdBox.Top - 1
  330.     ShpMark.Left = CmdBox.Left - 1
  331.     DrawType = 1
  332.     LblInfo.Visible = False
  333.     LblInfo2.Visible = True
  334.     Polyctr = -1
  335.     PicOrg.Cls
  336.  
  337. End Sub
  338.  
  339. Private Sub Form_Load()
  340.  
  341.     If InIDE Then MsgBox "Compile me to see the real speed", vbCritical
  342.     Polyctr = -1
  343.  
  344. End Sub
  345. Private Sub Form_KeyPress(KeyAscii As Integer)
  346. 'Strg C (Copy to Clipboard)
  347. 'Strg V (Paste from Clipboard)
  348.  
  349.     If KeyAscii = 22 Then
  350.         If Clipboard.GetFormat(vbCFBitmap) = True Then
  351.             PicOrg.Picture = Clipboard.GetData
  352.             ResizePic
  353.         End If
  354.     End If
  355.     If KeyAscii = 3 Then
  356.         Clipboard.Clear
  357.         Clipboard.SetData PicOrg.Image
  358.     End If
  359.  
  360. End Sub
  361. Private Sub Form_Resize()
  362.  
  363.     If Me.WindowState = vbMinimized Then Exit Sub
  364.     If Me.WindowState = vbMaximized Then
  365.         ResizePic
  366.         Exit Sub
  367.     End If
  368. Dim X As Long
  369. Dim Y As Long
  370.     Y = Me.ScaleHeight
  371.  
  372.     X = Me.ScaleWidth
  373.     If Y < 400 Then Y = 400
  374.     Y = Y * Screen.TwipsPerPixelY + Me.Height - Me.ScaleHeight * Screen.TwipsPerPixelY
  375.     If X < 504 Then X = 504
  376.     X = X * Screen.TwipsPerPixelX + Me.Width - Me.ScaleWidth * Screen.TwipsPerPixelX
  377.     Me.Width = X
  378.     Me.Height = Y
  379.     ResizePic
  380.  
  381. End Sub
  382. Private Sub Form_Terminate()
  383.     
  384.     MnuExit_Click
  385.    
  386. End Sub
  387. Private Sub ResizePic()
  388.  
  389. Dim X As Long
  390. Dim Y As Long
  391.     Y = (PicOrg.Height + PicScroll.Top + Me.Height / Screen.TwipsPerPixelY - Me.ScaleHeight + 4) * Screen.TwipsPerPixelY
  392.  
  393.     X = (PicOrg.Width + 24) * Screen.TwipsPerPixelX
  394.     If X < 589 * Screen.TwipsPerPixelX Then X = 589 * Screen.TwipsPerPixelX
  395.     If X > Screen.Width Then
  396.         X = Screen.Width
  397.     End If
  398.     If Y > Screen.Height - TaskBarHeight Then
  399.         Y = Screen.Height - TaskBarHeight
  400.     End If
  401. 'Add Scrollbars if the picture is to big
  402.     PicScroll.Width = Me.ScaleWidth - 16
  403.     PicScroll.Height = Me.ScaleHeight - 88
  404.     If PicOrg.Width > PicScroll.Width Then HscrPic.Visible = True Else HscrPic.Visible = False
  405.     If PicOrg.Height > PicScroll.Height Then VscrPic.Visible = True Else VscrPic.Visible = False
  406.     FrmHide.Visible = IIf(HscrPic.Visible Or VscrPic.Visible, True, False)
  407.     X = IIf(PicScroll.Width - 12 > PicOrg.Width + 12, PicOrg.Width, PicScroll.Width - 12)
  408.     Y = IIf(PicScroll.Height - 12 > PicOrg.Height + 12, PicOrg.Height, PicScroll.Height - 12)
  409.     HscrPic.Move 0, Y, X, 12
  410.     VscrPic.Move X, 0, 12, Y
  411.     HscrPic.max = PicOrg.Width - HscrPic.Width
  412.     VscrPic.max = PicOrg.Height - VscrPic.Height
  413.     HscrPic.LargeChange = PicOrg.Width
  414.     VscrPic.LargeChange = PicOrg.Height
  415.     If Not HscrPic.Visible Then HscrPic.max = HscrPic.max - 12
  416.     If Not VscrPic.Visible Then VscrPic.max = VscrPic.max - 12
  417.     FrmHide.Move HscrPic.Width, VscrPic.Height, 12, 12
  418.     HscrPic.Value = 0
  419.     VscrPic.Value = 0
  420.  
  421. End Sub
  422. Private Sub MunLoad_Click()
  423.  
  424.     On Error GoTo ErrOut
  425.     CMDlg.Filter = "Pictures|*.bmp;*.gif;*.jpg"
  426.     CMDlg.ShowOpen
  427.     If CMDlg.filename <> "" Then
  428.         Set PicOrg = LoadPicture(CMDlg.filename)
  429.         ResizePic
  430.     End If
  431. ErrOut:
  432.  
  433. End Sub
  434.  
  435. Private Sub HScroll1_Change()
  436.  
  437.     Label2 = HScroll1.Value
  438.     'for a good result the Scannborder has to be min 2 times the blocksize
  439.     If HScroll2.Value < HScroll1.Value * 2 Then HScroll2.Value = HScroll1.Value * 2
  440.  
  441. End Sub
  442.  
  443. Private Sub HScroll2_Change()
  444. Label4 = HScroll2.Value
  445. End Sub
  446.  
  447. Private Sub MnuExit_Click()
  448.  
  449.     StopIt = True
  450.     Unload Me
  451.     End
  452.  
  453. End Sub
  454. Private Sub MnuSave_Click()
  455.  
  456.     On Error GoTo ErrOut
  457.     CMDlg.Flags = &H2
  458.     CMDlg.Filter = "Windows Bitmap|*.bmp"
  459.     CMDlg.ShowSave
  460.     If CMDlg.filename <> "" Then
  461.         SavePicture PicOrg.Image, CMDlg.filename
  462.     End If
  463. ErrOut:
  464.  
  465. End Sub
  466.  
  467. Private Sub PicOrg_DblClick()
  468.  
  469.     If DrawType <> 0 Then Exit Sub
  470.     PicOrg.Cls
  471.     PicOrg.AutoRedraw = True
  472.     Polygon PicOrg.hdc, Position(0), Polyctr + 1
  473.     PicOrg.AutoRedraw = False
  474.     PicOrg.Refresh
  475.     Polyctr = -1
  476.  
  477. End Sub
  478. Private Sub PicOrg_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  479.  
  480. Dim i As Long
  481.  
  482.      If Button = 2 Then
  483.         Polyctr = -1
  484.         PicOrg.Cls
  485.         Exit Sub
  486.     End If
  487.     If DrawType = 1 Then
  488.         If Polyctr = -1 Then
  489.             Polyctr = 1
  490.             ReDim Position(Polyctr)
  491.             Position(Polyctr).X = X
  492.             Position(Polyctr).Y = Y
  493.             Else
  494.             PicOrg.Cls
  495.             PicOrg.AutoRedraw = True
  496.             PicOrg.Line (Position(1).X, Position(1).Y)-(X, Y), , BF
  497.             PicOrg.AutoRedraw = False
  498.             Polyctr = -1
  499.         End If
  500.     Else
  501.         If Polyctr > 1 Then
  502.             If X > Position(0).X - 2 And X < Position(0).X + 2 And Y > Position(0).Y - 2 And Y < Position(0).Y + 2 Then
  503.                 PicOrg_DblClick
  504.                 Exit Sub
  505.             End If
  506.         End If
  507.         Polyctr = Polyctr + 1
  508.         ReDim Preserve Position(Polyctr)
  509.         Position(Polyctr).X = X
  510.         Position(Polyctr).Y = Y
  511.         If Polyctr > 0 Then
  512.             For i = 1 To Polyctr
  513.                 PicOrg.Line (Position(i - 1).X, Position(i - 1).Y)-(Position(i).X, Position(i).Y)
  514.             Next i
  515.         End If
  516.     End If
  517.  
  518. End Sub
  519. Private Sub PicOrg_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  520.  
  521. Dim i As Long
  522.  
  523.     PicOrg.Cls
  524.     If DrawType = 0 Then
  525.         If Polyctr > -1 Then
  526.             For i = 1 To Polyctr
  527.                 PicOrg.Line (Position(i - 1).X, Position(i - 1).Y)-(Position(i).X, Position(i).Y)
  528.             Next i
  529.             PicOrg.DrawMode = 6
  530.             PicOrg.Line (Position(Polyctr).X, Position(Polyctr).Y)-(X, Y)
  531.             PicOrg.DrawMode = 13
  532.         End If
  533.         Else
  534.         If Polyctr = 1 Then
  535.             PicOrg.DrawMode = 6
  536.             PicOrg.Line (Position(1).X, Position(1).Y)-(X, Y), , BF
  537.             PicOrg.DrawMode = 13
  538.         End If
  539.     End If
  540.  
  541. End Sub
  542. Private Sub VscrPic_Change()
  543.  
  544.     PicOrg.Top = -VscrPic.Value
  545.  
  546. End Sub
  547. Private Sub HscrPic_Change()
  548.  
  549.     PicOrg.Left = -HscrPic.Value
  550.  
  551. End Sub
  552. Private Function TaskBarHeight() As Long
  553.  
  554. Dim ABD As APPBARDATA
  555. Dim ret As Long
  556. 'Get the taskbar's position
  557.     SHAppBarMessage ABM_GETTASKBARPOS, ABD
  558. 'Get the taskbar's state
  559.     ret = SHAppBarMessage(ABM_GETSTATE, ABD)
  560.     If (ret And ABS_AUTOHIDE) Then
  561.         TaskBarHeight = 0
  562.         Else
  563.         TaskBarHeight = ABD.rc.Top
  564.     End If
  565.  
  566. End Function
  567.  
  568.