LEADTOOLS Upgrade from VBX to ActiveX

When upgrading from the LEADTOOLS VBX to the LEADTOOLS ActiveX, some properties are the same and require no changes. For other properties, either their usage has changed, or they have been replaced by other properties or methods.

This topic describes how to change your code when upgrading from an existing VBX application. Upgrading requires the following steps:

1. Replace the controls.

2. Ensure that LVB_ constants are not defined or hard-coded.

3. Replace changed LVB_ constants.

4. Remove the LVB_ prefix from remaining constants.

5. Make the simple property-to-method changes.

6. Make the rest of the changes.

7. Note the properties that have not changed.

The remainder of this topic describes the steps in detail. (Everything is in one topic so that you can easily print it or copy it to your text editor.)

1. Replace all LEAD VBX controls.

For each control, make notes on any important design-time properties, delete the VBX control, and replace it with an ActiveX control. Then, update the Name property and any other important design-time properties (such as data properties) so that they match the former VBX control.

Ensure that the ScaleMode property is initialized to be the same as the parent form, which was the default for the VBX control.

2. Ensure that LVB_ constants are not defined or hard-coded.

The values of constants have changed; so they should not be defined or hard-coded in your program. In Visual Basic, the definitions no longer need to be included. For other development systems, refer to the ActiveX tutorial to see files that must be included.

There are three exceptions: LVB_KEY_DOCUMENT, LVB_KEY_GIFLZW, and LVB_KEY_TIFLZW. Definitions of these constants should remain in your application if you have implemented GIF, TIFF LZW, or LEADTOOLS Document/Medical capabilities. (You will change the names of the constants in the next step.)

In Visual Basic, you can search for "Global Const LVB_" to find and delete the other definitions.

3. Replace changed LVB_ constants.

You can change most VBX constants to ActiveX constants by removing the LVB_ prefix. However, the following constants have changed more than that, and you must replace them individually:

VBX Constant

ActiveX Constant

LVB_BITONAL_FAVORBLACK

BITONALSCALING_FAVORBLACK

LVB_BITONAL_NORMAL

BITONALSCALING_NORMAL

LVB_BITONAL_SCALETOGRAY

BITONALSCALING_SCALETOGRAY

LVB_DILATION_DIAG

BFLT_DILATION_DIAG

LVB_DILATION_HORZ

BFLT_DILATION_HORZ

LVB_DILATION_OMNI

BFLT_DILATION_OMNI

LVB_DILATION_VERT

BFLT_DILATION_VERT

LVB_DITHER_BURKES

CRD_BURKESDITHERING

LVB_DITHER_FLOYD

CRD_FLOYDSTEINDITHERING

LVB_DITHER_JARVIS

CRD_JARVISDITHERING

LVB_DITHER_LAST

CRD_ORDEREDDITHERING

LVB_DITHER_NONE

CRD_NODITHERING

LVB_DITHER_ORDERED

CRD_ORDEREDDITHERING

LVB_DITHER_SIERRA

CRD_SIERRADITHERING

LVB_DITHER_STEVENSON

CRD_STEVENSONARCEDITHERING

LVB_DITHER_STUCKI

CRD_STUCKIDITHERING

LVB_EROSION_DIAG

BFLT_EROSION_DIAG

LVB_EROSION_HORZ

BFLT_EROSION_HORZ

LVB_EROSION_OMNI

BFLT_EROSION_OMNI

LVB_EROSION_VERT

BFLT_EROSION_VERT

LVB_FILE_READONLY

Specific file type, such as FILE_PCD

LVB_GRADIENT_E

FLT_GRADIENT_E

LVB_GRADIENT_N

FLT_GRADIENT_N

LVB_GRADIENT_NE

FLT_GRADIENT_NE

LVB_GRADIENT_NW

FLT_GRADIENT_NW

LVB_GRADIENT_S

FLT_GRADIENT_S

LVB_GRADIENT_SE

FLT_GRADIENT_SE

LVB_GRADIENT_SW

FLT_GRADIENT_SW

LVB_GRADIENT_W

FLT_GRADIENT_W

LVB_HT_PRINT

HALFTONE_PRINT

LVB_HT_VIEW

HALFTONE_VIEW

LVB_KEY_DOCUMENT

L_KEY_DOCUMENT

LVB_KEY_GIFLZW

