如何创建允许换行的文本框(通过按Enter键)并将其复制到字符串?
我正在尝试在Digital Micrograph中生成类似于Image Info文本框的对话框。此文本框将用于创建在最前面的图像上创建的文本注释。
DLGCreateTextBox可以创建多行文本框,但似乎不允许换行。
我搜索了DM Scripting和TU Graz script database页面,但没有看到任何使用此类文本框的内容。
答案 0 :(得分:0)
不幸的是,对话框TextBoxes不是DigitalMicrograph脚本对话框中最方便的对话框项。有一点需要知道:
pose()
显示),则返回键击将立即显示为“正常”并关闭对话框!考虑到这一点,下面的示例脚本创建了一个textbox-field,其中可能包含换行符(返回)。但是,只有使用附加到按钮的“复制”操作才能将文本“存储”在一个变量中,该变量可以在对话框关闭后访问。
class myDLG : UIFrame
{
string textBuffer
tagGroup CreateDLGSelf( object self )
{
number width = 20 // line width of box
number height = 10 // number of lines
number length = 500 // maximum length (characters) of content
TagGroup textBox = DLGCreateTextBox( width, height, length )
textBox.DLGIdentifier( "textBox" )
TagGroup StoreButton = DLGCreatePushButton( "Store" , "StoreText" )
TagGroup DLG, DLGitems
DLG = DLGCreateDialog( "TestBox", DLGitems )
DLGitems.DLGAddElement( textBox )
DLGitems.DLGAddElement( StoreButton )
return DLG
}
void StoreText( object self )
{
textBuffer = self.GetTextElementData( "textBox" )
}
string GetBufferedText( object self )
{
return textBuffer
}
object Init( object self )
{
return self.Super.Init( self.CreateDLGSelf() )
}
}
// Main script
{
object testDLG = Alloc(myDLG).Init()
if ( testDLG.pose() )
OKDialog( "Text:" + testDLG.GetBufferedText() )
}
如果对话框无模式(即通过display()
显示),则可以直接访问字段。下面的脚本演示了这一点 - 以及这样的对话框如何在图像上创建注释标记。
class annoTool : UIFrame
{
tagGroup CreateToolDlg( object self )
{
number width = 50 // line width of box
number height = 5 // number of lines
number length = 300 // maximum length (characters) of content.
TagGroup textBox = DLGCreateTextBox( width, height, length )
textBox.DLGIdentifier("textBox")
TagGroup CreatAnnoButton = DLGCreatePushButton( "Copy to Image" , "CreateAnno" )
TagGroup InitTextButton = DLGCreatePushButton( "Intitialze" , "InitTextField" )
TagGroup DLG, DLGitems
DLG = DLGCreateDialog( "TestBox", DLGitems )
DLGitems.DLGAddElement( textBox )
DLGitems.DLGAddElement( DLGGroupItems( InitTextButton, CreatAnnoButton ).DLGTableLayout(2,1,0) )
return DLG
}
void InitTextField( object self )
{
string init = ""
init += "Date:" + GetDate(1) + "\n"
init += "Time:" + GetTime(0) + "\n"
init += "(c) My TEM Institute"
self.SetTextElementData( "textBox", init )
}
void CreateAnno( object self )
{
image front
string textBuffer = self.GetTextElementData("textBox")
if ( GetFrontImage(front) )
{
CreateTextAnnotation( front, 0, 0, textBuffer)
}
}
object Init( object self )
{
return self.Super.Init( self.CreateToolDlg() )
}
}
// Main script
{
Alloc(annoTool).Init().display( "Annotation Creater" )
}