две затыки с 10

Раздел посвящен программированию с использованием Power Basic.
Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

две затыки с 10

Сообщение Димитрий » 13.12.2011 (Вт) 8:42

Как всегда опробовал старый код в 10. Есть два вопроса:
1. Форма из ресурсов в 9 норм, в 10 не могу закрыть (DIALOG END CB.HNDL не работает). Формы простые, можно и перевести конечно и в код, но всё же :(
2. С клавиатуры идут кракозябы даже в родных примерах. Попробовал устранить это - #OPTION ANSIAPI. Устраняется, но функция MENU GET TEXT hPopup3, BYCMD %ID_SAVE TO sTmenu в коде перестаёт работать :(

Может быть у кого-нибудь есть рецепты?
PS Windows 2000

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: две затыки с 10

Сообщение jangle » 13.12.2011 (Вт) 17:44

Надо код выкладывать

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Re: две затыки с 10

Сообщение Димитрий » 13.12.2011 (Вт) 20:58

Код?
2 вопрос - PBWin10\samples\DDT\Menu\Menu.bas - набор строки на русской раскладке (йцукенгшщзхъ)
Безымянный.JPG
Безымянный.JPG (8.82 Кб) Просмотров: 3009

PS WindowsXP, думал что для древней 2000 только, ан нет :(
Последний раз редактировалось Димитрий 13.12.2011 (Вт) 21:17, всего редактировалось 1 раз.

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Re: две затыки с 10

Сообщение Димитрий » 13.12.2011 (Вт) 21:04

1вопрос не так важен, однако -
Код: Выделить всё
'================================================================================
CALLBACK FUNCTION DlgFindProc
    SELECT CASE CBMSG
        CASE %WM_INITDIALOG
            CONTROL SET TEXT CBHNDL, %ID_TXTFIND, strFind
            CONTROL SET FOCUS CBHNDL, %ID_TXTFIND
        CASE %WM_COMMAND
            SELECT CASE AS LONG CB.CTL
                CASE %IDOK
                    CONTROL GET TEXT CBHNDL, %ID_TXTFIND TO strFind
                    DIALOG END CBHNDL
                CASE %IDCANCEL
                    strFind = ""
                    DIALOG END CBHNDL
            END SELECT
    END SELECT
END FUNCTION
'================================================================================

форма не закрывается, сама форма в ресурсах-
Код: Выделить всё
#define ID_TXTFIND               2001
#define ID_TXTRUN                2101
#define ID_LAB                   2102
#define IDC_STATIC                -1

#include "resource.h"
ICON1 ICON "my.ico"

MAINDLG DIALOG DISCARDABLE  0, 0, 263, 51
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION
CAPTION "gbs_mini"
FONT 8, "MS Sans Serif"
BEGIN
    DEFPUSHBUTTON   "&Find next",IDOK,147,30,50,14
    PUSHBUTTON      "&Cancel",IDCANCEL,206,30,50,14
    LTEXT           "Find This:",IDC_STATIC,7,9,31,8
    EDITTEXT        ID_TXTFIND,47,8,209,14,ES_AUTOHSCROLL

    GROUPBOX        "",IDC_STATIC,1,0,261,50
END                                           


вызов формы - DialogBox GetModuleHandle(BYVAL 0), "MAINDLG", CBHNDL, CODEPTR(DlgFindProc)

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: две затыки с 10

Сообщение jangle » 13.12.2011 (Вт) 22:11

Димитрий писал(а):Код?
2 вопрос - PBWin10\samples\DDT\Menu\Menu.bas - набор строки на русской раскладке (йцукенгшщзхъ)
Безымянный.JPG

PS WindowsXP, думал что для древней 2000 только, ан нет :(


Код: Выделить всё
#Option AnsiApi

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: две затыки с 10

Сообщение jangle » 13.12.2011 (Вт) 22:16

Димитрий писал(а):вызов формы - DialogBox GetModuleHandle(BYVAL 0), "MAINDLG", CBHNDL, CODEPTR(DlgFindProc)


Закрывай функцией EndDialog - function destroys a modal dialog box, causing the system to end any processing for the dialog box.

Код: Выделить всё
BOOL EndDialog(

    HWND hDlg,   // handle to dialog box
    int nResult    // value to return
   );   


Parameters

hDlg

Identifies the dialog box to be destroyed.

nResult

Specifies the value to be returned to the application from the function that created the dialog box.



Return Values

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Re: две затыки с 10

Сообщение Димитрий » 13.12.2011 (Вт) 23:39

Собственно - #Option AnsiApi - я уже приводил, но попробуйте выполнить в том же примере-
MENU GET TEXT hMenu, BYCMD %ID_ABOUT TO tx$
MSGBOX tx$

После #Option AnsiApi не работает не только текст меню.

EndDialog - действительно закрывает диалог :D , спасибо.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: две затыки с 10

Сообщение jangle » 14.12.2011 (Ср) 9:36

Димитрий писал(а):Собственно - #Option AnsiApi - я уже приводил, но попробуйте выполнить в том же примере-
MENU GET TEXT hMenu, BYCMD %ID_ABOUT TO tx$
MSGBOX tx$

После #Option AnsiApi не работает не только текст меню.

EndDialog - действительно закрывает диалог :D , спасибо.


Выложи исходник же, или надо гадать что у тебя не работает?

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Re: две затыки с 10

Сообщение Димитрий » 14.12.2011 (Ср) 16:35

Код: Выделить всё
#COMPILER PBWIN 10
#COMPILE EXE
#OPTION ANSIAPI
#DIM ALL
#RESOURCE MANIFEST, 1, "XPTheme.xml"

%IDTEXT     = 100

%ID_OPEN    = 401
%ID_EXIT    = 402
%ID_OPTION1 = 403
%ID_OPTION2 = 404
%ID_HELP    = 405
%ID_ABOUT   = 406

' Global variable to receive the user name
GLOBAL UserName AS WSTRING
GLOBAL hMenu   AS DWORD
GLOBAL hPopup1 AS DWORD
GLOBAL hPopup2 AS DWORD

CALLBACK FUNCTION OkButton () AS LONG

    IF CB.MSG = %WM_COMMAND AND CB.CTLMSG = %BN_CLICKED THEN
        CONTROL GET TEXT CB.HNDL, %IDTEXT TO UserName
        DIALOG END CB.HNDL, 1
        FUNCTION = 1
    END IF

END FUNCTION


CALLBACK FUNCTION CancelButton () AS LONG

    IF CB.MSG = %WM_COMMAND AND CB.CTLMSG = %BN_CLICKED THEN
        DIALOG END CB.HNDL, 0
        FUNCTION = 1
    END IF

END FUNCTION


CALLBACK FUNCTION DlgProc () AS LONG
LOCAL tx AS STRING
    IF CB.MSG = %WM_COMMAND THEN
        IF CB.CTL => %ID_OPEN AND CB.CTL <= %ID_ABOUT THEN
            MENU GET TEXT hMenu, BYCMD CB.CTL TO tx 'возвращается пустая строка
            MSGBOX tx                                                    'без #OPTION ANSIAPI работает правильно
            FUNCTION = 1
        END IF
    END IF

END FUNCTION


FUNCTION PBMAIN () AS LONG

    LOCAL hDlg    AS DWORD
    LOCAL Result  AS LONG

    '----------------------------------------------------------------
    ' Create a new dialog template
    DIALOG NEW 0, "What is your name?", ,, 160, 60, 0, 0 TO hDlg

    '----------------------------------------------------------------
    ' Add controls to it
    CONTROL ADD TEXTBOX, hDlg, %IDTEXT, "", 14,  12, 134, 12, 0
    CONTROL ADD BUTTON, hDlg, %IDOK, "OK", 34, 32, 40, 14, %BS_DEFAULT CALL OkButton
    CONTROL ADD BUTTON, hDlg, %IDCANCEL, "Cancel", 84, 32, 40, 14, 0 CALL CancelButton

    '----------------------------------------------------------------
    ' Create a top-level menu:
    MENU NEW BAR TO hMenu

    ' Add a top-level menu item with a popup menu:
    MENU NEW POPUP TO hPopup1
    MENU ADD POPUP, hMenu, "&File", hPopup1, %MF_ENABLED
    MENU ADD STRING, hPopup1, "&Open", %ID_OPEN, %MF_ENABLED
    MENU ADD STRING, hPopup1, "&Exit", %ID_EXIT, %MF_ENABLED
    MENU ADD STRING, hPopup1, "-",      0, 0

    ' Now we can add another item to the menu that will bring up a sub-menu.
    ' First we obtain a new popup menu handle to distinuish it from the first popup menu:
    MENU NEW POPUP TO hPopup2

    ' Now add a new menu item to the first menu.
    ' This item will bring up the sub-menu when selected:
    MENU ADD POPUP, hPopup1, "&More Options", hPopup2, %MF_ENABLED

    ' Now we will define the sub menu:
    MENU ADD STRING, hPopup2, "Option &1", %ID_OPTION1, %MF_ENABLED
    MENU ADD STRING, hPopup2, "Option &2", %ID_OPTION2, %MF_ENABLED

    ' Finally, we'll add a second top-level menu and popup.
    ' For this popup, we can reuse the first popup variable:
    MENU NEW POPUP TO hPopup1
    MENU ADD POPUP,  hMenu, "&Help", hPopup1, %MF_ENABLED
    MENU ADD STRING, hPopup1, "&Help", %ID_HELP, %MF_ENABLED
    MENU ADD STRING, hPopup1, "-",      0, 0
    MENU ADD STRING, hPopup1, "&About", %ID_ABOUT, %MF_ENABLED

    MENU ATTACH hMenu, hDlg
    '----------------------------------------------------------------
    ' Display the dialog
    DIALOG SHOW MODAL hDlg, CALL DlgProc TO Result

    '----------------------------------------------------------------
    ' Check the result at exit
    IF Result THEN
        MSGBOX "Hello " + UserName
    END IF

END FUNCTION     

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: две затыки с 10

Сообщение jangle » 14.12.2011 (Ср) 17:46

хз, но у меня только так заработало


Код: Выделить всё
CallBack Function DlgProc () As Long
Local tx As  StringZ  * 64
    If Cb.Msg = %WM_Command Then
        If Cb.Ctl => %ID_OPEN And Cb.Ctl <= %ID_ABOUT Then
                 GetMenuString(hMenu, %ID_ABOUT, tx, SizeOf(tx), %MF_BYCOMMAND)
                  MsgBox tx
            Function = 1
        End If
    End If
End Function
               

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Re: две затыки с 10

Сообщение Димитрий » 14.12.2011 (Ср) 18:44

GetMenuString, EndDialog...... :)
Это конечно хорошо, но ... я же пишу форму PBMAIN и в PB9 всё прекрасно работало.
Проще на всё сразу написать в WINMAIN тогда, что не хотелось бы. :(
Кстати примеры на WINMAIN ни каких проблемм не создают. Так что пока буду лавировать между версиями :D

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: две затыки с 10

Сообщение jangle » 14.12.2011 (Ср) 20:21

Они поддержку Unicode наконец со скрипом ввели. Поэтому я ожидаю большого количества багов на стыке режимов ANS-UNICODE.
В любом случае отказываться от 9 версии еще рано.


Вернуться в Power Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

    TopList