0

I am currently working on a code to apply a variety of different changes to layers with certain attributes, I have been successful with this so far (thanks to Peter). However I now want to add a text box to this so the user can enter the name of the field they want labeling (as this is the only thing differs in the .TABs I intend to use this tool for).

I have currently created a dialog box for the user to input this however when it comes to labeling (I assume), MapInfo is looking for a field with the same name as my string to label with, instead of looking at what is stored there.

For example

Dim sLabinput As String
Set Map Window nMID
 Layer nLayer 
 Display Global Global Line (2,2,16711680)
 Arrows On
 Label With sLabinput Auto On Visibility On
 Font ("Arial",257,9,0,16777215)

I haven't put the rest of the code as I want to try and learn this myself however if that is the only way to solve it I can post it.

Am I right in assuming in this instance MapInfo is looking for a field called sLabinput, rather than the value stored in there?

Thanks, Alan

asked Dec 27, 2012 at 15:56

2 Answers 2

1

Never mind. Managed to play around with the code and an answer from somewhere else. I'm going to post it in case

Include "MAPBASIC.DEF"
Dim sLabinput As String
Dialog
 Title "Section Ref"
 Control statictext
 Title "Enter section ref field"
 Control edittext
 Value sLabinput
 into sLabinput
 Control OKButton
 Control CancelButton
if commandinfo (CMD_INFO_DLG_OK) then
Else
End Program
End if
Dim nMID, nLayer As Integer, sLayer As String
nMID = FrontWindow()
For nLayer = 1 To MapperInfo(nMID, MAPPER_INFO_LAYERS)
 sLayer = LayerInfo(nMID, nLayer, LAYER_INFO_NAME)
 If sLayer Like "%AllG%" Then
 Set Map Window nMID
 Layer nLayer 
 Display Global Global Line (1,2,45056) 
 ElseIf sLayer Like "%roup0%" Then
 Run Command "Set Map Window " & nMID & " Layer " &nLayer
 & " Label With " & sLabinput
 Set Map Window nMID
 Layer nLayer 
 Display Global Global Line (2,2,16711680)
 Arrows On
 Label Auto ON Font ("Arial",257,9,0,16777215)
 '**add extra cases here below if you need to
 '**ElseIf sLayer Like "%zz%" Then
 '** Set Map Window nMID
 '** Layer nLayer 
 '** Display Global Global Line (2,2,16711680)
 '** Arrows On
 End if
Next
answered Dec 27, 2012 at 16:50
1
  • Good to see my suggestion worked, Alan. Another way might be to use an Alias variable to hold a combination of the table and column name: Commented Jan 2, 2013 at 8:35
0

Good to see my suggestion worked, Alan.

Another way might be to use an Alias variable to hold a combination of the table and column name:

Dim aLabel as Alias
Dim nMID, nLayer As Integer, sLayer As String
nMID = FrontWindow()
For nLayer = 1 To MapperInfo(nMID, MAPPER_INFO_LAYERS)
 sLayer = LayerInfo(nMID, nLayer, LAYER_INFO_NAME)
 If sLayer Like "%AllG%" Then
 Set Map Window nMID
 Layer nLayer 
 Display Global Global Line (1,2,45056) 
 ElseIf sLayer Like "%roup0%" Then
 aLabel = sLayer & "." & sLabinput
 Set Map Window nMID
 Layer nLayer
 Label With aLabel
 Set Map Window nMID
 Layer nLayer 
 Display Global Global Line (2,2,16711680)
 Arrows On
 Label Auto ON Font ("Arial",257,9,0,16777215)
 '**add extra cases here below if you need to
 '**ElseIf sLayer Like "%zz%" Then
 '** Set Map Window nMID
 '** Layer nLayer 
 '** Display Global Global Line (2,2,16711680)
 '** Arrows On
 End if
Next

If it works, you can use a single Set Map statement instead of two separate statements - not that that will make a big difference

answered Jan 2, 2013 at 8:40

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.