Создал балванку приложения в PB Forms 1.5 компилю в в 8 -ой версии, запускаю и вижу в заголовке формы Абракадабру вместо "Русский заголовок формы". ПОЧЕМУ?
Вот балванка -
#PBFORMS CREATED V1.50
'------------------------------------------------------------------------------
' The first line in this file is a PB/Forms metastatement.
' It should ALWAYS be the first line of the file. Other
' PB/Forms metastatements are placed at the beginning and
' end of "Named Blocks" of code that should be edited
' with PBForms only. Do not manually edit or delete these
' metastatements or PB/Forms will not be able to reread
' the file correctly. See the PB/Forms documentation for
' more information.
' Named blocks begin like this: #PBFORMS BEGIN ...
' Named blocks end like this: #PBFORMS END ...
' Other PB/Forms metastatements such as:
' #PBFORMS DECLARATIONS
' are used by PB/Forms to insert additional code.
' Feel free to make changes anywhere else in the file.
'------------------------------------------------------------------------------
#COMPILE EXE
#DIM ALL
'------------------------------------------------------------------------------
' ** Includes **
'------------------------------------------------------------------------------
#PBFORMS BEGIN INCLUDES
#IF NOT %DEF(%WINAPI)
#INCLUDE "WIN32API.INC"
#ENDIF
#PBFORMS END INCLUDES
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' ** Constants **
'------------------------------------------------------------------------------
#PBFORMS BEGIN CONSTANTS
%IDD_DIALOG1 = 101
#PBFORMS END CONSTANTS
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' ** Declarations **
'------------------------------------------------------------------------------
DECLARE CALLBACK FUNCTION ShowDIALOG1Proc()
DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
#PBFORMS DECLARATIONS
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' ** Main Application Entry Point **
'------------------------------------------------------------------------------
FUNCTION PBMAIN()
ShowDIALOG1 %HWND_DESKTOP
END FUNCTION
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' ** CallBacks **
'------------------------------------------------------------------------------
CALLBACK FUNCTION ShowDIALOG1Proc()
SELECT CASE AS LONG CBMSG
CASE %WM_INITDIALOG
' Initialization handler
CASE %WM_NCACTIVATE
STATIC hWndSaveFocus AS DWORD
IF ISFALSE CBWPARAM THEN
' Save control focus
hWndSaveFocus = GetFocus()
ELSEIF hWndSaveFocus THEN
' Restore control focus
SetFocus(hWndSaveFocus)
hWndSaveFocus = 0
END IF
CASE %WM_COMMAND
' Process control notifications
SELECT CASE AS LONG CBCTL
END SELECT
END SELECT
END FUNCTION
'------------------------------------------------------------------------------
'------------------------------------------------------------------------------
' ** Dialogs **
'------------------------------------------------------------------------------
FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
LOCAL lRslt AS LONG
#PBFORMS BEGIN DIALOG %IDD_DIALOG1->->
LOCAL hDlg AS DWORD
DIALOG NEW hParent, "Русский заголовок формы", 337, 207, 201, 121, _
%WS_POPUP OR %WS_BORDER OR %WS_DLGFRAME OR %WS_CAPTION OR _
%WS_SYSMENU OR %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR _
%DS_3DLOOK OR %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_WINDOWEDGE OR _
%WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _
%WS_EX_RIGHTSCROLLBAR, TO hDlg
#PBFORMS END DIALOG
DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt
#PBFORMS BEGIN CLEANUP %IDD_DIALOG1
#PBFORMS END CLEANUP
FUNCTION = lRslt
END FUNCTION
'------------------------------------------------------------------------------
Что то я кода для шрифтов у тебя не вижу. Ты вообще в дизайнере пробовал шрифты настраивать или не заметил кнопки Font. Вот там когда нажимаешь возможно набор символов стоит западноевропейский вместо кирилицы.
Если шрифтами пользоваться то PbForms создаёт примерно такой код:
Local hFont1 As Dword
hFont1 = PBFormsMakeFont("Times New Roman", 9, 400, %FALSE, %FALSE, _
%FALSE, 204)
 ialog Send hDlg, %WM_SETFONT, hFont1, 0
 eleteObject hFont1
