File: w_main.srw
Size: 24173
Date: Fri, 03 May 2019 20:52:14 +0200
$PBExportHeader$w_main.srw
forward
global type w_main from window
end type
type cb_encrypt_b64 from commandbutton within w_main
end type
type cb_currentgmt from commandbutton within w_main
end type
type st_8 from statictext within w_main
end type
type st_7 from statictext within w_main
end type
type sle_vector from singlelineedit within w_main
end type
type cb_hash_b64 from commandbutton within w_main
end type
type cb_hmac_b64 from commandbutton within w_main
end type
type cbx_hexencrypt from checkbox within w_main
end type
type cb_hashfile from commandbutton within w_main
end type
type st_6 from statictext within w_main
end type
type ddlb_encrypt_algorithm from dropdownlistbox within w_main
end type
type cb_encrypt from commandbutton within w_main
end type
type cb_random from commandbutton within w_main
end type
type st_5 from statictext within w_main
end type
type cb_hmac from commandbutton within w_main
end type
type cb_hash from commandbutton within w_main
end type
type st_4 from statictext within w_main
end type
type ddlb_hash_algorithm from dropdownlistbox within w_main
end type
type cb_base64 from commandbutton within w_main
end type
type st_2 from statictext within w_main
end type
type sle_password from singlelineedit within w_main
end type
type sle_result from singlelineedit within w_main
end type
type st_3 from statictext within w_main
end type
type st_1 from statictext within w_main
end type
type sle_message from singlelineedit within w_main
end type
type cb_cancel from commandbutton within w_main
end type
end forward

global type w_main from window
integer width = 3013
integer height = 1236
boolean titlebar = true
string title = "Cryptography API: Next Generation (CNG)"
boolean controlmenu = true
long backcolor = 67108864
string icon = "AppIcon!"
boolean center = true
cb_encrypt_b64 cb_encrypt_b64
cb_currentgmt cb_currentgmt
st_8 st_8
st_7 st_7
sle_vector sle_vector
cb_hash_b64 cb_hash_b64
cb_hmac_b64 cb_hmac_b64
cbx_hexencrypt cbx_hexencrypt
cb_hashfile cb_hashfile
st_6 st_6
ddlb_encrypt_algorithm ddlb_encrypt_algorithm
cb_encrypt cb_encrypt
cb_random cb_random
st_5 st_5
cb_hmac cb_hmac
cb_hash cb_hash
st_4 st_4
ddlb_hash_algorithm ddlb_hash_algorithm
cb_base64 cb_base64
st_2 st_2
sle_password sle_password
sle_result sle_result
st_3 st_3
st_1 st_1
sle_message sle_message
cb_cancel cb_cancel
end type
global w_main w_main

type variables
n_bcrypt in_bc

end variables

on w_main.create
this.cb_encrypt_b64=create cb_encrypt_b64
this.cb_currentgmt=create cb_currentgmt
this.st_8=create st_8
this.st_7=create st_7
this.sle_vector=create sle_vector
this.cb_hash_b64=create cb_hash_b64
this.cb_hmac_b64=create cb_hmac_b64
this.cbx_hexencrypt=create cbx_hexencrypt
this.cb_hashfile=create cb_hashfile
this.st_6=create st_6
this.ddlb_encrypt_algorithm=create ddlb_encrypt_algorithm
this.cb_encrypt=create cb_encrypt
this.cb_random=create cb_random
this.st_5=create st_5
this.cb_hmac=create cb_hmac
this.cb_hash=create cb_hash
this.st_4=create st_4
this.ddlb_hash_algorithm=create ddlb_hash_algorithm
this.cb_base64=create cb_base64
this.st_2=create st_2
this.sle_password=create sle_password
this.sle_result=create sle_result
this.st_3=create st_3
this.st_1=create st_1
this.sle_message=create sle_message
this.cb_cancel=create cb_cancel
this.Control[]={this.cb_encrypt_b64,&
this.cb_currentgmt,&
this.st_8,&
this.st_7,&
this.sle_vector,&
this.cb_hash_b64,&
this.cb_hmac_b64,&
this.cbx_hexencrypt,&
this.cb_hashfile,&
this.st_6,&
this.ddlb_encrypt_algorithm,&
this.cb_encrypt,&
this.cb_random,&
this.st_5,&
this.cb_hmac,&
this.cb_hash,&
this.st_4,&
this.ddlb_hash_algorithm,&
this.cb_base64,&
this.st_2,&
this.sle_password,&
this.sle_result,&
this.st_3,&
this.st_1,&
this.sle_message,&
this.cb_cancel}
end on