L_KEY_GIFLZW

LVB_KEY_TIFLZW

L_KEY_TIFLZW

LVB_LAPLACE_1

FLT_LAPLACE_1

LVB_LAPLACE_2

FLT_LAPLACE_2

LVB_LAPLACE_3

FLT_LAPLACE_3

LVB_LAPLACE_DIAG

FLT_LAPLACE_DIAG

LVB_LAPLACE_HORZ

FLT_LAPLACE_HORZ

LVB_LAPLACE_VERT

FLT_LAPLACE_VERT

LVB_LINESEG_HORZ

FLT_LINESEG_HORZ

LVB_LINESEG_LTOR

FLT_LINESEG_LTOR

LVB_LINESEG_RTOL

FLT_LINESEG_RTOL

LVB_LINESEG_VERT

FLT_LINESEG_VERT

LVB_ORDER_BGR

CRP_BYTEORDERBGR

LVB_ORDER_RGB

CRP_BYTEORDERRGB

LVB_PALETTE_FIXED

CRP_FIXEDPALETTE

LVB_PALETTE_IDENTITY

CRP_IDENTITYPALETTE

LVB_PALETTE_OPTIMIZED

CRP_OPTIMIZEDPALETTE

LVB_PALETTE_USER

CRP_USERPALETTE

LVB_PREWITT_HORZ

FLT_PREWITT_HORZ

LVB_PREWITT_VERT

FLT_PREWITT_VERT

LVB_PROPSET_EXP

No equivalent. Refer to the IsSupportLocked method.

LVB_PROPSET_PRO

No equivalent. Refer to the IsSupportLocked method.

LVB_RESIZE_INTERPOLATE

RESIZE_RESAMPLE

LVB_SHIFTDIFF_DIAG

FLT_SHIFTDIFF_DIAG

LVB_SHIFTDIFF_HORZ

FLT_SHIFTDIFF_HORZ

LVB_SHIFTDIFF_VERT

FLT_SHIFTDIFF_VERT

LVB_SOBEL_HORZ

FLT_SOBEL_HORZ

LVB_SOBEL_VERT

FLT_SOBEL_VERT

LVB_SUPPORT_DOCUMENT

L_SUPPORT_DOCUMENT

LVB_SUPPORT_GIFLZW

L_SUPPORT_GIFLZW

LVB_SUPPORT_TIFLZW

L_SUPPORT_TIFLZW

LVB_UNDERLAYTYPE_STRETCH

UNDERLAY_STRETCH

LVB_UNDERLAYTYPE_TILE

UNDERLAY_TILE

4. Remove the LVB_ prefix from remaining constants.

After you have made the changes described above, you can change the remaining VBX constants to ActiveX constants by removing the LVB_ prefix.

5. Make the simple property-to-method changes.

Many of the VBX action properties have equivalent ActiveX methods where the only difference is that you pass a parameter instead of setting a value.

In one category, after you have updated the constants, you can simply remove the equals (=) sign as shown in the following example:

VBX code: LeadControl.ColorSeparate = FormatConstant

ActiveX code: LeadControl.ColorSeparate FormatConstant

The following is a list of the ActiveX methods that you can code in this fashion:

Average method

ColorMerge

ColorSeparate

Contrast method

Fill method

GammaCorrect method

HistoContrast method

Hue method

Intensity method

Median method

Mosaic method

Posterize method

Saturation method

In another category, the VBX property is set to True, but the ActiveX method is called with no parameters as shown in the following example:

VBX code: LeadControl.Grayscale = True

ActiveX code: LeadControl.Grayscale

The following is a list of the ActiveX methods that you can code in this fashion:

Deskew method

Despeckle method

Flip method

Grayscale method

Invert method

Reverse method

StretchIntensity method

6. Make the rest of the changes.

The following are specific changes that you must make in your remaining code.

Note: some of the VBX properties are changed only when you are using them to take an action, and that the same properties are still valid in read-only situations.

VBX code:

LeadControl.AddNoiseChannel = ChannelConstant

 

LeadControl.AddNoise = NoiseAmount

ActiveX code:

LeadControl.AddNoise NoiseAmount, ChannelConstant

VBX code:

LeadControl.BitChgOrder = ColorOrderConstant

 

LeadControl.BitChgPalette = PaletteConstant

 

