Attribute VB_Name = "GeneralMdl" Option Explicit ' Displayed Area Module structure Type DISPLAYEDAREA TLHCornerX As Long TLHCornerY As Long BRHCornerX As Long BRHCornerY As Long strSizeMode As String ' Presentation Size Mode PixelSpacingX As Double PixelSpacingY As Double AspectRatioX As Long AspectRatioY As Long fMagnifyRatio As Double End Type Type PRESSTATEINFO nInstanceNumber As Long strPresLabel As String strPresDescription As String strPresCreationDate As String strPresCreationTime As String strPresCreator As String End Type Public Type SYSTEMTIME wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer End Type Public Const REGISTRY_LOCATION = "LEAD Technologies, Inc.\VB_DicomAnn" Public Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Variant bInheritHandle As Boolean End Type Public Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type ' APIs declaration Public Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long Public Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long Public Declare Function GetTickCount Lib "kernel32" () As Long Public Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME) Public Declare Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long Public Const GENERIC_WRITE = &H40000000 Public Const GENERIC_READ = &H80000000 Public Const CREATE_ALWAYS = 2 Public Const FILE_ATTRIBUTE_NORMAL = &H80 ' Constants Public Const ANNTOOL_SELECT = 0 Public Const ANNTOOL_LINE = 1 Public Const ANNTOOL_RECT = 2 Public Const ANNTOOL_ELLIPSE = 3 Public Const ANNTOOL_POLYLINE = 4 Public Const ANNTOOL_POLYGON = 5 Public Const ANNTOOL_POINTER = 6 Public Const ANNTOOL_FREEHAND = 7 Public Const ANNTOOL_HILITE = 8 Public Const ANNTOOL_REDACT = 9 Public Const ANNTOOL_TEXT = 10 Public Const ANNTOOL_NOTE = 11 Public Const ANNTOOL_STAMP = 12 Public Const ANNTOOL_BUTTON = 13 Public Const ANNTOOL_HOTSPOT = 14 Public Const ANNTOOL_AUDIO = 15 Public Const ANNTOOL_RULER = 16 Public Const ANNTOOL_CROSSPRODUCT = 17 Public Const ANNTOOL_POINT = 18 Public Const ANNTOOL_PROTRACTOR = 19 Public Const ANNTOOL_VIDEO = 20 Public Const ANNTOOL_PUSHPIN = 21 Public Const ANNTOOL_FREEHANDHOTSPOT = 22 Public Const ANNTOOL_CURVE = 23 Public Const ANNTOOL_CURVECLOSED = 24 Public Const ANNTOOL_ENCRYPT = 25 Public Const ANNTOOL_TEXTPOINTER = 26 Public Const ANNTOOL_POLYRULER = 27 Public Const ANNTOOL_RTF = 28 Public Const ANNTOOL_STAMP_FIRST = 29 ' define that marks the first rubber stamp Public Const ANNTOOL_STAMP_APPROVED = 29 Public Const ANNTOOL_STAMP_ASSIGNED = 30 Public Const ANNTOOL_STAMP_CHECKED = 31 Public Const ANNTOOL_STAMP_CLATPRV = 32 Public Const ANNTOOL_STAMP_COPY = 33 Public Const ANNTOOL_STAMP_DRAFT = 34 Public Const ANNTOOL_STAMP_EXTENDED = 35 Public Const ANNTOOL_STAMP_FAX = 36 Public Const ANNTOOL_STAMP_FAXED = 37 Public Const ANNTOOL_STAMP_IMPORTANT = 38 Public Const ANNTOOL_STAMP_INVOICE = 39 Public Const ANNTOOL_STAMP_NOTICE = 40 Public Const ANNTOOL_STAMP_OFFICIAL = 41 Public Const ANNTOOL_STAMP_ONFILE = 42 Public Const ANNTOOL_STAMP_PAID = 43 Public Const ANNTOOL_STAMP_PASSED = 44 Public Const ANNTOOL_STAMP_PENDING = 45 Public Const ANNTOOL_STAMP_PROCESSED = 46 Public Const ANNTOOL_STAMP_RECEIVED = 47 Public Const ANNTOOL_STAMP_REJECTED = 48 Public Const ANNTOOL_STAMP_RELEASE = 49 Public Const ANNTOOL_STAMP_SENT = 50 Public Const ANNTOOL_STAMP_SHIPPED = 51 Public Const ANNTOOL_STAMP_TOPSECRET = 52 Public Const ANNTOOL_STAMP_URGENT = 53 Public Const ANNTOOL_STAMP_VOID = 54 Public Const ANNTOOL_STAMP_LAST = 55 'define that marks the last rubber stamp Public Const ANNTOOLALIGN_LEFT = &H0 Public Const ANNTOOLALIGN_RIGHT = &H1 Public Const ANNTOOLALIGN_TOP = &H0 Public Const ANNTOOLALIGN_BOTTOM = &H2 Public Const ANNFLAG_NOTCONTAINER = &H2 Public Const ANNFLAG_RECURSE = &H8 ' Displayed Area Module Public Const TAG_DISPLAYED_AREA_SELECTION_SEQUENCE = &H70005A Public Const TAG_DISPLAYED_AREA_TOP_LEFT_HAND_CORNER = &H700052 Public Const TAG_DISPLAYED_AREA_BOTTOM_RIGHT_HAND_CORNER = &H700053 Public Const TAG_PRESENTATION_SIZE_MODE = &H700100 Public Const TAG_PRESENTATION_PIXEL_SPACING = &H700101 Public Const TAG_PRESENTATION_PIXEL_ASPECT_RATIO = &H700102 Public Const TAG_PRESENTATION_PIXEL_MAGNIFICATION_RATIO = &H700103 Public Const TAG_GRAPHIC_ANNOTATION_SEQUENCE = &H700001 Public Const TAG_TEXT_OBJECT_SEQUENCE = &H700008 Public Const TAG_GRAPHIC_OBJECT_SEQUENCE = &H700009 Public Const TAG_GRAPHIC_LAYER = &H700002 Public Const SUCCESS = 0 Public Const TwipsPerPixel = 15 Public nOpenAgain As Integer Public CurPSInfo As PRESSTATEINFO Public Sub UnlockSupport(DicomKernel As LEADDicomKernel) DicomKernel.UnlockSupport L_SUPPORT_DOCUMENT, L_KEY_DOCUMENT DicomKernel.UnlockSupport L_SUPPORT_GIFLZW, L_KEY_GIFLZW DicomKernel.UnlockSupport L_SUPPORT_TIFLZW, L_KEY_TIFLZW 'DicomKernel.UnlockSupport L_SUPPORT_FPXEXTENSIONS, L_KEY_FPXEXTENSIONS DicomKernel.UnlockSupport L_SUPPORT_OCR, L_KEY_OCR 'DicomKernel.UnlockSupport L_SUPPORT_MULTIMEDIA, L_KEY_MULTIMEDIA DicomKernel.UnlockSupport L_SUPPORT_MEDICAL, L_KEY_MEDICAL DicomKernel.UnlockSupport L_SUPPORT_VECTOR, L_KEY_VECTOR DicomKernel.UnlockSupport L_SUPPORT_MEDICAL_NET, L_KEY_MEDICAL_NET DicomKernel.UnlockSupport L_SUPPORT_BARCODES_1D, L_KEY_BARCODES_1D DicomKernel.UnlockSupport L_SUPPORT_BARCODES_2D_READ, L_KEY_BARCODES_2D_READ DicomKernel.UnlockSupport L_SUPPORT_BARCODES_2D_WRITE, L_KEY_BARCODES_2D_WRITE DicomKernel.UnlockSupport L_SUPPORT_BARCODES_PDF_READ, L_KEY_BARCODES_PDF_READ DicomKernel.UnlockSupport L_SUPPORT_BARCODES_PDF_WRITE, L_KEY_BARCODES_PDF_WRITE 'DicomKernel.UnlockSupport L_SUPPORT_INTERNET, L_KEY_INTERNET 'DicomKernel.UnlockSupport L_SUPPORT_VECTOR_DWG, L_KEY_VECTOR_DWG 'DicomKernel.UnlockSupport L_SUPPORT_VECTOR_DXF, L_KEY_VECTOR_DXF 'DicomKernel.UnlockSupport L_SUPPORT_VECTOR_MISC, L_KEY_VECTOR_MISC 'DicomKernel.UnlockSupport L_SUPPORT_VECTOR_ALL, L_KEY_VECTOR_ALL 'DicomKernel.UnlockSupport L_SUPPORT_VECTOR_DWF, L_KEY_VECTOR_DWF DicomKernel.UnlockSupport L_SUPPORT_PDF, L_KEY_PDF 'DicomKernel.UnlockSupport L_SUPPORT_VECTOR_VIEW, L_KEY_VECTOR_VIEW 'DicomKernel.UnlockSupport L_SUPPORT_DIGITALPAINT, L_KEY_DIGITALPAINT DicomKernel.UnlockSupport L_SUPPORT_J2K, L_KEY_J2K DicomKernel.UnlockSupport L_SUPPORT_CMW, L_KEY_CMW DicomKernel.UnlockSupport L_SUPPORT_DICOM, L_KEY_DICOM DicomKernel.UnlockSupport L_SUPPORT_EXTGRAY, L_KEY_EXTGRAY DicomKernel.UnlockSupport L_SUPPORT_BITONAL, L_KEY_BITONAL 'DicomKernel.UnlockSupport L_SUPPORT_MEDICAL_SECURITY, L_KEY_MEDICAL_SECURITY End Sub Public Sub Main() On Error GoTo ErrHandler ' Read the registry nOpenAgain = 0 ReadDataFromReg If nOpenAgain = 0 Then StartupFrm.Show Else MainForm.Show End If Exit Sub ErrHandler: Resume Next End Sub Sub ReadDataFromReg() On Error GoTo ErrHandler nOpenAgain = GetSetting(REGISTRY_LOCATION, "LOCAL_DATA_SETTINGS", "nOpenStartupAgain", "") Exit Sub ErrHandler: Resume Next End Sub Sub SetDispalyedAreaInfo(MyDA As DISPLAYEDAREA) On Error GoTo ErrHandler Dim nRet As Integer nRet = MainForm.DicomPresStateDS.FindFirstElement(TAG_DISPLAYED_AREA_SELECTION_SEQUENCE, True) If nRet <> DICOM_SUCCESS Then Exit Sub nRet = MainForm.DicomPresStateDS.MoveChildElement() If nRet <> DICOM_SUCCESS Then Exit Sub nRet = MainForm.DicomPresStateDS.FindFirstElement(TAG_ITEM, True) If nRet <> DICOM_SUCCESS Then Exit Sub nRet = MainForm.DicomPresStateDS.MoveChildElement() If nRet <> DICOM_SUCCESS Then Exit Sub ' Dispalyed Area Top Left Hand Corner nRet = MainForm.DicomPresStateDS.FindFirstElement(TAG_DISPLAYED_AREA_TOP_LEFT_HAND_CORNER, True) If nRet = DICOM_SUCCESS Then MainForm.DicomPresStateDS.LongValueCount = 2 MainForm.DicomPresStateDS.LongValues(0) = MyDA.TLHCornerX MainForm.DicomPresStateDS.LongValues(1) = MyDA.TLHCornerY MainForm.DicomPresStateDS.SetLongValue 2 MainForm.DicomPresStateDS.LongValueCount = 0 ' Free the value End If ' Dispalyed Area Bottom Right Hand Corner nRet = MainForm.DicomPresStateDS.FindFirstElement(TAG_DISPLAYED_AREA_BOTTOM_RIGHT_HAND_CORNER, True) If nRet = DICOM_SUCCESS Then MainForm.DicomPresStateDS.LongValueCount = 2 MainForm.DicomPresStateDS.LongValues(0) = MyDA.BRHCornerX MainForm.DicomPresStateDS.LongValues(1) = MyDA.BRHCornerY MainForm.DicomPresStateDS.SetLongValue 2 MainForm.DicomPresStateDS.LongValueCount = 0 ' Free the value End If ' Presentation Pixel Aspect Ratio nRet = MainForm.DicomPresStateDS.FindFirstElement(TAG_PRESENTATION_PIXEL_ASPECT_RATIO, True) If nRet = DICOM_SUCCESS Then MainForm.DicomPresStateDS.DoubleValueCount = 2 MainForm.DicomPresStateDS.DoubleValues(0) = MyDA.PixelSpacingX MainForm.DicomPresStateDS.DoubleValues(1) = MyDA.PixelSpacingY MainForm.DicomPresStateDS.SetDoubleValue 2 MainForm.DicomPresStateDS.DoubleValueCount = 0 ' Free the value End If ' Presentation Size Mode nRet = MainForm.DicomPresStateDS.FindFirstElement(TAG_PRESENTATION_SIZE_MODE, True) If nRet = DICOM_SUCCESS Then MainForm.DicomPresStateDS.StringValueCount = 1 MainForm.DicomPresStateDS.StringValues(0) = MyDA.strSizeMode MainForm.DicomPresStateDS.SetStringValue 1 MainForm.DicomPresStateDS.StringValueCount = 0 ' Free the value End If ' Presentation Pixel Magnification Ratio nRet = MainForm.DicomPresStateDS.FindFirstElement(TAG_PRESENTATION_PIXEL_MAGNIFICATION_RATIO, True) If nRet = DICOM_SUCCESS Then MainForm.DicomPresStateDS.LongValueCount = 1 MainForm.DicomPresStateDS.LongValues(0) = MyDA.fMagnifyRatio MainForm.DicomPresStateDS.SetLongValue 1 MainForm.DicomPresStateDS.LongValueCount = 0 ' Free the value End If Exit Sub ErrHandler: Resume Next End Sub