Rocket Software Homepage
Forum Home Forum Home > AccuTerm Knowledge Base (read only) > Code Samples
  New Posts New Posts RSS Feed - Text input with custom font
  FAQ FAQ  Forum Search   Register Register  Login Login

The AccuTerm forum has moved. Go to community.rocketsoftware.com to register for the new Rocket forum.

Forum LockedText input with custom font

 Post Reply Post Reply
Author
Message
PSchellenbach View Drop Down
Admin Group
Admin Group

Moderator

Joined: December 15 2003
Location: United States
Status: Offline
Points: 2150
Post Options Post Options   Thanks (0) Thanks(0)   Quote PSchellenbach Quote  Post ReplyReply Direct Link To This Post Topic: Text input with custom font
    Posted: July 06 2004 at 6:14am
This code sample was contributed by Kim Stahl at Elizabeth Arden Spas. It is based on the original ATINPUTTEXT sample code, but includes FONTNAME and FONTSIZE arguments letting you sepcify the font to use in the text box.


SUBROUTINE ATINPUTTEXTEX(TITLE, PRMPT, TEXT, WIDTH, HEIGHT, DELIM, FONTNAME, FONTSIZE)
*
* ACCUTERM 2K2 TEXT INPUT USING SCRIPT DIALOG BOX
*
* CALL THIS SUBROUTINE TO INPUT TEXT USING A WINDOWS
* DIALOG BOX. PASS A TITLE, PROMPT MESSAGE, INITIAL
* TEXT VALUE, WIDTH IN CHARACTERS, HEIGHT IN LINES,
* LINE DELIMITER, FONT NAME AND SIZE. DELIMITER IS
* NULL FOR SINGLE LINE TEXT ENTRY (HEIGHT IS IGNORED IN
* THIS CASE). OTHERWISE, MULTIPLE LINES ARE SEPARATED
* BY THE SPECIFIED DELIMITER.
*
* THIS ROUTINE IS BASED ON THE ORIGINAL ACCUTERM SAMPLE
* ATINPUTTEXT, BUT INCLUDES THE NEW FONTNAME AND FONTSIZE
* ARGUMENTS, WHICH ALLOW YOU TO SPECIFY THE FONT USED
* IN THE TEXT BOX. THIS ROUTINE WAS CONTRIBUTED BY KIM
* STAHL AT ELIZABETH ARDEN SPAS.
*
* NOTE: THIS SUBROUTINE BUILDS AND EXECUTES A SCRIPT WHICH
* PERFORMS THE TEXT INPUT, THEN TRANSMITS THE RESULTS BACK
* TO THE HOST.
*
EQU ESC TO CHAR(27), STX TO CHAR(2), CR TO CHAR(13), EM TO CHAR(25)
EQU BEL TO CHAR(7)
* Calculate dialog box size in "dialog units"
WD=WIDTH*8; IF WD<250 THEN WD=250
IF DELIM='' THEN ML=0 ELSE ML=1
IF ML THEN
HT=HEIGHT*12; IF HT<100 THEN HT=100
CY=HT+60
END ELSE
HT=18
CY=78
END
CX=WD+20
DX=INT((CX-120)/3)
DY=CY-25
*
* Create desired font
* The following code is from the SAX website, with some modification for text, and text size.
CMD = 'Dim hDC As Long':EM
CMD := 'Dim Height As Long':EM
CMD := 'hDC = GetWindowDC(0)':EM
CMD := 'Height = (-':FONTSIZE:'*GetDeviceCaps(hDC,LOGPIXELSY))/72':EM
CMD := 'ReleaseDC 0,hDC':EM
CMD := 'hFont = CreateFontA(Height,0,0,0,0,0,0,0,0,0,0,0,0,"':FONTNAME:'")': EM ;*New font
* End SAX code from website
*
* Sets the width of the textbox
CMD := 'Begin Dialog UserDialog ':CX:',':CY:',"':TITLE:'",.DlgFunc':EM
CMD := '   Text 10,10,':WD:',12,"':PRMPT:'"':EM
CMD := '   TextBox 10,27,':WD:',':HT:',.Text1$,1':EM
CMD := '   OKButton ':DX:',':DY:',60,20,.OK':EM
CMD := '   CancelButton ':(2*DX)+60:',':DY:',60,20,.Cancel':EM
CMD := 'End Dialog':EM
CMD := 'Dim dlg as UserDialog':EM
CMD := 'Dim Text$':EM
CMD := 'Dim i as Integer':EM
CMD := 'Dim n as Integer':EM
* Load initial text value
CMD := 'On Error Resume Next':EM
IF ML THEN
N=DCOUNT(TEXT,DELIM)
FOR I=1 TO N
ARG=FIELD(TEXT,DELIM,I); GOSUB 100
LOOP WHILE LEN(ARG) > 250 DO
   CMD := 'Text$ = Text$ & "':ARG[1,250]:'"':EM
   ARG=ARG[251,999999]