Добавил шрифт, но грабли продолжаются, ничче не понимаю.
...
FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
LOCAL lRslt AS LONG
#PBFORMS Begin Dialog %IDD_DIALOG1->->
LOCAL hDlg AS DWORD
LOCAL hFont1 AS DWORD
 IALOG NEW hParent, "Русский заголовок формы", 323, 182, 201, 121, _
%WS_POPUP OR %WS_BORDER OR %WS_DLGFRAME OR %WS_CAPTION OR _
%WS_SYSMENU OR %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR _
%DS_3DLOOK OR %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_WINDOWEDGE OR _
%WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _
%WS_EX_RIGHTSCROLLBAR, TO hDlg
А, вспомнил, у меня тоже такая трабла была и я её так и не решил, просто озаглавил латиницей. Единственное что могу предложить, способ, известный ещё с Windows 3.x. Это прибавлять к имень шрифта окончание Cyr. Например, "Times New Roman Cyr"
Не, не фурычит. Тогда другой способ. Смотри PBFormsMakeFont, у него последний параметр lCharSet идёт 204. Что там за флаги установлены не знаю, нужно все чарсеты перебирать.
Точно ! Работает ! Спасибо, только мне больше нравится перед диалог шоу
LOCAL lRslt AS LONG
LOCAL hDlg AS DWORD
 IALOG NEW hParent, "", 323, 182, 201, 121, _
%WS_POPUP OR %WS_BORDER OR %WS_DLGFRAME OR %WS_CAPTION OR _
%WS_SYSMENU OR %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR _
%DS_3DLOOK OR %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_WINDOWEDGE OR _
%WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _
%WS_EX_RIGHTSCROLLBAR, TO hDlg
CONTROL ADD BUTTON, hDlg, %IDC_BUTTON1, "Button1", 65, 90, 65, 15
DIALOG SET TEXT hDlg, "Русский заголовок"
 IALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt
FUNCTION = lRslt
END FUNCTION
А теперь теже грабли с инпутбоксом, притом со всеми текстами -
FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
LOCAL lRslt AS LONG
LOCAL a AS STRING
a = INPUTBOX$("Это промт", "Это титл", "Это дефолт"
FUNCTION = lRslt
END FUNCTION
Свой InputBox(из форума на PB) с учетом поправок CyRax
InputBox.INC
CALLBACK FUNCTION ipb_cb
STATIC lpText AS ASCIIZ PTR
SELECT CASE CBMSG
CASE %WM_USER+1 : lpText = CBWPARAM
CASE %WM_COMMAND
SELECT CASE LOWRD(CBWPARAM)
CASE 1
CONTROL GET TEXT CBHNDL, 3 TO @lpTEXT
 IALOG END CBHNDL, %true
CASE 2 : DIALOG END CBHNDL, %False
END SELECT
END SELECT
END FUNCTION
FUNCTION MyInputbox(BYVAL hWndOwner AS LONG, BYVAL Caption AS STRING, BYVAL ButtonYes AS STRING, BYVAL ButtonNo AS STRING, BYVAL Defin AS STRING ) AS STRING
LOCAL hDlg AS LONG, _
result AS LONG, _
sUSER AS ASCIIZ * 80
 IALOG NEW hWndOwner, "", ,, 160, 65, %WS_BORDER TO hDlg
CONTROL ADD TEXTBOX, hDlg, 3, Defin , 14, 12, 134, 12, 0
CONTROL ADD BUTTON, hDlg, 1, ButtonYes, 34, 32, 40, 14, 1
CONTROL ADD BUTTON, hDlg, 2, ButtonNo, 84, 32, 40, 14
 IALOG SET TEXT hDlg, Caption
CallWindowProc CODEPTR(ipb_cb), hDlg, %WM_USER+1, VARPTR(sUSER), 0
 IALOG SHOW MODAL hDlg CALL ipb_cb TO result
IF result THEN FUNCTION = sUSER
END FUNCTION
вызов из программы
sResult = MyInputbox(hDlgForm, "Введите маску...", "Ок", "Отмена", "*.dbf"
Просто InputBox врядли решается (ИМХО конечно). Можно разве что какой нибудь дурацкий вариант с потоком, ожидающим сооздания окна InputBox-а, но тогда уж проще свой InputBox нарисовать
Есть же кустарные STDIN/OUT для PB/WIN. Почему бы бы InputBox не сделать?