
Necessario: Licenza Arcview 9.x e lo script presente in questo post
Ciao a tutti,
oggi vorrei parlarvi di un particolare che, personalmente, aggiungo sempre nei layout di stampa, ovvero la data di stampa e il path dove si trova l’mxd.
Ho cercato fra i vari script del supporto ESRI, ma non ho trovato alcuna dll che potesse fare al caso mio, se mi è sfuggita segnalatela in coda al post.
Ho però trovato, a questo indirizzo, un simpatico file txt che permette di associare ad un pulsante, una procedura in Visual Basic.
Preso dalla curiosità,
ho cercato di creare il “mio” pulsante che permettesse di creare data e path del file mxd.
Ecco la procedura (libera traduzione del file txt con aggiunta di print-screen)
1)Aprire Arcmap, posizionare il cursore su una tool, e, con il tasto destro selezionare la voce “CUSTOMIZE”
2)Selezionare la linguetta “Commands” e la voce “UIControls”
3)Cliccate su New UI Control e selezionate UI Button Control
4)Rinominate il pulsante appena creato Normal.AddDateTime
5)Trascinate il pulsante appena creato nella toolbar layout
6)Una volta posizionato nella barra del layout cliccate col tasto destro sul pulsante e scegliete un’icona per “vestire” il vostro nuovo pulsantino. Lo potete fare selezionando la voce “change button image”.
Personalmente scelgo l’icona di Bex. (il cane)
7)Cliccate sul pulsante close della finestra customize.
8)Andate sul menu tools -> Macros -> Visual Basic Editor
9)Copiate e icollate il codice che vi posto in coda al post
10)Salvate
11)Ora siete pronti per utilizzare il vostro nuovo pulsantino
Private Sub AddDateTime_Click()
On Error GoTo errorhandler
Dim DocInfo As String
'DocInfo currently displays date and time on line 1 and file path and filename on line 2
DocInfo = WeekdayName(WeekDay(Date)) & ", " & MonthName(Month(Date)) & " " & Day(Date) & ", " & Year(Date) & " " & Time _
& vbNewLine & Application.Templates.Item(Application.Templates.Count - 1) 'VbProject.FileName
'Substitute Application.Document.Title if you would rather have the project name only
Dim pDoc As IMxDocument
Dim pGraphicsCont As IGraphicsContainer
Dim pActive As IActiveView
Dim pElemprops As IElementProperties
Set pDoc = ThisDocument
Set pGraphicsCont = pDoc.PageLayout
Set pActive = pGraphicsCont
pGraphicsCont.Reset
Set pElemprops = pGraphicsCont.Next
Dim pTextElement As ITextElement
Dim pElem As IElement
Dim pEnv As IEnvelope
Dim pEnv2 As IEnvelope
Do Until pElemprops Is Nothing
If TypeOf pElemprops Is ITextElement Then
Set pTextElement = pElemprops
If pTextElement.Text Like "*, 20*" Then
Set pElem = pElemprops
Set pEnv = New Envelope
pElem.QueryBounds pActive.ScreenDisplay, pEnv
pTextElement.Text = DocInfo
pGraphicsCont.UpdateElement pTextElement
Set pEnv2 = New Envelope
pElem.QueryBounds pActive.ScreenDisplay, pEnv2
pEnv.Union pEnv2
pActive.PartialRefresh esriViewGraphics, Nothing, pEnv
Exit Sub
End If
End If
Set pElemprops = pGraphicsCont.Next
Loop
Dim pActiveView As IActiveView
Dim pGraphicsContainer As IGraphicsContainer
Dim pElement As IElement
Set pDoc = Application.Document
Set pActiveView = pDoc.PageLayout
Set pGraphicsContainer = pDoc.PageLayout
Set pTextElement = New TextElement
Set pElement = pTextElement
Dim pExtent As IArea
pTextElement.Text = DocInfo
Dim pPt As IPoint
Set pPt = New Point
pPt.x = (pDoc.ActiveView.Extent.XMin + pDoc.ActiveView.Extent.XMax) / 2
pPt.Y = (pDoc.ActiveView.Extent.YMin + pDoc.ActiveView.Extent.YMax) / 2
pElement.Geometry = pPt
pGraphicsContainer.AddElement pTextElement, 0
pDoc.ActiveView.PartialRefresh esriViewGraphics, Nothing, Nothing
errorhandler:
Exit Sub
End Sub
Private Function AddDateTime_Enabled() As Boolean
Dim pMxDoc As IMxDocument
Set pMxDoc = Application.Document
If Not pMxDoc.ActiveView Is pMxDoc.PageLayout Then
AddDateTime_Enabled = False
Else
AddDateTime_Enabled = True
End If
End Function
Private Function AddDateTime_Message() As String
AddDateTime_Message = "Adds date, time and file path and name to layout or updates existing information"
End Function
Private Function AddDateTime_ToolTip() As String
AddDateTime_ToolTip = "Add/Update Date, Time & File Info"
End Function
Il risultato è una casella di testo di questo genere:
lunedì, aprile 27, 2008 19.40.41
D:\Documenti\FETUA.mxd
A questo punto cerco un po’ di chiarimenti da parte dei lettori informatici del blog, e vi chiedo:
Questa procedura si riesce a “convertire” in una dll, che è molto più pratica da aggiungere ad ArcMap?
C’è qualche informatico o smanettane che conosce visual basic e che ha voglia di “spiegare” questo script…..non conosco il termine giusto, ma se fosse una poesia direi: “C’è qualcuno che ha voglia di fare una parafrasi?”, ovvero…..mi spiegate cosa c’è scritto?
Grazie
Ciao