LeadControl.BitChgDither = DitherConstant

 

LeadControl.BitmapBits = DesiredBPP

ActiveX code:

LeadControl.ColorRes DesiredBPP, PaletteConstant, DitherConstant, 0

 

or LeadControl.ColorRes DesiredBPP, ColorOrderConstant, DitherConstant, 0

VBX code:

LeadControl.BitChgUserPal(index) = ColorValue

ActiveX code:

LeadControl.UserPalette(index) = ColorValue

VBX code:

LeadControl.BitmapDC = True

 

ReturnValue = GDIFunction(LeadControl.BitmapDC, OtherParameters...)

 

LeadControl.BitmapDC = False

ActiveX code:

LeadDC = LeadControl.GetBitmapDC

 

ReturnValue = GDIFunction(LeadDC, OtherParameters...)

 

LeadControl.ReleaseBitmapDC

VBX code:

PixelHeight = LeadControl.BitmapHeight

 

PixelWidth = LeadControl.BitmapWidth

ActiveX code:

LeadControl.ScaleMode = 3

 

PixelHeight = LeadControl.BitmapHeight

 

PixelWidth = LeadControl.BitmapWidth

VBX code:

LeadControl.BitmapOrder

ActiveX code:

No equivalent. Use the ColorRes method.

VBX code:

TwipsHeight = LeadControl.BitmapScaleHeight

 

TwipsWidth = LeadControl.BitmapScaleWidth

ActiveX code:

LeadControl.ScaleMode = Form.ScaleMode

 

TwipsHeight = LeadControl.BitmapHeight

 

TwipsWidth = LeadControl.BitmapWidth

VBX code:

LeadControl.CaptureTop = TopPixel

 

LeadControl.CaptureLeft = LeftPixel

 

LeadControl.CaptureWidth = PixelWidth

 

LeadControl.CaptureHeight = PixelHeight

 

LeadControl.Capture = hDC

ActiveX code:

LeadControl.ScaleMode = 3

 

LeadControl.Capture hDC, LeftPixel, TopPixel, PixelWidth, PixelHeight

VBX code:

LeadControl.ClientDC = True

 

ReturnValue = GDIFunction(LeadControl.ClientDC, OtherParameters...)

 

LeadControl.ClientDC = False

ActiveX code:

LeadDC = LeadControl.GetClientDC

 

ReturnValue = GDIFunction(LeadDC, OtherParameters...)

 

LeadControl.ReleaseClientDC

VBX code:

LeadControl1.CombineSrcLeft = SourceLeft

 

LeadControl1.CombineSrcTop = SourceTop

 

LeadControl1.CombineDstLeft = TargetLeft

 

LeadControl1.CombineDstTop = TargetTop

 

LeadControl1.CombineWidth = Width

 

LeadControl1.CombineHeight = Height

 

LeadControl1.CombineOp = Operation

 

LeadControl1.Combine = LeadControl2.Bitmap

ActiveX code:

LeadControl1.Combine TargetLeft, TargetTop, Width, Height, LeadControl2.Bitmap, SourceLeft, SourceTop, Operation

VBX code:

LeadControl.Copy = True

ActiveX code:

LeadControl.Copy COPY_EMPTY + COPY_DIB

VBX code:

LeadControl.CreateBits = DesiredBPP

 

LeadControl.CreateWidth = BitmapWidth

 

LeadControl.CreateHeight = BitmapHeight

 

LeadControl.CreateBitmap = True

ActiveX code:

LeadControl.CreateBitmap BitmapWidth, BitmapHeight, DesiredBPP

VBX code:

LeadControl.CreatePicture = True

 

VBPicture = LeadControl.Picture

ActiveX code:

VBPicture = LeadControl.GetPicture

VBX code:

LeadControl.CropLeft = LeftValue

 

LeadControl.CropTop = TopValue

 

LeadControl.CropWidth = WidthValue

 

LeadControl.CLeadControl.Crop = TrueropHeight = HeightValue

 

 

ActiveX code:

LeadControl.SetDstClipRect LeftValue, TopValue, WidthValue, HeightValue

VBX code:

MyDDB = LeadControl.DDB

ActiveX code:

LeadControl.GetDDB MyDDB

VBX code:

LeadControl.DDB = MyDDB

ActiveX code:

MyDC = LeadControl.GetClientDC

 

