/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/


 // #pragma ******************************************************************

 // #include *****************************************************************
#include "envlop.hrc"
#include "helpid.h"
 // DLG_ENV ------------------------------------------------------------------
TabDialog DLG_ENV
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Text [ en-US ] = "Envelope" ;
	Moveable = TRUE ;
	TabControl 1
	{
		OutputSize = TRUE ;
		PageList =
		{
			PageItem
			{
				Identifier = TP_ENV_ENV ;
				Text [ en-US ] = "Envelope" ;
				PageResID = TP_ENV_ENV ;
			};
			PageItem
			{
				Identifier = TP_ENV_FMT ;
				PageResID = TP_ENV_FMT ;
				Text [ en-US ] = "Format";
			};
			PageItem
			{
				Identifier = TP_ENV_PRT ;
				Text [ en-US ] = "Printer" ;
				PageResID = TP_ENV_PRT ;
			};
		};
	};
	String ST_INSERT
	{
		Text [ en-US ] = "~Insert" ;
	};
	String ST_CHANGE
	{
		Text [ en-US ] = "~Modify" ;
	};
};
 // TP_ENV_ENV ---------------------------------------------------------------
TabPage TP_ENV_ENV
{
	HelpID = HID_ENV_ENV ;
	Size = MAP_APPFONT ( 260 , 185 ) ;
	Hide = TRUE ;
	FixedText TXT_ADDR
	{
		Pos = MAP_APPFONT ( 6 , 6 ) ;
		Size = MAP_APPFONT ( 124 , 8 ) ;
		Text [ en-US ] = "Addr~essee" ;
		Group = TRUE ;
		Left = TRUE ;
	};
	MultiLineEdit EDT_ADDR
	{
	    HelpID = "sw:MultiLineEdit:TP_ENV_ENV:EDT_ADDR";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6 , 17 ) ;
        Size = MAP_APPFONT ( 124 , 66 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		HScroll = TRUE ;
		VScroll = TRUE ;
		IgnoreTab = TRUE;
	};
	FixedText FT_DATABASE
	{
        Pos = MAP_APPFONT ( 162 , 6 ) ;
		Size = MAP_APPFONT ( 92 , 8 ) ;
		Text [ en-US ] = "Database" ;
	};
	ListBox LB_DATABASE
	{
	    HelpID = "sw:ListBox:TP_ENV_ENV:LB_DATABASE";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 162 , 17 ) ;
        Size = MAP_APPFONT ( 82 , 50 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	FixedText FT_TABLE
	{
        Pos = MAP_APPFONT ( 162 , 33 ) ;
		Size = MAP_APPFONT ( 92 , 8 ) ;
		Text [ en-US ] = "Table" ;
	};
	ListBox LB_TABLE
	{
	    HelpID = "sw:ListBox:TP_ENV_ENV:LB_TABLE";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 162 , 44 ) ;
        Size = MAP_APPFONT ( 82 , 50 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	ImageButton BTN_INSERT
	{
	    HelpID = "sw:ImageButton:TP_ENV_ENV:BTN_INSERT";
        Pos = MAP_APPFONT ( 137 , 71 ) ;
        Size = MAP_APPFONT ( 18 , 12 ) ;
		SYMBOL = IMAGEBUTTON_ARROW_LEFT ;
		TabStop = TRUE ;
	};
	FixedText FT_DBFIELD
	{
        Pos = MAP_APPFONT ( 162 , 60 ) ;
		Size = MAP_APPFONT ( 92 , 8 ) ;
		Text [ en-US ] = "~Database field" ;
	};
	ListBox LB_DBFIELD
	{
	    HelpID = "sw:ListBox:TP_ENV_ENV:LB_DBFIELD";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 162 , 71 ) ;
        Size = MAP_APPFONT ( 82 , 50 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	CheckBox BOX_SEND
	{
	    HelpID = "sw:CheckBox:TP_ENV_ENV:BOX_SEND";
		Pos = MAP_APPFONT ( 6 , 105 ) ;
		Size = MAP_APPFONT ( 124 , 8 ) ;
		Text [ en-US ] = "~Sender" ;
		TabStop = TRUE ;
	};
	MultiLineEdit EDT_SEND
	{
	    HelpID = "sw:MultiLineEdit:TP_ENV_ENV:EDT_SEND";
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6 , 116) ;
		Size = MAP_APPFONT ( 124 , 63 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		HScroll = TRUE ;
		VScroll = TRUE ;
		IgnoreTab = TRUE;
	};
	Window WIN_PREVIEW
	{
		Border = TRUE ;
        Pos = MAP_APPFONT ( 160 , 116 ) ;
		Size = MAP_APPFONT ( 84 , 63 ) ;
	};
};
 // Strings ******************************************************************
String STR_DOC_TITLE
{
	Text [ en-US ] = "Envelope" ;
};






























