Добавить в диалог Save as

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

Добавить в диалог Save as

Сообщение Димитрий » 17.01.2013 (Чт) 10:55

Пробую добавить комбобокс выбора кодировки в окно диалога Save as (а ля блокнот)
FUNCTION = GetSaveFilename(ofn)
но если только выставляю в структуре
iHookmask = %OFN_EXPLORER OR %OFN_ENABLEHOOK OR %OFN_ENABLESIZING OR %OFN_ENABLETEMPLATE
Ofn.flags = ofn.flags OR iHookMask

то диалог просто рушится, не открывается.
Нет ли у кого примера на PB :?:
Много искал в интернете, нашёл на С и др. Но ума не хватает правильно перевести. :cry:

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Добавить в диалог Save as

Сообщение ger_kar » 19.01.2013 (Сб) 16:50

Димитрий писал(а):Много искал в интернете, нашёл на С
Ну давай ссылку на этот пример.
Бороться и искать, найти и перепрятать

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

Re: Добавить в диалог Save as

Сообщение Димитрий » 21.01.2013 (Пн) 10:58

Вложения
10.rar
мои файлы
(2.41 Кб) Скачиваний: 310

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 21.01.2013 (Пн) 13:40

Димитрий писал(а):С
http://www.frolov-lib.ru/books/bsp/v13/ch4_3.htm Функция GetSrcFile

Только мне кажется подозрительным, что это статья для Windows 3.1?

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

Re: Добавить в диалог Save as

Сообщение Димитрий » 21.01.2013 (Пн) 13:56

К сожалению не чем проверить работоспособность, у меня на машине Windows 2000 и нет Cи.

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

Re: Добавить в диалог Save as

Сообщение Димитрий » 22.01.2013 (Вт) 13:32

Разобрался с флагами код зарабтал
rc
Код: Выделить всё
#include "resource.h"

#define ID_COMBO  2000

NPSAVEDIALOG DIALOG 30, 17, 300, 22
STYLE DS_CONTROL | WS_CHILD | WS_CLIPSIBLINGS | DS_3DLOOK
CAPTION ""
LANGUAGE LANG_RUSSIAN, 0x1
FONT 8, "MS Shell Dlg"
{
   CONTROL "&Кодировка:", 259, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE, 68, 1, 48, 40
   CONTROL "", ID_COMBO, COMBOBOX, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_GROUP | WS_TABSTOP, 130, 0, 164, 160
}

bas
Код: Выделить всё
#COMPILE EXE
#DIM ALL
#INCLUDE "WIN32API.INC"
#RESOURCE RES, "my.res"
    GLOBAL hInst  AS LONG
    GLOBAL SelCod AS STRING
'---------------------------------------------------------------------
%ID_SAVE_BUTTON      = 201
%ID_SAVE_FILENAME    = 202
%ID_CODIROVKA        = 203

%ID_USE_HOOK         = 251
%ID_COMBO            = 2000

%ID_COURTESY         = 301
%ID_EXIT             = 302
'----------------------------------------------------------------------
FUNCTION WINMAIN (BYVAL hInstance     AS LONG, _
                  BYVAL hPrevInstance AS LONG, _
                  BYVAL lpCmdLine     AS ASCIIZ PTR, _
                  BYVAL iCmdShow      AS LONG) AS LONG
  LOCAL hDlg AS LONG
    DIALOG NEW    0, "'Save as' File Dialogs", 10,10,300,100, %WS_OVERLAPPEDWINDOW, 0 TO hDlg

    CONTROL ADD  BUTTON,  hDlg, %ID_SAVE_BUTTON,    "&Save", 10, 14, 40,14
    CONTROL ADD  LABEL,   hDlg, %ID_SAVE_FILENAME,  "", 60, 14, 230, 14, %SS_SUNKEN
    CONTROL ADD  LABEL,   hDlg, %ID_CODIROVKA,      "", 60, 30, 230, 14, %SS_SUNKEN

    hInst = hInstance

    DIALOG SHOW MODAL hDLG, CALL DialogProc
END FUNCTION
'======================================================================
CALLBACK FUNCTION DialogProc() AS LONG

  LOCAL sCaption AS STRING, sFileSpec AS STRING, sInitialDir AS STRING
  LOCAL sFilter  AS STRING, sTemplateName AS STRING, sdefExt   AS STRING, dFlags AS DWORD, cbAddr AS DWORD
  LOCAL w        AS STRING, iRet AS LONG
  LOCAL  iCHECK  AS LONG
  ' for our callback procedures...
  LOCAL szForbidden AS ASCIIZ * %MAX_PATH, dwData AS DWORD

  SELECT CASE AS LONG CBMSG

       CASE %WM_INITDIALOG

       CASE %WM_COMMAND
           SELECT CASE AS LONG CBCTL
                CASE %ID_SAVE_BUTTON
                     sCaption       =  "Get filename for SAVE "
                     sFilespec      =  "new.txt"  ' initial file
                     sInitialDir    =  CURDIR$    ' initial directory
                     sFilter        =  "Text Files (*.TXT)|*.TXT|" & _
                                       "All Files (*.*)|*.*"    ' filter
                     sTemplateName  =  "NPSAVEDIALOG"
                     sDefExt        =  "*.TXT"                  ' extension
                     ' for save, let's set some flags in advance
                     dFlags         =  %OFN_LONGNAMES OR %OFN_PATHMUSTEXIST OR _
                                       %OFN_HIDEREADONLY OR %OFN_NOCHANGEDIR OR _
                                       %OFN_EXTENSIONDIFFERENT
                     cbAddr = CODEPTR (HookProcSave)


                     CALL SaveFileDialogHook (CBHNDL, sCaption, sFileSpec, sInitialDir,_
                                              sFilter, sTemplateName, sDefExt, dFlags, Cbaddr) TO iRet

                     IF iRet  THEN
                         w  = sFileSpec
                         CONTROL SET TEXT CBHNDL, %ID_CODIROVKA, IIF$ (LEN(SelCod), SelCod, "ANSI")
                     ELSE
                         w  = "no file selected"
                         CONTROL SET TEXT CBHNDL, %ID_CODIROVKA, ""
                     END IF
                     CONTROL SET TEXT  CBHNDL, %ID_SAVE_FILENAME, w

                CASE %ID_EXIT
                    DIALOG END CBHNDL, 0

            END SELECT
  END SELECT