MyPalette = LeadControl.GetPalette(MyDC)

 

LeadControl.SetDDB MyDC, MyDDB, MyPalette

VBX code:

MyDIB = LeadControl.DIB

ActiveX code:

LeadControl.GetDIB MyDIB

VBX code:

LeadControl.DIB = MyDIB

ActiveX code:

LeadControl.SetDIB MyDIB

VBX code:

LeadControl.Effect = EffectConstant

ActiveX code:

LeadControl.PaintEffect = EffectConstant

VBX code:

LeadControl.EnableStatus = BooleanValue

ActiveX code:

LeadControl.EnableProgressEvent = BooleanValue

VBX code:

LeadControl.EnableTwainMulti = True

 

LeadControl.TwainAcquire = True

ActiveX code:

LeadControl.EnableTwainEvent = True

 

LeadControl.TwainAcquire hWnd

VBX code:

LeadControl.File = PathName

ActiveX code:

LeadControl.Load PathName, 0, 0, 1

VBX code:

LeadControl.FilePage = PageNumber

 

LeadControl.File = PathName

ActiveX code:

LeadControl.Load PathName, 0, PageNumber, 1

VBX code:

LeadControl.LoadStamp = True

 

LeadControl.File = PathName

ActiveX code:

LeadControl.LoadStamp PathName

VBX code:

LeadControl.FltDilation = DilationConstant

ActiveX code:

LeadControl.BinaryFilter DilationConstant

VBX code:

LeadControl.FltEmbossDepth = ShadowDepth

 

LeadControl.FltEmboss = EmbossConstant

ActiveX code:

LeadControl.Emboss EmbossConstant, ShadowDepth

VBX code:

LeadControl.FltErosion = ErosionConstant

ActiveX code:

LeadControl.BinaryFilter ErosionConstant

VBX code:

LeadControl.FltGradient = GradientConstant

ActiveX code:

LeadControl.SpatialFilter GradientConstant

VBX code:

LeadControl.FltLaplace = LaplacianConstant

ActiveX code:

LeadControl.SpatialFilter LaplacianConstant

VBX code:

LeadControl.FltLineSeg = LineSegmentConstant

ActiveX code:

LeadControl.SpatialFilter LineSegmentConstant

VBX code:

LeadControl.FltPrewitt = PrewittConstant

ActiveX code:

LeadControl.SpatialFilter PrewittConstant

VBX code:

LeadControl.FltShiftDiff = ShiftDiffConstant

ActiveX code:

LeadControl.SpatialFilter ShiftDiffConstant

VBX code:

LeadControl.FltSobel = SobelConstant

ActiveX code:

LeadControl.SpatialFilter SobelConstant

VBX code:

LeadControl.HalftoneAngle = HundredthsOfDegrees

 

LeadControl.Halftone = TypeConstant

ActiveX code:

LeadControl.Halftone TypeConstant, HundredthsOfDegrees

VBX code:

ReturnValue = GDIFunction(LeadControl.hDC, OtherParameters...)

ActiveX code:

LeadDC = LeadControl.GetClientDC

 

ReturnValue = GDIFunction(LeadDC, OtherParameters...)

 

LeadControl.ReleaseClientDC

VBX code:

LeadControl.HistoEq = True

ActiveX code:

LeadControl.HistoEqualize

VBX code:

LeadControl.HistogramChannel = ChannelConstant

 

LeadControl.HistogramAcquire = True

 

IntensityValue = LeadControl.Histogram(Index)

ActiveX code:

LeadControl.GetHistogram ChannelConstant

 

IntensityValue = LeadControl.HistogramTable(Index)

VBX code:

LeadControl.ImageHeight

ActiveX code:

LeadControl.DstHeight

VBX code:

LeadControl.ImageLeft

ActiveX code:

LeadControl.DstLeft

VBX code:

LeadControl.ImageTop

ActiveX code:

LeadControl.DstTop

VBX code:

LeadControl.ImageWidth

ActiveX code:

LeadControl.DstWidth

VBX code:

PixelHeight = LeadControl.InfoHeight

 

PixelWidth = LeadControl.InfoWidth

ActiveX code:

LeadControl.ScaleMode = 3

 

PixelHeight = LeadControl.InfoHeight

 

PixelWidth = LeadControl.InfoWidth