on w_main.destroy
destroy(this.cb_encrypt_b64)
destroy(this.cb_currentgmt)
destroy(this.st_8)
destroy(this.st_7)
destroy(this.sle_vector)
destroy(this.cb_hash_b64)
destroy(this.cb_hmac_b64)
destroy(this.cbx_hexencrypt)
destroy(this.cb_hashfile)
destroy(this.st_6)
destroy(this.ddlb_encrypt_algorithm)
destroy(this.cb_encrypt)
destroy(this.cb_random)
destroy(this.st_5)
destroy(this.cb_hmac)
destroy(this.cb_hash)
destroy(this.st_4)
destroy(this.ddlb_hash_algorithm)
destroy(this.cb_base64)
destroy(this.st_2)
destroy(this.sle_password)
destroy(this.sle_result)
destroy(this.st_3)
destroy(this.st_1)
destroy(this.sle_message)
destroy(this.cb_cancel)
end on

event open;ddlb_hash_algorithm.SelectItem(1)
ddlb_encrypt_algorithm.SelectItem(1)

end event

type cb_encrypt_b64 from commandbutton within w_main
integer x = 1975
integer y = 832
integer width = 407
integer height = 100
integer taborder = 110
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
string text = "Encrypt / B64"
end type

event clicked;String ls_Algorithm, ls_Message, ls_Password, ls_Vector
String ls_Encrypted, ls_Decrypted, ls_Result

ls_Algorithm = ddlb_encrypt_algorithm.text

ls_Message = sle_message.text
If ls_Message = "" Then
   MessageBox("Edit Error", "The message is required!", StopSign!)
   sle_message.SetFocus()
   Return
End If

ls_Password = sle_password.text
If ls_Password = "" Then
   MessageBox("Edit Error", "The password is required!", StopSign!)
   sle_password.SetFocus()
   Return
End If

ls_Vector = sle_vector.text
If ls_Vector = "" Then
   MessageBox("Edit Error", "The vector is required!", StopSign!)
   sle_vector.SetFocus()
   Return
End If

sle_result.text = ""

If cbx_hexencrypt.Checked Then
   ls_Encrypted = in_bc.of_EncryptHex(ls_Algorithm, ls_Message, ls_Password, ls_Vector)
Else
   ls_Encrypted = in_bc.of_Encrypt(ls_Algorithm, ls_Message, ls_Password, ls_Vector)
End If
If IsNull(ls_Encrypted) Then
   MessageBox(in_bc.LastFunction + " Failed", &
         in_bc.LastErrText, StopSign!)
   Return
End If

// convert to base64
If Not in_bc.of_Base64Encode(ls_Encrypted, ls_Result) Then
   MessageBox(in_bc.LastFunction + " Failed", &
         in_bc.LastErrText, StopSign!)
   Return
End If

sle_result.text = ls_Result

end event

type cb_currentgmt from commandbutton within w_main
integer x = 1975
integer y = 992
integer width = 407
integer height = 100
integer taborder = 160
boolean bringtotop = true
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
string text = "GMT/UTC"
end type

event clicked;DateTime ldt_current
Integer li_offset
String ls_datetime

ldt_current = in_bc.of_CurrentUTC()

ls_datetime = String(ldt_current, &
               "ddd, dd mmm yyyy hh:mm:ss") + " GMT"

MessageBox( this.text, &
            "The current time is: " + ls_datetime)

end event

type st_8 from statictext within w_main
integer x = 1243
integer y = 320
integer width = 1687
integer height = 164
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
long textcolor = 33554432
long backcolor = 67108864
string text = "Vector is a public key used by Encrypt/Decrypt in conjunction with the secret password. Each algorithm requires it to be a different length, either 8 or 16 (AES). If the vector is too long, the extra is ignored."
boolean focusrectangle = false
end type

type st_7 from statictext within w_main
integer x = 73
integer y = 340
integer width = 187
integer height = 60
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
long textcolor = 33554432
long backcolor = 67108864
string text = "Vector:"
boolean focusrectangle = false
end type

type sle_vector from singlelineedit within w_main
integer x = 366
integer y = 328
integer width = 809
integer height = 84
integer taborder = 30
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
long textcolor = 33554432
string text = "MyPublicCryptKey"
integer limit = 16
borderstyle borderstyle = stylelowered!
end type