END FUNCTION
'======================================================================
FUNCTION HookProcSave (BYVAL hWnd AS LONG, BYVAL uMsg AS LONG, BYVAL wParam AS LONG, BYVAL lParam AS LONG) AS LONG
    SELECT CASE AS LONG uMSG

         CASE %WM_INITDIALOG
              COMBOBOX ADD hWnd, %ID_COMBO, "ANSI"
              COMBOBOX ADD hWnd, %ID_COMBO, "Unicode"
              COMBOBOX ADD hWnd, %ID_COMBO, "UTF-8"
              COMBOBOX SELECT hWnd, %ID_COMBO, 1

         CASE %WM_COMMAND
              SELECT CASE LOWRD(wParam)
                CASE %ID_COMBO
                     IF HIWRD(wParam) = %CBN_SELCHANGE THEN
                         COMBOBOX GET TEXT hWnd, %ID_COMBO TO SelCod
                     END IF
              END SELECT

     END SELECT
END FUNCTION
'======================================================================
FUNCTION SaveFileDialogHook (BYVAL hWnd AS DWORD, _           ' parent window
                         BYVAL sCaption AS STRING, _      ' caption
                         sFileSpec AS STRING, _           ' filename
                         BYVAL sInitialDir AS STRING, _   ' start directory
                         BYVAL sFilter AS STRING, _       ' filename filter
                         BYVAL sTemplateName AS STRING, _
                         BYVAL sDefExtension AS STRING, _ ' default extension
                         dFlags AS DWORD, _                ' flags
                         OPTIONAL BYVAL cbAddr AS DWORD, _  ' callback procedure
                         OPTIONAL BYVAL lparam AS LONG _    ' callback parameter
                        ) AS LONG

    LOCAL ix          AS LONG
    LOCAL ofn         AS OPENFILENAME
    LOCAL szFileTitle AS ASCIIZ * %MAX_PATH
    ' added to support the hook procedure
    LOCAL iHookMask AS LONG, InitFlags AS LONG

    initflags   = dFlags
    Ofn.flags = %OFN_PATHMUSTEXIST OR %OFN_FILEMUSTEXIST OR _
                %OFN_HIDEREADONLY OR %OFN_EXPLORER OR _
                %OFN_ENABLEHOOK OR %OFN_ENABLETEMPLATE OR _
                %OFN_OVERWRITEPROMPT
    ofn.hInstance = hInst
    ofn.lpTemplateName = STRPTR(sTemplateName)

    ' Filter is a sequence of ASCIIZ strings with a final (extra) $NUL terminator
    REPLACE "|" WITH $NUL IN sFilter
    sFilter = sFilter + $NUL

    IF LEN(sFileSpec) > %MAX_PATH THEN
        sFileSpec = LEFT$(sFileSpec, %MAX_PATH)
    END IF
    ix = INSTR(sFileSpec, $NUL)
    IF ix THEN
        sFileSpec = LEFT$(sFileSpec, ix) + SPACE$(%MAX_PATH - ix)
    ELSE
        sFileSpec = sFileSpec + $NUL + SPACE$(%MAX_PATH - LEN(sFileSpec))
    END IF
'
    ofn.lStructSize      = SIZEOF(ofn)
    ofn.hWndOwner        = hWnd
    ofn.lpstrFilter      = STRPTR(sFilter)
    ofn.nFilterIndex     = 1
    ofn.lpstrFile        = STRPTR(sFileSpec)
    ofn.nMaxFile         = LEN(sFileSpec)
    ofn.lpstrFileTitle   = VARPTR(szFileTitle)
    ofn.nMaxFileTitle    = SIZEOF(szFileTitle)
    ofn.lpstrInitialDir  = STRPTR(sInitialDir)
    IF LEN(sCaption) THEN
        ofn.lpstrTitle   = STRPTR(sCaption)
    END IF
    IF LEN(sDefExtension) THEN
        ofn.lpstrDefExt  = STRPTR(sDefExtension)
    END IF

    ' set callback address
    ofn.lpfnhook   =   cbAddr
    ' set callback parameter
    ofn.lcustdata  =   lparam

    FUNCTION = GetSaveFilename(ofn)

    ix = INSTR(sFileSpec, $NUL)
    IF ix THEN
        sFileSpec = LEFT$(sFileSpec, ix - 1)
    ELSE
        sFileSpec = ""
    END IF

    ofn.flags = initflags
END FUNCTION


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

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

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

    TopList