Форум » [x]Harbour » Как вызвать "Копирование файлов" в xHarboure ? » Ответить

Как вызвать "Копирование файлов" в xHarboure ?

Andrey: При длительных операциях иногда "полезнее" для пользователя (и для программы) показывать вместо бегунка - стандартное окно: Т.е. если делаешь операции типа копирование из одной базы в другую. Без вывода на экран такая операция намного быстрей проходит. А чтоб юзер не скучал - хочу такое окно повесить. Как перевести пример Филатова \MiniGUI\SAMPLES\Advanced\AVI_Animation под хХарбор ?

Ответов - 37, стр: 1 2 All

santy: Под xHarbour работает без проблем.

Dima: Andrey пишет: Как перевести пример Филатова \MiniGUI\SAMPLES\Advanced\AVI_Animation под хХарбор ? santy пишет: Под xHarbour работает без проблем. Однако

Andrey: santy пишет: Под xHarbour работает без проблем. Покажи пожалуйста как ? Может я непонятно написал вверху, т.е. нужно перевести пример под консоль xHarbour. Типа как вызывается окно "выбора файла". Пример тут. FUNCTION MAIN() LOCAL cFile := CurDrive()+":"+DirName() cFile := GetFile( {{ "All Files (*.*)", "*.*" }} , "Browse for File", cFile ) ? cFile wait RETURN NIL *-----------------------------------------------------------------------------* Function GetFile( aFilter, title, cIniFolder, multiselect, nochangecurdir ) *-----------------------------------------------------------------------------* local c := '' , n local files , fileslist := {} Default aFilter TO {} Default multiselect TO .f. FOR n := 1 TO Len( aFilter ) c += aFilter[n][1] + Chr(0) + aFilter[n][2] + Chr(0) NEXT files := C_GetFile ( c , title, cIniFolder, multiselect, nochangecurdir ) if multiselect if Len( files ) > 0 if Valtype( files ) == "A" FOR n := 1 TO Len( files ) if At( "\\", files[n] ) > 0 .and. Left( files[n], 2 ) != "\\" files[n] := StrTran( files[n] , "\\", "\" ) endif NEXT fileslist := aClone( files ) else aAdd( fileslist, files ) endif endif else fileslist := files endif Return ( fileslist ) ///////////////////////////////////////////////////////////////// #pragma BEGINDUMP // из минигуи #include <windows.h> #include <hbapi.h> #include <shlobj.h> #include <commctrl.h> #include <setupapi.h> #ifdef __XHARBOUR__ #define HB_PARNL( n, x ) hb_parnl( n, x ) #define HB_STORC( n, x, y ) hb_storc( n, x, y ) #define HB_STORL( n, x, y ) hb_storl( n, x, y ) #define HB_STORNI( n, x, y ) hb_storni( n, x, y ) #define HB_STORNL( n, x, y ) hb_stornl( n, x, y ) #else #define HB_PARNL( n, x ) hb_parvnl( n, x ) #define HB_STORC( n, x, y ) hb_storvc( n, x, y ) #define HB_STORL( n, x, y ) hb_storvl( n, x, y ) #define HB_STORNI( n, x, y ) hb_storvni( n, x, y ) #define HB_STORNL( n, x, y ) hb_storvnl( n, x, y ) #endif HB_FUNC( C_GETFILE ) { OPENFILENAME ofn; char buffer[ 32768 ]; char cFullName[ 64 ][ 1024 ]; char cCurDir[ 512 ]; char cFileName[ 512 ]; int iPosition = 0; int iNumSelected = 0; int n; int flags = OFN_FILEMUSTEXIST; buffer[ 0 ] = 0; if( hb_parl(4) ) flags = flags | OFN_ALLOWMULTISELECT | OFN_EXPLORER; if( hb_parl(5) ) flags = flags | OFN_NOCHANGEDIR; memset( ( void * ) &ofn, 0, sizeof( OPENFILENAME ) ); ofn.lStructSize = sizeof( ofn ); ofn.hwndOwner = GetActiveWindow(); ofn.lpstrFilter = hb_parc( 1 ); ofn.nFilterIndex = 1; ofn.lpstrFile = buffer; ofn.nMaxFile = sizeof( buffer ); ofn.lpstrInitialDir = hb_parc( 3 ); ofn.lpstrTitle = hb_parc( 2 ); ofn.nMaxFileTitle = 512; ofn.Flags = flags; if( GetOpenFileName(&ofn) ) { if( ofn.nFileExtension != 0 ) hb_retc( ofn.lpstrFile ); else { wsprintf( cCurDir, "%s", &buffer[ iPosition ] ); iPosition = iPosition + strlen( cCurDir ) + 1; do { iNumSelected++; wsprintf( cFileName, "%s", &buffer[ iPosition ] ); iPosition = iPosition + strlen( cFileName ) + 1; wsprintf( cFullName[ iNumSelected ], "%s\\%s", cCurDir, cFileName ); } while( ( strlen(cFileName) != 0 ) && ( iNumSelected <= 63 ) ); if( iNumSelected > 1 ) { hb_reta( iNumSelected - 1 ); for( n = 1; n < iNumSelected; n++ ) HB_STORC( cFullName[ n ], -1, n ); } else hb_retc( &buffer[ 0 ] ); } } else hb_retc( "" ); } // JK JP #pragma ENDDUMP


PSP: Андрюха, напиши свою функцию рисования прогрессбара. Там делов на 10 минут с тремя перекурами.

Andrey: PSP пишет: напиши свою функцию рисования прогрессбара. Там делов на 10 минут с тремя перекурами. Как ? Никак не могу сообразить .... Я копирую 6 баз (по 350 тыс.записей) из одной структуры в другую.... Прогресс бар пусть будет рисоваться по количеству баз. А так "листочки" из папки в папку летают - красиво и как у всех... Красота для пользователя.... И меня не достают - почему медленно.. И программа (терминалка) как настоящая WINDOWS ...

PSP: Andrey пишет: А так "листочки" из папки в папку летают - красиво и как у всех... Красота для пользователя... Листочки, конечно, красиво, но не информативно. Гораздо информативней вывести затраченное/оставшееся время (кол-во записей) и считать не по количеству баз, а по суммарному количеству записей.

Andrey: PSP пишет: и считать не по количеству баз, а по суммарному количеству записей. Это долго будет... И в добавок по скорости удобней пользоваться APPEND FROM (cInputBase), без вывода прогрессбара... Вот для этого и "листочки" нужны.... На глаз видно, когда из большой базы копируешь записи в другую.

PSP: Andrey пишет: И в добавок по скорости удобней пользоваться APPEND FROM (cInputBase), без вывода прогрессбара... Вот для этого и "листочки" нужны.... Что-то я плохо себе представляю, как ты собрался WinAPI-шный диалог прогресса копирования прикрутить к команде APPEND FROM...

Andrey: PSP пишет: Что-то я плохо себе представляю, как ты собрался WinAPI-шный диалог прогресса копирования прикрутить к команде APPEND FROM... // запуск "листочков" WinAPICopyFILEopen( ' идет копирование баз ') For nI :=1 to LEN(aBase) WinAPICopyFILE( ' идет копирование базы '+STR(nI)) // туда просто сообщение передавать для информации // тут открытие баз .... APPEND FROM (cBaseInput) // - стандартная функция NEXT // убрать "листочки" WinAPICopyFILEclose()

PSP: Andrey пишет: WinAPICopyFILEopen WinAPICopyFILE WinAPICopyFILEclose Это реальные функции или ты просто так написал? Функция WinAPI, которая выводит этот диалог при копировании, называется SHFileOperation. В Висте заменена на IFileOperation.

PSP: Если хочешь, посмотри вот такой простой пример: [pre2]PROCEDURE Main( ... ) LOCAL n RDDSETDEFAULT( "DBFCDX" ) CLS USE Base n := BASE->( LastRec() ) COPY STRUCTURE TO Tmp USE Tmp APPEND FROM Base WHILE Show( n ) WAIT RETURN NIL FUNCTION Show( n ) LOCAL nRecNo := TMP->( RecNo() ) + 1 // единица добавляется потому, //что функция вызывается ДО копирования записи IF nRecNo % 1000 == 0 .or. nRecNo == n // каждую 1000-ую запись и последнюю ?? Str( nRecNo ) + Chr( 13 ) END // IF RETURN .T. [/pre2] В функции Show() можно считать оставшееся время. Пользователь будет знать, сколько еще ждать.

Andrey: PSP пишет: Это реальные функции или ты просто так написал? Это я просто для примера... А как они называются в WinApi я не знаю, и как их вызвать я тоже не представляю.

Andrey: PSP пишет: посмотри вот такой простой пример: Пример хороший. Как к нему "листочки" приделать ?

PSP: Andrey пишет: Как к нему "листочки" приделать ? Никак, Андрюха, никак... Я предложил тебе вариант "без листочков". Для "с листочками" см.функцию WinAPI SHFileOperation. Но тогда будет без APPEND FROM.

SergejKis: Андрей, посмотри такой вариант: http://zalil.ru/32497414

Andrey: Прикольный вариант. Только ужасно не нравиться вызов внешних файлов. Я стараюсь обходиться без дополнительных EXE-ников. Тем более нашел вот это: внимание, файл htmlayout dll скачать не предназначен для коммерческого пользования. используя его вы можете нарушать авторские права владельца ...... Так что такой вариант отпадает !

Петр: PSP пишет: Никак, Андрюха, никак... Я предложил тебе вариант "без листочков". Листочки давай !

SergejKis: Для Andrey 1.По поводу лицензии HTMLayout: You may utilize HTMLayout Component Software Product free of charge in any manner you see fit (subject to the limitations outlined in this license) to build commercial or non-commercial applications and components. Your application shall include link to Terra Informatica site in "About" dialog or similar place in your application. Text of the link: This Application (or Component) uses HTMLayout Component, copyright Terra Informatica Software, Inc. (http://terrainformatica.com). 2.Вместо er32.exe есть c++ текст для посылки сообщений. Могу выложить. 3.Применение одельного exe для таких длителиных операций (как в данном случае) вполне применимо. 4.Можно поискать другие анимационные gif (с листочками).

Andrey: Петр пишет: Листочки давай ! Да там же в папке \MiniGUI\SAMPLES\Advanced\AVI_Animation\161.avi

Andrey: SergejKis пишет: Вместо er32.exe есть c++ текст для посылки сообщений. Могу выложить. Да я не Си-ник, перевести на Харбор не смогу.

Dima: Andrey пишет: Да я не Си-ник, перевести на Харбор не смогу А раздел C++ у нас для чего (надеюсь не только для обсуждения стандартов) ?

Петр: Andrey пишет: Да там же в папке \MiniGUI\SAMPLES\Advanced\AVI_Animation\161.avi Я не это имел ввиду Пример от Григория и SHFileOperation немного разные. Не вдаваясь в подробности, SHFileOperation для визуализации использует шаблон диалога. Найти его можно в той же dll, гле и находится вышеупомянутая функция shellapi.dll (там же и "листочки" ). Вытащить этот шаблон можно с помощью какого-то редактора ресурсов, тюнера или хакера, которых в достаточном количестве можно найти на просторах и-нета. [pre2]1020 DIALOGEX 20, 20, 240, 105, 0 LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL STYLE DS_SETFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_FIXEDSYS | WS_POPUPWINDOW | WS_DLGFRAME FONT 8, "MS Shell Dlg" { CONTROL "", 106, "SysAnimate32", 0x5000000E, 10, 0, 240, 25, WS_EX_TRANSPARENT CONTROL "", 103, "STATIC", NOT WS_GROUP | SS_BLACKRECT | SS_GRAYFRAME | SS_NOPREFIX, 55, 46, 175, 10, WS_EX_TOPMOST | WS_EX_TRANSPARENT CONTROL "", 102, "STATIC", NOT WS_GROUP | SS_BLACKRECT | SS_GRAYFRAME | SS_NOPREFIX, 55, 35, 175, 10, WS_EX_TOPMOST | WS_EX_TRANSPARENT CONTROL "", 104, "msctls_progress32", 0, 10, 65, 220, 10, WS_EX_TOPMOST | WS_EX_TRANSPARENT LTEXT "", 105, 78, 85, 100, 10, NOT WS_GROUP | SS_NOPREFIX DEFPUSHBUTTON "Отмена", 500, 180, 83, 50, 14, NOT WS_TABSTOP LTEXT "Название:", 12289, 11, 35, 38, 8, 0, WS_EX_TOPMOST | WS_EX_TRANSPARENT LTEXT "Куда:", 12289, 11, 46, 30, 8, 0, WS_EX_TOPMOST | WS_EX_TRANSPARENT LTEXT "Расчет времени:", 12289, 11, 85, 62, 8, 0, WS_EX_TOPMOST | WS_EX_TRANSPARENT } [/pre2] Вот если бы вы использовали Harbour, то для выполнения этого диалога смогли бы использовать функцию wapi_DialogBoxParam (из библиотеки hbwin). В папке harbour\contrib\hbwin\tests\ можно найти пример вызова диалога dlg.prg Вот как этот пример выглядит в работе

Петр: А вот так выглядит диалог с "листочками"

Петр: Модифицированный код примера [pre2]#include "common.ch" #include "hbwin.ch" #include "dlg1.ch" PROCEDURE Main() wapi_DialogBoxParam( 0, IDD_DIALOG1, 0, @DialogFunc() ) RETURN FUNCTION DialogFunc( hWnd, message, wParam, lParam, wPHigh, wPLow ) HB_SYMBOL_UNUSED( wParam ) HB_SYMBOL_UNUSED( lParam ) HB_SYMBOL_UNUSED( wPHigh ) SWITCH message CASE WM_INITDIALOG wapi_SetDlgItemText( hWnd, IDC_STATIC1, "?" ) wapi_SetDlgItemText( hWnd, IDC_STATIC2, "!" ) wapi_SetDlgItemText( hWnd, IDC_STATIC3, Time() ) wapi_SetDlgItemAvi( wapi_GetDlgItem( hWnd, IDC_ANIMATE1 ), 0, IDR_AVI1 ) wapi_SetDlgItemPBRange( wapi_GetDlgItem( hWnd, IDC_PBAR1 ), 0, 100 ) wapi_SetDlgItemPBPos( wapi_GetDlgItem( hWnd, IDC_PBAR1 ), 50 ) RETURN .T. CASE WM_CLOSE IF wapi_MessageBox( 0, "?!", "!!", WIN_MB_OKCANCEL + WIN_MB_ICONQUESTION ) == 1 wapi_SetDlgItemAvi( wapi_GetDlgItem( hWnd, IDC_ANIMATE1 ), 0, 0 ) wapi_EndDialog( hWnd, 3 ) RETURN .T. ENDIF EXIT CASE WM_COMMAND SWITCH wPLow CASE IDC_BUTTON1 SELF_CLOSE( hWnd ) RETURN .T. ENDSWITCH ENDSWITCH RETURN .F. #pragma BEGINDUMP #include "hbwin.h" #include "hbwapi.h" #include "hbapiitm.h" #include <commctrl.h> #if defined( __BORLANDC__ ) && !defined( HB_ARCH_64BIT ) #undef MAKELONG #define MAKELONG(a,b) ((LONG)(((WORD)((DWORD_PTR)(a) & 0xffff)) | \ (((DWORD)((WORD)((DWORD_PTR)(b) & 0xffff))) << 16))) #endif HB_FUNC( WAPI_SETDLGITEMAVI ) { int iResult = SendMessage( hbwapi_par_raw_HWND( 1 ), ACM_OPEN, ( WPARAM ) hbwapi_par_raw_HINSTANCE( 2 ), ( LPARAM ) hbwapi_par_INT( 3 ) ); hbwapi_SetLastError( GetLastError() ); hbwapi_ret_NI( iResult ); } HB_FUNC( WAPI_SETDLGITEMPBRANGE ) { SendMessage( hbwapi_par_raw_HWND( 1 ), PBM_SETRANGE, 0, MAKELONG( hbwapi_par_INT( 2 ), hbwapi_par_INT( 3 ) ) ); } HB_FUNC( WAPI_SETDLGITEMPBPOS ) { SendMessage( hbwapi_par_raw_HWND( 1 ), PBM_SETPOS, ( WPARAM ) hbwapi_par_INT( 2 ), 0 ); } HB_FUNC_STATIC( SELF_CLOSE ) { SendMessage( hbwapi_par_raw_HWND( 1 ), WM_CLOSE, 0, 0 ); } #pragma ENDDUMP[/pre2]

Петр: Файл ресурсов dlg.rc [pre2] #include <windows.h> #include <commctrl.h> LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US 1 MANIFEST "dlg.xml" 1020 DIALOGEX 20, 20, 240, 105, 0 LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL STYLE DS_SETFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_FIXEDSYS | WS_POPUPWINDOW | WS_DLGFRAME FONT 8, "MS Shell Dlg" { CONTROL "", 106, "SysAnimate32", 0x5000000E, 10, 0, 240, 25, WS_EX_TRANSPARENT CONTROL "", 103, "STATIC", NOT WS_GROUP | SS_BLACKRECT | SS_GRAYFRAME | SS_NOPREFIX, 55, 46, 175, 10, WS_EX_TOPMOST | WS_EX_TRANSPARENT CONTROL "", 102, "STATIC", NOT WS_GROUP | SS_BLACKRECT | SS_GRAYFRAME | SS_NOPREFIX, 55, 35, 175, 10, WS_EX_TOPMOST | WS_EX_TRANSPARENT CONTROL "", 104, "msctls_progress32", 0, 10, 65, 220, 10, WS_EX_TOPMOST | WS_EX_TRANSPARENT LTEXT "", 105, 78, 85, 100, 10, NOT WS_GROUP | SS_NOPREFIX DEFPUSHBUTTON "Отмена", 500, 180, 83, 50, 14, NOT WS_TABSTOP LTEXT "Название:", 12289, 11, 35, 38, 8, 0, WS_EX_TOPMOST | WS_EX_TRANSPARENT LTEXT "Куда:", 12289, 11, 46, 30, 8, 0, WS_EX_TOPMOST | WS_EX_TRANSPARENT LTEXT "Расчет времени:", 12289, 11, 85, 62, 8, 0, WS_EX_TOPMOST | WS_EX_TRANSPARENT } 2020 AVI "161.avi" [/pre2] Файл манифеста dlg.xml (чтобы приложение поддерживало темы Windows) [pre2]<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="MyOrganization.MyDivision.MyApp" version="1.0.0.0" processorArchitecture="X86" /> <description>Verbal description of MyApp.</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly> [/pre2] Ну и dlg1.ch [pre2]#define IDD_DIALOG1 1020 #define IDC_STATIC1 102 #define IDC_STATIC2 103 #define IDC_PBAR1 104 #define IDC_STATIC3 105 #define IDC_ANIMATE1 106 #define IDC_BUTTON1 500 #define IDR_AVI1 2020 #define WM_INITDIALOG 0x0110 #define WM_COMMAND 0x0111 #define WM_SYSCOMMAND 0x0112 #define WM_CLOSE 0x0010 [/pre2]

Andrey: Петр пишет: Вот если бы вы использовали Harbour А на хХарбор нельзя перетащить ? Очень просим, все работающие на хХарборе тоже захотят ..... Пытался собрать сам, да не получается. хХарбор не понимает команды ENDSWITCH xHarbour Compiler build 1.0.0 (SimpLex) Copyright 1999-2007, http://www.xharbour.org http://www.harbour-project.org/ Compiling 'CopyFileWinApi.PRG'... CopyFileWinApi.PRG(44) Error E0020 Incomplete statement or unbalanced delimiters CopyFileWinApi.PRG(45) Error E0020 Incomplete statement or unbalanced delimiters CopyFileWinApi.PRG(89) Error E0030 Syntax error: "syntax error at 'я'" 3 errors Проект для хХарбора здесь http://zalil.ru/32502422 Может что-то неправильно сделал ?.....

PSP: Andrey пишет: хХарбор не понимает команды ENDSWITCH А END понимает?

Петр: PSP пишет: А END понимает? END он понимает, а вот Андрей не понимает, что он хочет.

Andrey: PSP пишет: А END понимает? А я знаю что-ли ??? Я не пользуюсь такой конструкцией, без надобности.... Петр пишет: END он понимает, а вот Андрей не понимает, что он хочет. Ну понимаю что прошу невыполнимое, но надеюсь, а вдруг можно сделать....

Dima: Andrey пишет: А я знаю что-ли ??? Я не пользуюсь такой конструкцией, без надобности.... :\svn\xharbour\doc\en\switch.txt

Andrey: Опять возвращаюсь к проекту, что Петр выложил. Я на Харборе программ еще не делал, так что опять наткнулся на грабли, как обойти - не знаю. Собрал файл проекта CopyFile.hbp для HBMK2 При компиляции выдает ошибку: Z:\hb30\SHFileOperation>Z:\hb30\bin\hbmk2.exe CopyFile hbmk2: Compiling Harbour sources... Harbour 3.0.0 (Rev. 16951) Copyright (c) 1999-2011, http://harbour-project.org/ Compiling 'CopyFileWinApi.prg'... Lines 965, Functions/Procedures 2 Generating C source output to 'OBJ\CopyFileWinApi.c'... Done. hbmk2: Compiling resources... Borland Resource Compiler Version 5.40 Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved. hbmk2: Compiling... OBJ\CopyFileWinApi.c: Error E2293 CopyFileWinApi.prg 60: ) expected Error E2206 CopyFileWinApi.prg 76: Illegal character '\' (0x5c) *** 2 errors in Compile *** hbmk2: Error: Running C/C++ compiler. 1 bcc32.exe -c -q -d -6 -O2 -OS -Ov -Oi -Oc -tWM -w -Q -w-sig- -nOBJ -IZ:\BCC55\Include -IZ:\hb30\include OBJ\CopyFileWinApi.c Сами исходники здесь: http://zalil.ru/32543676

PSP: Andrey пишет: Error E2293 CopyFileWinApi.prg 60: ) expected Error E2206 CopyFileWinApi.prg 76: Illegal character '\' (0x5c) Ну, а что в файле CopyFileWinApi.prg в строках 60 и 76? ЗЫ. Ну да, ну да... Вроде все красиво. BCC что-ли неправильно препроцессерствует...

Andrey: PSP пишет: ЗЫ. Ну да, ну да... Вроде все красиво. BCC что-ли неправильно препроцессерствует... Вот и я не пойму, что там ему не понравилось ?

PSP: Andrey пишет: Вот и я не пойму, что там ему не понравилось ? Кажись, я понял. После копирования текста из форума, во всех строках в конце добавлен пробел. Получается, что в #define в 60-й строке символ \ остается после обработки препроцессором, а его в результирующей строке быть не должно. Он означает "продолжение на следующей строке", должен быть последним в строке. Убери замыкающий пробел в 60-й строке.

Andrey: PSP пишет: Убери замыкающий пробел в 60-й строке. Не помогло .... Убрал \ и подтянул всю строку, тогда заработало... Но не собралась программа .... Error: Unresolved external '_HB_FUN_WAPI_DIALOGBOXPARAM' referenced from Z:\HB30\SHFILEOPERATION\OBJ\COPYFILEWINAPI.OBJ Error: Unresolved external '_HB_FUN_WAPI_SETDLGITEMTEXT' referenced from Z:\HB30\SHFILEOPERATION\OBJ\COPYFILEWINAPI.OBJ Error: Unresolved external '_HB_FUN_WAPI_GETDLGITEM' referenced from Z:\HB30\SHFILEOPERATION\OBJ\COPYFILEWINAPI.OBJ Error: Unresolved external '_HB_FUN_WAPI_MESSAGEBOX' referenced from Z:\HB30\SHFILEOPERATION\OBJ\COPYFILEWINAPI.OBJ Error: Unresolved external '_HB_FUN_WAPI_ENDDIALOG' referenced from Z:\HB30\SHFILEOPERATION\OBJ\COPYFILEWINAPI.OBJ Error: Unresolved external '_hbwapi_SetLastError' referenced from Z:\HB30\SHFILEOPERATION\OBJ\COPYFILEWINAPI.OBJ hbmk2: Error: Running linker. 2 Видать какую-то библиотеку нужно добавлять....

Andrey: Нашел методом тыка, где сидит WAPI_DIALOGBOXPARAM - в hbwin.lib Добавил в проект -lhbwin.lib Ура, заработало Кому интересно вот готовый проект - http://zalil.ru/32545255 PSP спасибо за подсказку !!! Петр, БОЛЬШОЕ СПАСИБО !!!

Andrey: А как бегунок заставить "бежать" в этом примере ? И надписи меняться - выдавать имя копируемой базы ? Уж больно синтаксис навороченный в этом примере ! Да и правильно хочется понять, как такие конструкции использовать. Заранее спасибо за разъяснения.



полная версия страницы