type cb_hash_b64 from commandbutton within w_main
integer x = 1499
integer y = 832
integer width = 407
integer height = 100
integer taborder = 100
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
string text = "Hash / B64"
end type

event clicked;Blob lblb_Message, lblb_HashResult
String ls_Message, ls_Algorithm, ls_Result

ls_Message = sle_message.text
If ls_Message = "" Then
   MessageBox("Edit Error", "The message is required!", StopSign!)
   Return
End If

ls_Algorithm = ddlb_hash_algorithm.text

// not using the Ansi/Unicode option
lblb_Message  = Blob(ls_Message, EncodingAnsi!)

// generate hash
lblb_HashResult = in_bc.of_Hash(ls_Algorithm, lblb_Message)
If IsNull(lblb_HashResult) Then
   MessageBox(in_bc.LastFunction + " Failed", &
         in_bc.LastErrText, StopSign!)
   Return
End If

// convert to base64
If Not in_bc.of_Base64Encode(lblb_HashResult, ls_Result) Then
   MessageBox(in_bc.LastFunction + " Failed", &
         in_bc.LastErrText, StopSign!)
   Return
End If

sle_result.text = ls_Result

end event

type cb_hmac_b64 from commandbutton within w_main
integer x = 1499
integer y = 992
integer width = 407
integer height = 100
integer taborder = 150
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
string text = "HMAC / B64"
end type

event clicked;// For maximum security, it is recommended that the secret key (password)
// be the same length as the output of the chosen algorithm. If it is longer,
// the value is truncated. If shorter, it is right filled with zeros.

Blob lblb_Message, lblb_Password, lblb_HashResult
String ls_Message, ls_Password, ls_Algorithm, ls_Result

ls_Message = sle_message.text
If ls_Message = "" Then
   MessageBox("Edit Error", "The message is required!", StopSign!)
   Return
End If

ls_Password = sle_password.text
If ls_Password = "" Then
   MessageBox("Edit Error", "The password is required!", StopSign!)
   Return
End If

ls_Algorithm = ddlb_hash_algorithm.text

// not using the Ansi/Unicode option
lblb_Message  = Blob(ls_Message, EncodingAnsi!)
lblb_Password = Blob(ls_Password, EncodingAnsi!)

// generate hash with password
lblb_HashResult = in_bc.of_HMAC(ls_Algorithm, lblb_Message, lblb_Password)
If IsNull(lblb_HashResult) Then
   MessageBox(in_bc.LastFunction + " Failed", &
         in_bc.LastErrText, StopSign!)
   Return
End If

// convert to base64
If Not in_bc.of_Base64Encode(lblb_HashResult, ls_Result) Then
   MessageBox(in_bc.LastFunction + " Failed", &
         in_bc.LastErrText, StopSign!)
   Return
End If

sle_result.text = ls_Result

end event

type cbx_hexencrypt from checkbox within w_main
integer x = 1829
integer y = 564
integer width = 443
integer height = 60
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
long textcolor = 33554432
long backcolor = 67108864
string text = "Encrypt to Hex"
end type

type cb_hashfile from commandbutton within w_main
integer x = 549
integer y = 992
integer width = 407
integer height = 100
integer taborder = 130
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
string text = "Hash a File"
end type

event clicked;String ls_pathname, ls_filename, ls_Algorithm, ls_result
Integer li_rc

sle_result.text = ""

li_rc = GetFileOpenName("Select a File", ls_pathname, ls_filename)
If li_rc = 1 Then
   ls_Algorithm = ddlb_hash_algorithm.text
   ls_result = in_bc.of_HashFileToHex(ls_Algorithm, ls_pathname)
   If IsNull(ls_result) Then
      MessageBox(in_bc.LastFunction + " Failed", &
            in_bc.LastErrText, StopSign!)
      Return
   End If
   sle_result.text = ls_result
End If

end event

type st_6 from statictext within w_main
integer x = 896
integer y = 564
integer width = 462
integer height = 60
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
long textcolor = 33554432
long backcolor = 67108864
string text = "Encrypt Algorithm:"
alignment alignment = right!
boolean focusrectangle = false
end type

type ddlb_encrypt_algorithm from dropdownlistbox within w_main
integer x = 1390
integer y = 552
integer width = 334
integer height = 540
integer taborder = 50
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
long textcolor = 33554432
boolean sorted = false
boolean vscrollbar = true
string item[] = {"AES","DES","DESX","RC2","3DES","3DES_112"}
borderstyle borderstyle = stylelowered!
end type