VBX code:

LeadControl.InfoPage = PageNumber

 

LeadControl.InfoFile = PathName

ActiveX code:

LeadControl.GetFileInfo PathName, PageNumber

VBX code:

FilePath = LeadControl.InfoFile

ActiveX code:

No equivalent. You must maintain your own variable if you want to keep the path that was used to load the image.

VBX code:

BitmapHeight = LeadControl.InfoScaleHeight

 

BitmapWidth = LeadControl.InfoScaleWidth

ActiveX code:

LeadControl.ScaleMode = Form1.ScaleMode

 

BitmapHeight = LeadControl.InfoHeight

 

BitmapWidth = LeadControl.InfoWidth

VBX code:

LeadControl.IntensityDetectLow = LowValue

 

LeadControl.IntensityDetectHigh = HighValue

 

LeadControl.IntensityDetect = True

ActiveX code:

LeadControl.IntensityDetect LowValue, HighValue

 

VBX DDE properties are not supported by ActiveX. Affected VBX properties are LinkItem, LinkMode, LinkTimeout, and LinkTopic.

VBX code:

If LeadControl.Paste = True Then

 

LeadControl.Paste = True

 

Else

 

MsgBox "No image on the clipboard" 

 

End If

ActiveX code:

If LeadControl.Paste(PASTE_ISREADY) = 0 Then

 

MsgBox ("Invalid data on the clipboard") 

 

Else

 

LeadControl.Paste 0

 

End If

VBX code:

LeadControl.PaintBwAsGray = BooleanValue

ActiveX code:

LeadControl.BitonalScaling = ScalingConstant

VBX code:

LeadControl.PCDResolution = DesiredResolution

 

LeadControl.File = PathName

ActiveX code:

LeadControl.PCDRes = DesiredResolution

 

LeadControl.Load PathName, 0, 0, 1

VBX code:

LeadControl.Picture = VBPicture

ActiveX code:

LeadControl.SetPicture VBPicture

VBX code:

LeadControl.PictureCreate = True

 

VBPicture = LeadControl.Picture

ActiveX code:

VBPicture =LeadControl.GetPicture

 

The VBX properties for cropping the print rectangle have no direct equivalents in ActiveX. The closest match is the SetSrcClipRect method, which requires different logic. Affected VBX properties are PrintCropTop, PrintCropLeft, PrintCropWidth, PrintCropHeight, and PrintCrop.

VBX code:

LeadControl.PrintLeft = LeftPixel

 

LeadControl.PrintTop = TopPixel

 

LeadControl.PrintWidth = PixelWidth

 

LeadControl.PrintHeight = PixelHeight

 

LeadControl.PrintBitmap = Printer.hDC

ActiveX code:

LeadControl.Render Printer.hDC, LeftPixel, TopPixel, PixelWidth, PixelHeight

VBX code:

If LeadControl.PropertySet = LVB_PROPSET_EXP Then Do Something

ActiveX code:

If LeadControl.IsSupportLocked (L_SUPPORT_DOCUMENT) = False Then Do Something

VBX code:

LeadControl.Repaint = True

ActiveX code:

LeadControl.ForceRepaint

VBX code:

LeadControl.RemapChannel = ChannelConstant

 

LeadControl.RemapIntensity = True

ActiveX code:

LeadControl.RemapIntensity ChannelConstant

VBX code:

LeadControl.ResizeType = TypeConstant

 

LeadControl.ResizeWidth = PixelWidth

 

LeadControl.ResizeHeight = PixelHeight

 

LeadControl.Resize = True

ActiveX code:

LeadControl.ScaleMode = 3

 

LeadControl.Size PixelWidth, PixelHeight, TypeConstant

VBX code:

LeadControl.Rotate = Degrees

ActiveX code:

LeadControl.Rotate Degrees * 100, True, RGB(0, 0, 0)

VBX code:

LeadControl.BackColor = RGBValue

 

LeadControl.RotateFine = HundredthsOfDegrees

ActiveX code:

LeadControl.Rotate HundredthsOfDegrees, True, RGBValue

VBX code:

LeadControl.SaveBits = BPPInDatabase

 

LeadControl.SaveFormat = FormatInDatabase

 

LeadControl.SaveQFactor = QFactorInDatabase

ActiveX code:

LeadControl.DataSaveBits = BPPInDatabase

 