REPEAT
CMD := 'Text$ = Text$ & "':ARG:'"':EM
IF I<N THEN CMD := 'Text$ = Text$ & vbCrLf':EM
NEXT I
END ELSE
ARG=TEXT; GOSUB 100
CMD := 'Text$ = "':ARG:'"':EM
END
CMD := 'dlg.Text1$ = Text$':EM
* Display the dialog box
CMD := 'Dialog Dlg':EM
* Transmit results to host
CMD := 'InitSession.Activate':EM
IF ML THEN
CMD := 'If Err Then':EM
CMD := 'InitSession.Output "-1" & vbCr':EM
CMD := 'Else':EM
CMD := 'Text$ = Dlg.Text1':EM
CMD := 'n=LineCount(Text$)':EM
CMD := 'InitSession.InputMode=2':EM
CMD := 'InitSession.Output CStr(n) & vbCr':EM
CMD := 'For i=1 To n':EM
CMD := 'If InitSession.WaitFor(0,5,Chr$(7)) Then':EM
CMD := 'InitSession.Output Line(Text$,i,i) & vbCr':EM
CMD := 'End If':EM
CMD := 'Next i':EM
CMD := 'InitSession.InputMode=0':EM
CMD := 'End If':EM
END ELSE
CMD := 'If Err = 0 Then Text$ = Dlg.Text1':EM
CMD := 'InitSession.Output Text$ & vbCr':EM
END
* Must delete the font when finished
CMD := 'DeleteObject hFont':EM
CMD := 'End Sub':EM
*
* Declarations for APIs needed to use desired font
* This is code from the SAX website
CMD := 'Const LOGPIXELSY = 90':EM
CMD := 'Const WM_SETFONT = &H30':EM
CMD := 'Const EM_SETSEL = 177':EM
CMD := 'Declare Function CreateFontA Lib "gdi32" ( _':EM
CMD := 'ByVal nHeight As Long, _':EM
CMD := 'ByVal nWidth As Long, _':EM
CMD := 'ByVal nEscapement As Long, _':EM
CMD := 'ByVal nOrientation As Long, _':EM
CMD := 'ByVal fnWeight As Long, _':EM
CMD := 'ByVal fdwItalic As Long, _':EM
CMD := 'ByVal fdwUnderline As Long, _':EM
CMD := 'ByVal fdwStrikeOut As Long, _':EM
CMD := 'ByVal fdwCharSet As Long, _':EM
CMD := 'ByVal fdwOutputPrecision As Long, _':EM
CMD := 'ByVal fdwClipPrecision As Long, _':EM
CMD := 'ByVal fdwQuality As Long, _':EM
CMD := 'ByVal fdwPitchAndFamily As Long, _':EM
CMD := 'ByVal lpszFace As String _':EM
CMD := ') As Long':EM
CMD := 'Declare Function DeleteObject Lib "gdi32" ( _':EM
CMD := 'ByVal hObject As Long _':EM
CMD := ') As Long':EM
CMD := 'Declare Function GetDeviceCaps Lib "gdi32" ( _':EM
CMD := 'ByVal hDC As Long, _':EM
CMD := 'ByVal nIndex As Long _':EM
CMD := ') As Long':EM
CMD := 'Declare Function GetDlgItem Lib "user32" ( _':EM
CMD := 'ByVal hDlg As Long, _':EM
CMD := 'ByVal nIDDlgItem As Long _':EM
CMD := ') As Long':EM
CMD := 'Declare Function GetWindowDC Lib "user32" ( _':EM
CMD := 'ByVal hWnd As Long _':EM
CMD := ') As Long':EM
CMD := 'Declare Function ReleaseDC Lib "user32" ( _':EM
CMD := 'ByVal hWnd As Long, _':EM
CMD := 'ByVal hDC As Long _':EM
CMD := ') As Long':EM
CMD := 'Declare Function SendDlgItemMessage Lib "user32" ( _':EM
CMD := 'ByVal hWnd As Long, _':EM
CMD := 'ByVal ID As Long, _':EM
CMD := 'ByVal uMsg As Long, _':EM
CMD := 'ByVal wParam As Long, _':EM
CMD := 'ByVal lParam As Long _':EM
CMD := ') As Long':EM
* The dialog function
CMD := 'Dim hFont As Long':EM
CMD := 'Dim DlgWnd As Long':EM
CMD := 'Private Function DlgFunc(DlgItem$, Action%, SuppValue&) As Boolean':EM
CMD := 'Select Case Action%':EM
CMD := 'Case 1 ':EM
CMD := 'DlgWnd = SuppValue&':EM
CMD := 'SendDlgItemMessage DlgWnd,DlgControlID("Text1"),WM_SETFONT,hFont,1':EM
CMD := 'Case 4 ' :EM
CMD := 'SendDlgItemMessage DlgWnd,DlgControlID("Text1"),EM_SETSEL,0,0':EM
CMD := 'Case 5 ':EM
CMD := 'DlgFocus "Text1"':EM
CMD := 'End Select':EM
CMD := 'End Function':EM
* End of code from SAX website
*
* Since host scripts get automatic End Sub, need a dummy Begin Sub
CMD := 'Sub Dummy':EM
* Execute script
PRINT ESC:STX:'P':CMD:CR:
* Retrieve the result
PROMPT ''
ECHO OFF
INPUT ANS:
IF ML THEN
N=OCONV(ANS,'MCN')+0
IF ANS >= 0 THEN
TEXT = ''
FOR I=1 TO N
   PRINT BEL:
   INPUT ANS,300:
   TEXT := ANS
   IF LEN(ANS) = 300 THEN
    LOOP
     INPUT ANS,300:
     TEXT := ANS
    UNTIL LEN(ANS) < 300 DO
    REPEAT
    TEXT := VM
   END ELSE
    IF I < N THEN TEXT := DELIM
   END
NEXT I
END
END ELSE
TEXT = ANS
END
ECHO ON
PROMPT '?'
RETURN
*
100 * Local subroutine to fixup embedded double-quote marks
K = 1
LOOP
J = INDEX(ARG, '"', K)
WHILE J DO
ARG = ARG[1, J] : ARG[J, 99999]
K = K + 2
REPEAT
RETURN

Back to Top
homerlh View Drop Down
Beta Tester
Beta Tester


Joined: November 11 2004
Location: United States
Status: Offline
Points: 288
Post Options Post Options   Thanks (0) Thanks(0)   Quote homerlh Quote  Post ReplyReply Direct Link To This Post Posted: November 17 2004 at 9:46am
Hi,

This looks like some interesting code. I have detected what might be a bug. In the code that builds the output string in Pick Basic, there is a line that reads.

TEXT := VM

Does your platform include VM as a pre-defined variable like D3 does @VM or does it rely on an equate ??

Thanks,

Larry Hazel
Back to Top
 Post Reply Post Reply
  Share Topic   

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 12.03
Copyright ©2001-2019 Web Wiz Ltd.