type cb_encrypt from commandbutton within w_main
integer x = 1024
integer y = 832
integer width = 407
integer height = 100
integer taborder = 90
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
string text = "Encrypt"
end type

event clicked;// This demonstrates encryption and decryption. You have the option of converting the encrypted string
// to a hex string by using of_EncryptHex & of_DecryptHex. You can also use blobs with of_Encrypt & of_Decrypt.
//
// Arguments:
//
// ls_Algorithm   This is the encryption algorithm to be used, AES for example.
//
// ls_Message     This is the value that you want to be encrypted.
//
// ls_Password    This is the secret password used to encrypt & decrypt the message.
//
// ls_Vector      This is the Initialization Vector (Salt). After encryption you will need to store or
//                transmit this along with the encrypted message. It can be sent in plain text. Its
//                purpose is to cause the same message/password to result in a different encrypted string.

String ls_Algorithm, ls_Message, ls_Password, ls_Vector
String ls_Encrypted, ls_Decrypted

ls_Algorithm = ddlb_encrypt_algorithm.text

ls_Message = sle_message.text
If ls_Message = "" Then
   MessageBox("Edit Error", "The message is required!", StopSign!)
   sle_message.SetFocus()
   Return
End If

ls_Password = sle_password.text
If ls_Password = "" Then
   MessageBox("Edit Error", "The password is required!", StopSign!)
   sle_password.SetFocus()
   Return
End If

ls_Vector = sle_vector.text
If ls_Vector = "" Then
   MessageBox("Edit Error", "The vector is required!", StopSign!)
   sle_vector.SetFocus()
   Return
End If

sle_result.text = ""

If cbx_hexencrypt.Checked Then
   ls_Encrypted = in_bc.of_EncryptHex(ls_Algorithm, ls_Message, ls_Password, ls_Vector)
Else
   ls_Encrypted = in_bc.of_Encrypt(ls_Algorithm, ls_Message, ls_Password, ls_Vector)
End If
If IsNull(ls_Encrypted) Then
   MessageBox(in_bc.LastFunction + " Failed", &
         in_bc.LastErrText, StopSign!)
   Return
End If

If cbx_hexencrypt.Checked Then
   ls_Decrypted = in_bc.of_DecryptHex(ls_Algorithm, ls_Encrypted, ls_Password, ls_Vector)
Else
   ls_Decrypted = in_bc.of_Decrypt(ls_Algorithm, ls_Encrypted, ls_Password, ls_Vector)
End If
If IsNull(ls_Decrypted) Then
   MessageBox(in_bc.LastFunction + " Failed", &
         in_bc.LastErrText, StopSign!)
   Return
End If

If ls_Decrypted = ls_Message Then
   sle_result.text = ls_Encrypted
Else
   MessageBox("Encrypt Failed", &
         "Decrypted string does not equal the encrypted text!", StopSign!)
End If

end event

type cb_random from commandbutton within w_main
integer x = 73
integer y = 992
integer width = 407
integer height = 100
integer taborder = 120
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
string text = "Random Nbr"
end type

event clicked;ULong lul_Random

lul_Random = in_bc.of_RandomNbr()
If IsNull(lul_Random) Then
   MessageBox(in_bc.LastFunction + " Failed", &
         in_bc.LastErrText, StopSign!)
   Return
End If

sle_result.text = String(lul_Random)

end event

type st_5 from statictext within w_main
integer x = 2121
integer y = 212
integer width = 773
integer height = 60
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
long textcolor = 33554432
long backcolor = 67108864
string text = "Used by HMAC/Encrypt/Decrypt"
boolean focusrectangle = false
end type

type cb_hmac from commandbutton within w_main
integer x = 549
integer y = 832
integer width = 407
integer height = 100
integer taborder = 80
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
string text = "HMAC"
end type

event clicked;// For maximum security, it is recommended that the secret key (password)
// be the same length as the output of the chosen algorithm. If it is longer,
// the value is truncated. If shorter, it is right filled with zeros.

Blob lblb_result
String ls_Message, ls_Password, ls_Algorithm, ls_Result

ls_Message = sle_message.text
If ls_Message = "" Then
   MessageBox("Edit Error", "The message is required!", StopSign!)
   Return
End If

ls_Password = sle_password.text
If ls_Password = "" Then
   MessageBox("Edit Error", "The password is required!", StopSign!)
   Return
End If