LeadControl.DataSaveFormat = FormatInDatabase

 

LeadControl.DataSaveQuality = QFactorInDatabase

VBX code:

LeadControl.SaveMulti = False

 

LeadControl.SaveBits = DesiredBPP

 

LeadControl.SaveFormat = DesiredFormat

 

LeadControl.SaveQFactor = DesiredQFactor

 

LeadControl.SaveFile = PathName

ActiveX code:

LeadControl.Save PathName, DesiredFormat, DesiredBPP, DesiredQFactor, False

VBX code:

LeadControl.SaveMulti = True

 

LeadControl.SaveFile = PathName

ActiveX code:

LeadControl.Save PathName, DesiredFormat, DesiredBPP, 0, True

VBX code:

LeadControl.SaveStampBits = StampBPP

 

LeadControl.SaveStampWidth = StampWidth

 

LeadControl.SaveStampHeight = StampHeight

 

LeadControl.SaveStamp = True

 

LeadControl.SaveBits = DesiredBPP

 

LeadControl.SaveFormat = DesiredFormat

 

LeadControl.SaveQFactor = DesiredQFactor

 

LeadControl.SaveFile = PathName

ActiveX code:

LeadControl.SaveWithStamp PathName, DesiredFormat, DesiredBPP, DesiredQFactor, StampWidth, StampHeight, StampBPP

VBX code:

LeadControl.Sharpness = ChangeAmount

ActiveX code:

LeadControl.Sharpen ChangeAmount

VBX code:

LeadControl.BackColor = RGBValue

 

LeadControl.ShearX = HundredthsOfDegrees

ActiveX code:

LeadControl.Shear HundredthsOfDegrees, True, RGBValue

VBX code:

LeadControl.BackColor = RGBValue

 

LeadControl.ShearY = HundredthsOfDegrees

ActiveX code:

LeadControl.Shear HundredthsOfDegrees, False, RGBValue

VBX code:

Status event

ActiveX code:

ProgressStatus event

VBX code:

LeadControl.SupportType = SupportConstant

 

If LeadControl.IsSupportLocked = False Then

 

Do something 

 

End If

ActiveX code:

If LeadControl.IsSupportLocked(SupportConstant) Then

 

Do something 

 

End If

VBX code:

LeadControl.SupportType = SupportConstant

 

LeadControl.UnlockSupport = Password

ActiveX code:

If LeadControl.UnlockSupport SupportConstant, Password

VBX code:

LeadControl.TrimLeft = LeftPixel

 

LeadControl.TrimTop = TopPixel

 

LeadControl.TrimWidth = PixelWidth

 

LeadControl.TrimHeight = PixelHeight

 

LeadControl.Trim = True

ActiveX code:

LeadControl.ScaleMode = 3

 

LeadControl.Trim LeftPixel, TopPixel, PixelWidth, PixelHeight

VBX code:

TwainImage event

ActiveX code:

TwainPage event

VBX code:

LeadControl.TwainSelect = True

 

LeadControl.TwainAcquire = True

ActiveX code:

LeadControl.TwainSelect hWnd

 

LeadControl.TwainAcquire hWnd

VBX code:

LeadControl1.UnderlayType = TypeFlag

 

LeadControl1.Underlay = LeadControl2.Bitmap

ActiveX code:

LeadControl1.Underlay LeadControl2.Bitmap, TypeFlag

7. Note the properties that have not changed.

The following properties are used in the ActiveX the same way as they were used in the VBX:

AutoRepaint, AutoScroll, BackErase, Bitmap, BitmapPalette, BitmapXRes, BitmapYRes, BitonalScaling, BorderStyle, ColorPlanes, DataChanged, DataField, DataSource, Enabled, hDC, InfoBits, InfoCompress, InfoFormat, InfoPCDResolution, InfoSizeDisk, InfoSizeMem, MousePointer, PaintDither, PaintPalette, PaintRop3, PaintWhileLoad, RemapTable, TwainFlags.

The following properties are provided by the development system and are not documented for the LEADTOOLS ActiveX. All of them, except the Parent property, are available when the ActiveX is used in Visual Basic.

Align, DragIcon, DragMode, HelpContextID, hWnd, Index, Height, Left, Name, Parent, TabIndex, TabStop, Tag, Top, Visible, Width