ls_Algorithm = ddlb_hash_algorithm.text

lblb_result = in_bc.of_HMAC(ls_Algorithm, ls_Message, ls_Password)
If IsNull(lblb_result) Then
   MessageBox(in_bc.LastFunction + " Failed", &
         in_bc.LastErrText, StopSign!)
   Return
End If

sle_result.text = in_bc.of_Blob2Hex(lblb_result)

end event

type cb_hash from commandbutton within w_main
integer x = 73
integer y = 832
integer width = 407
integer height = 100
integer taborder = 70
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
string text = "Hash"
end type

event clicked;String ls_Message, ls_Algorithm, ls_Result

ls_Message = sle_message.text
If ls_Message = "" Then
   MessageBox("Edit Error", "The message is required!", StopSign!)
   Return
End If

ls_Algorithm = ddlb_hash_algorithm.text

ls_Result = in_bc.of_HashToHex(ls_Algorithm, ls_Message)
If IsNull(ls_Result) Then
   MessageBox(in_bc.LastFunction + " Failed", &
         in_bc.LastErrText, StopSign!)
   Return
End If

sle_result.text = ls_Result

end event

type st_4 from statictext within w_main
integer x = 73
integer y = 564
integer width = 402
integer height = 60
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
long textcolor = 33554432
long backcolor = 67108864
string text = "Hash Algorithm:"
boolean focusrectangle = false
end type

type ddlb_hash_algorithm from dropdownlistbox within w_main
integer x = 475
integer y = 552
integer width = 334
integer height = 540
integer taborder = 40
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
long textcolor = 33554432
boolean sorted = false
boolean vscrollbar = true
string item[] = {"SHA1","SHA256","SHA384","SHA512","MD2","MD5"}
borderstyle borderstyle = stylelowered!
end type

type cb_base64 from commandbutton within w_main
integer x = 1024
integer y = 992
integer width = 407
integer height = 100
integer taborder = 140
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
string text = "Base64"
end type

event clicked;Boolean lb_rc
Blob lblob_Decoded
String ls_Message, ls_Encoded, ls_Decoded

ls_Message = sle_message.text
If ls_Message = "" Then
   MessageBox("Edit Error", "The message is required!", StopSign!)
   Return
End If

lb_rc = in_bc.of_Base64Encode(ls_Message, ls_Encoded)

sle_result.text = ls_Encoded

lb_rc = in_bc.of_Base64Decode(ls_Encoded, ls_Decoded)

If ls_Decoded <> ls_Message Then
   MessageBox(this.text, "Decoded <> Message!")
End If

end event

type st_2 from statictext within w_main
integer x = 73
integer y = 212
integer width = 265
integer height = 60
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
long textcolor = 33554432
long backcolor = 67108864
string text = "Password:"
boolean focusrectangle = false
end type

type sle_password from singlelineedit within w_main
integer x = 366
integer y = 200
integer width = 1687
integer height = 84
integer taborder = 20
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
long textcolor = 33554432
string text = "MySecretKey"
borderstyle borderstyle = stylelowered!
end type

type sle_result from singlelineedit within w_main
integer x = 366
integer y = 680
integer width = 2565
integer height = 84
integer taborder = 60
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
long textcolor = 33554432
boolean displayonly = true
borderstyle borderstyle = stylelowered!
end type

type st_3 from statictext within w_main
integer x = 73
integer y = 692
integer width = 178
integer height = 60
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
long textcolor = 33554432
long backcolor = 67108864
string text = "Result:"
boolean focusrectangle = false
end type

type st_1 from statictext within w_main
integer x = 73
integer y = 84
integer width = 247
integer height = 60
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
long textcolor = 33554432
long backcolor = 67108864
string text = "Message:"
boolean focusrectangle = false
end type

type sle_message from singlelineedit within w_main
integer x = 366
integer y = 72
integer width = 2565
integer height = 84
integer taborder = 10
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
long textcolor = 33554432
string text = "PowerBuilder Rules!"
borderstyle borderstyle = stylelowered!
end type

type cb_cancel from commandbutton within w_main
integer x = 2523
integer y = 992
integer width = 407
integer height = 100
integer taborder = 170
integer textsize = -8
integer weight = 400
fontcharset fontcharset = ansi!
fontpitch fontpitch = variable!
fontfamily fontfamily = swiss!
string facename = "Segoe UI"
string text = "Cancel"
boolean cancel = true
end type

event clicked;Close(Parent)

end event