Автор | Сообщение |
gfilatov
|
| модератор
|
Пост N: 699
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть V) (продолжение)
Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
SergKis
|
| постоянный участник
|
Пост N: 1147
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.08.16 15:53. Заголовок: Подправил \BASIC..
Подправил \BASIC\GetClientSize\demo.prg на использование This... Скрытый текст
/* * MINIGUI - Harbour Win32 GUI library Demo */ #include "minigui.ch" FUNCTION MAIN LOCAL nCol DEFINE WINDOW FORM_1 ; AT 0,0 WIDTH 350 HEIGHT 235 ; MINWIDTH 350 MINHEIGHT 235 ; TITLE "Get Form Client Height" ; MAIN ; ON INIT Form_Resize() ; ON SIZE Form_Resize() ; ON MAXIMIZE Form_Resize() DEFINE MAIN MENU POPUP "&File" NAME mnuFile MENUITEM "&Exit" NAME mnuFileExit ; ACTION ThisWindow.Release END POPUP END MENU DEFINE STATUSBAR STATUSITEM "Ready" RAISED DATE CLOCK END STATUSBAR @ 05,10 LABEL lblWindow VALUE "WindowHeight = " AUTOSIZE @ 25,10 LABEL lblBorder VALUE "BorderHeight = " AUTOSIZE @ 45,10 LABEL lblTitlebar VALUE "TitleHeight = " AUTOSIZE @ 65,10 LABEL lblMenubar VALUE "MenubarHeight = " AUTOSIZE @ 85,10 LABEL lblStatusbar VALUE "StatusbarHeight = " AUTOSIZE @105,10 LABEL lblClient VALUE "ClientHeight = " AUTOSIZE @125,10 LABEL lblClientW VALUE "ClientWidth = " AUTOSIZE @145,10 LABEL lblWorkArea VALUE "WorkAreaHeight = " AUTOSIZE nCol := This.lblStatusbar.Width + 10 @ 05,nCol LABEL lblWindowHeight VALUE "" WIDTH 70 HEIGHT 16 RIGHTALIGN @ 25,nCol LABEL lblBorderHeight VALUE hb_ntos(GetBorderHeight()) WIDTH 70 RIGHTALIGN @ 45,nCol LABEL lblTitleHeight VALUE hb_ntos(GetTitleHeight()) WIDTH 70 RIGHTALIGN @ 65,nCol LABEL lblMenubarHeight VALUE hb_ntos(GetMenubarHeight()) WIDTH 70 RIGHTALIGN @ 85,nCol LABEL lblStatusbarHeight VALUE hb_ntos(This.StatusBar.Height) WIDTH 70 RIGHTALIGN @105,nCol LABEL lblClientHeight VALUE "" WIDTH 70 RIGHTALIGN @125,nCol LABEL lblClientWidth VALUE "" WIDTH 70 RIGHTALIGN @145,nCol LABEL lblWorkAreaHeight VALUE "" WIDTH 70 HEIGHT 16 RIGHTALIGN @ 0,nCol+100 EDITBOX edx WIDTH 100 HEIGHT 100 //NOHSCROLL END WINDOW CENTER WINDOW FORM_1 ACTIVATE WINDOW FORM_1 RETURN NIL STATIC PROCEDURE Form_Resize() LOCAL nWindowHeight, nClientHeight nWindowHeight := This.Height nClientHeight := nWindowHeight - 2 * GetBorderHeight() nClientHeight -= GetTitleHeight() + GetMenubarHeight() nClientHeight -= This.StatusBar.Height This.lblWindowHeight.Value := hb_ntos(nWindowHeight) This.edx.Height := nClientHeight This.edx.Width := This.Width - This.edx.Col - 2 * GetBorderWidth() This.lblClientHeight.Value := hb_ntos(This.edx.ClientHeight) This.lblClientWidth.Value := hb_ntos(This.edx.ClientWidth) This.lblWorkAreaHeight.Value := hb_ntos(This.ClientHeight - This.StatusBar.Height) RETURN
|
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1148
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.08.16 16:05. Заголовок: gfilatov2002 Change..
gfilatov2002 ChangeLog.txt цитата: | * Enhanced: Added a shorten form 'App' for the 'Application' object. Examples: App.ExeName, App.Handle, App.FormName etc. |
| Похоже потерялось в сборке
| |
|
gfilatov2002
|
| moderator
|
Пост N: 981
Зарегистрирован: 11.02.10
|
|
Отправлено: 08.08.16 16:21. Заголовок: SergKis пишет: поте..
SergKis пишет: Не потерялось, посмотри //////////////////////////////////////////// // Application pseudo-commands //////////////////////////////////////////// #translate <p:Application,App>.ExeName => GetExeFileName() #translate <p:Application,App>.Handle => _HMG_MainHandle ...
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1149
Зарегистрирован: 17.02.12
|
|
Отправлено: 08.08.16 16:30. Заголовок: gfilatov2002 пишет Н..
gfilatov2002 пишет Виноват исправлюсь. Наверно пытался в старом сделать ? _HMG_aFormNames [ _HMG_MainIndex ] ? Application.FormName ? App.FormName
| |
|
gfilatov2002
|
| moderator
|
Пост N: 982
Зарегистрирован: 11.02.10
|
|
Отправлено: 08.08.16 16:40. Заголовок: SergKis пишет: Подп..
SergKis пишет: цитата: | Подправил \BASIC\GetClientSize\demo.prg |
| Благодарю за упрощение кода этого примера - так лучше
| |
|
gfilatov2002
|
| moderator
|
Пост N: 983
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.08.16 11:20. Заголовок: Петр пишет: в принц..
Петр пишет: цитата: | в принципе использовать можно уже сейчас |
| Благодарю за помощь Как первый шаг - весьма неплохо, но за кадром осталось использование CommandLink, RadioButton и ProgressBar в этом диалоге. Если автор не потерял интерес к этому примеру, то ждем продолжения ... Иначе придется допиливать самостоятельно, по мере сил
| |
|
Петр
|
| постоянный участник
|
Пост N: 1240
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.08.16 12:44. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | за кадром осталось использование CommandLink, RadioButton и ProgressBar в этом диалоге |
| Вроде бы не заказывали такого Callback, ипользование ресурсов, поддержка Unicode и возврат стандартного для TaskDialogIndirect результата.. Вот такой нужен пример (картинка)? В принципе планировал написать несколько другой пример, но можно и такой.
| |
|
Петр
|
| постоянный участник
|
Пост N: 1241
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.08.16 12:51. Заголовок: Добавлена функция-об..
Добавлена функция-обертка к TaskDialog, простой пример использования, пофиксены найденные ошибки. обновленные исходники
| |
|
gfilatov2002
|
| moderator
|
Пост N: 984
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.08.16 13:15. Заголовок: Петр пишет: Вот так..
Петр пишет: Да Возможно, потребуется не один, а несколько примеров для демонстрации различных возможностей этой многогранной функции (от простого - к сложному) Петр пишет: цитата: | Добавлена функция-обертка к TaskDialog, пример использования |
| Премного благодарен, буду вечером разбираться ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 985
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.08.16 10:04. Заголовок: Петр, Добавил подде..
Петр, Добавил поддержку вывода стандартных иконок в диалоге (см.ниже) Скрытый текст
/* tdi_test2.prg */ #include "minigui.ch" #include "tdi.ch" PROCEDURE main() LOCAL aConfig := Array( TDC_CONFIG ) LOCAL nButton, nRadioButton LOCAL lVerificationFlagChecked := .F. LOCAL nResult LOCAL aButton := { { IDOK, "Ok!" } } aConfig[ TDC_COMMON_BUTTON_FLAGS ] := hb_bitOr( TDCBF_OK_BUTTON, TDCBF_CANCEL_BUTTON ) //aConfig[ TDC_BUTTON ] := Len( aButton ) //aConfig[ TDC_TASKDIALOG_BUTTON ] := aButton aConfig[ TDC_HWND ] := 0 aConfig[ TDC_HINSTANCE ] := GetInstance() aConfig[ TDC_MAINICON ] := TD_INFORMATION_ICON aConfig[ TDC_WINDOWTITLE ] := "Task Dialog Title" aConfig[ TDC_MAININSTRUCTION ] := "The main instruction text for the TaskDialog goes here." aConfig[ TDC_CONTENT ] := "The content text for the task dialog is shown here and the text will automatically wrap as needed." // aConfig[ TDC_VERIFICATIONTEXT ] := NILL aConfig[ TDC_VERIFICATIONTEXT ] := "Don't show me this message again" aConfig[ TDC_EXPANDEDINFORMATION ] := "Any expanded content text for the task dialog is shown here and the text will automatically wrap as needed." aConfig[ TDC_EXPANDEDCONTROLTEXT ] := "Expanded Control Text" aConfig[ TDC_COLLAPSEDCONTROLTEXT ] := "Collapsed Control Text" aConfig[ TDC_FOOTERICON ] := TD_INFORMATION_ICON aConfig[ TDC_FOOTER ] := "Optional footer text with an icon can be included" aConfig[ TDC_CALLBACK ] := { |h,n,w,l| callback( h,n,w,l ) } nResult := win_TaskDialogIndirect( aConfig, @nButton, @nRadioButton, @lVerificationFlagChecked ) IF nResult == 0 // no error occurs SWITCH nButton CASE IDOK ? "Button OK pressed" EXIT OTHERWISE ? "Button ID is", hb_ntos( nButton ) EXIT END SWITCH ? "Verification Flag is", If( lVerificationFlagChecked, "Checked", "UnChecked" ) ELSE ? "TaskDialogIndirect0() returns", nResult END IF RETURN STATIC FUNCTION callback( hWnd, nNotification, wParam, lParam ) LOCAL lResult := .F. /* To prevent the task dialog from closing, the application must return FALSE, otherwise the task dialog is closed */ SWITCH nNotification CASE TDN_CREATED ? "Notification: TDN_CREATED" EXIT CASE TDN_DESTROYED ? "Notification: TDN_DESTROYED" EXIT CASE TDN_BUTTON_CLICKED // wParam - an int that specifies the ID of the button or comand link that was selected ? "Notification: TDN_BUTTON_CLICKED. ID of the button:", wParam IF wParam == IDOK lResult := .T. ELSEIF wParam == IDCANCEL lResult := .T. ENDIF EXIT CASE TDN_RADIO_BUTTON_CLICKED // wParam - an int that specifies the ID corresponding to the radio button that was clicked ? "Notification: TDN_RADIO_BUTTON_CLICKED. ID of the button:", wParam EXIT CASE TDN_EXPANDO_BUTTON_CLICKED // the user clicks on the dialog's expando button: wParam is 1 if the dialog is expanded, or 0 if not ? "Notification: TDN_EXPANDO_BUTTON_CLICKED. Dialog is", If( wParam == 1, "expanded", "colapsed" ) EXIT CASE TDN_HELP // the user presses F1 on the keyboard while the dialog has focus ? "Notification: TDN_HELP" EXIT CASE TDN_VERIFICATION_CLICKED // the user clicks the task dialog verification check box: wParam is the status of the checkbox. // It is 1 if the verification checkbox is checked, or 0 if it is unchecked. ? "Notification: TDN_VERIFICATION_CLICKED. Verification checkbox is", If( wParam == 1, "checked", "unchecked" ) EXIT CASE TDN_HYPERLINK_CLICKED ? "Notification: TDN_HYPERLINK_CLICKED" ShellExecute( hWnd, "open", lParam, , , SW_SHOW ) END SWITCH RETURN lResult #pragma BEGINDUMP #define _WIN32_WINNT 0x0600 //VISTA #define UNICODE #if( defined( __MINGW32__ )) #define MAKEINTRESOURCEA(i) ((LPSTR)((ULONG_PTR)((WORD)(i)))) #define MAKEINTRESOURCEW(i) ((LPWSTR)((ULONG_PTR)((WORD)(i)))) #ifdef UNICODE #define MAKEINTRESOURCE MAKEINTRESOURCEW #else #define MAKEINTRESOURCE MAKEINTRESOURCEA #endif #endif #include <hbwinuni.h> #include <windows.h> #include <commctrl.h> #include "hbapi.h" #include "hbapierr.h" #include "hbapiitm.h" #include "hbvm.h" #define TDC_CONFIG 24 #define TDC_HWND 2 #define TDC_HINSTANCE 3 #define TDC_TASKDIALOG_FLAGS 4 #define TDC_COMMON_BUTTON_FLAGS 5 #define TDC_WINDOWTITLE 6 #define TDC_MAINICON 7 #define TDC_MAININSTRUCTION 8 #define TDC_CONTENT 9 #define TDC_BUTTON 10 #define TDC_TASKDIALOG_BUTTON 11 #define TDC_DEFAULTBUTTON 12 #define TDC_RADIOBUTTON 13 #define TDC_TASKDIALOG_RADIOBUTTON 14 #define TDC_DEFAULTRADIOBUTTON 15 #define TDC_VERIFICATIONTEXT 16 #define TDC_EXPANDEDINFORMATION 17 #define TDC_EXPANDEDCONTROLTEXT 18 #define TDC_COLLAPSEDCONTROLTEXT 19 #define TDC_FOOTERICON 20 #define TDC_FOOTER 21 #define TDC_CALLBACK 22 #define TDC_WIDTH 24 static HB_BOOL checkButton( const PHB_ITEM arrayOfButtons, HB_SIZE arraysize ); HRESULT CALLBACK TDCallbackProc( HWND hWnd, UINT uNotification, WPARAM wParam, LPARAM lParam, LONG_PTR dwRefData ); HB_FUNC( WIN_TASKDIALOGINDIRECT ) { PHB_ITEM pConfig = hb_param( 1, HB_IT_ARRAY ); if ( pConfig && hb_arrayLen( pConfig ) >= TDC_CONFIG ) { TASKDIALOGCONFIG config = {0}; int nButton; int nRadioButton; BOOL fVerificationFlagChecked; HRESULT hResult; HB_TYPE typ; void ** hText = ( void ** ) hb_xgrab( sizeof( void * ) * 10 ); int iText = 0; TASKDIALOG_BUTTON * buttons = NULL; void ** hButton; int iButton = 0; TASKDIALOG_BUTTON * radiobuttons = NULL; void ** hRadioButton; int iRadioButton = 0; PHB_ITEM pCallbackData; // 1 UINT cbSize config.cbSize = sizeof( config ); // 2 HWND hwndParent if ( hb_arrayGetType( pConfig, TDC_HWND ) & HB_IT_NUMERIC ) { config.hwndParent = ( HWND ) hb_arrayGetNL( pConfig, TDC_HWND ); } else { config.hwndParent = NULL; } // 3 HINSTANCE hInstance config.hInstance = ( HINSTANCE ) hb_arrayGetNL( pConfig, TDC_HINSTANCE ); // 4 TASKDIALOG_FLAGS dwFlags if ( hb_arrayGetType( pConfig, TDC_TASKDIALOG_FLAGS ) & HB_IT_NUMERIC ) { config.dwCommonButtons = hb_arrayGetNInt( pConfig, TDC_TASKDIALOG_FLAGS ); } // 5 TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons if ( hb_arrayGetType( pConfig, TDC_COMMON_BUTTON_FLAGS ) & HB_IT_NUMERIC ) { config.dwCommonButtons = hb_arrayGetNInt( pConfig, TDC_COMMON_BUTTON_FLAGS ); } // 6 PCWSTR pszWindowTitle typ = hb_arrayGetType( pConfig, TDC_WINDOWTITLE ); if ( typ & HB_IT_STRING ) { config.pszWindowTitle = HB_PARASTRDEF( 1, TDC_WINDOWTITLE, &hText[iText++], NULL ); } else if ( typ & HB_IT_NUMERIC ) { config.pszWindowTitle = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_WINDOWTITLE ) ); } else { config.pszWindowTitle = NULL; } // 7 union { HICON hMainIcon; PCWSTR pszMainIcon; }; if ( hb_arrayGetType( pConfig, TDC_MAINICON ) & HB_IT_NUMERIC ) { config.pszMainIcon = ( PCWSTR ) hb_arrayGetNL( pConfig, TDC_MAINICON ); } else { config.pszMainIcon = NULL; } // 8 PCWSTR pszMainInstruction typ = hb_arrayGetType( pConfig, TDC_MAININSTRUCTION ); if ( typ & HB_IT_STRING ) { config.pszMainInstruction = HB_PARASTRDEF( 1, TDC_MAININSTRUCTION, &hText[iText++], NULL ); } else if (typ & HB_IT_NUMERIC ) { config.pszMainInstruction = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_MAININSTRUCTION ) ); } // 9 PCWSTR pszContent; typ = hb_arrayGetType( pConfig, TDC_CONTENT ); if ( typ & HB_IT_STRING ) { config.pszContent = HB_PARASTRDEF( 1, TDC_CONTENT, &hText[iText++], NULL ); } else if (typ & HB_IT_NUMERIC ) { config.pszContent = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_CONTENT ) ); } // 10 UINT cButtons config.cButtons = ( hb_arrayGetType( pConfig, TDC_BUTTON ) & HB_IT_NUMERIC ) ? hb_arrayGetNI( pConfig, TDC_BUTTON ) : 0; // 11 const TASKDIALOG_BUTTON *pButtons typ = hb_arrayGetType( pConfig, TDC_TASKDIALOG_BUTTON ); if ( typ & HB_IT_ARRAY ) { PHB_ITEM pButtons = hb_arrayGetItemPtr( pConfig, TDC_TASKDIALOG_BUTTON ); HB_SIZE arrsize; arrsize = hb_arrayLen( pButtons ); if ( ( arrsize > 0 ) && checkButton( pButtons, arrsize ) ) { HB_SIZE i; buttons = ( TASKDIALOG_BUTTON * ) hb_xgrab( sizeof( TASKDIALOG_BUTTON ) * arrsize ); memset( buttons, 0, sizeof( TASKDIALOG_BUTTON ) * arrsize ); hButton = ( void ** ) hb_xgrab( sizeof( void * ) * ( arrsize ) ); for ( i = 0; i < arrsize; ++i ) { PHB_ITEM button = hb_arrayGetItemPtr( pButtons, i + 1 ); buttons.nButtonID = hb_arrayGetNI( button, 1 ); if ( ( hb_arrayGetType( button, 2 ) & HB_IT_STRING ) != 0 ) { buttons.pszButtonText = HB_ARRAYGETSTR( button, 2, &hButton[ iButton++ ], NULL ); } else { buttons.pszButtonText = MAKEINTRESOURCE( hb_arrayGetNI( button, 2 ) ); } } config.cButtons = HB_MIN( config.cButtons, arrsize ); config.pButtons = buttons; } } // 12 int nDefaultButton config.nDefaultButton = ( hb_arrayGetType( pConfig, TDC_DEFAULTBUTTON ) & HB_IT_NUMERIC ) ? hb_arrayGetNI( pConfig, TDC_DEFAULTBUTTON ) : 0; // 13 UINT cRadioButtons config.cRadioButtons = ( hb_arrayGetType( pConfig, TDC_RADIOBUTTON ) & HB_IT_NUMERIC ) ? hb_arrayGetNI( pConfig, TDC_RADIOBUTTON ) : 0; // 14 const TASKDIALOG_BUTTON *pRadioButtons typ = hb_arrayGetType( pConfig, TDC_TASKDIALOG_RADIOBUTTON ); if ( typ & HB_IT_ARRAY ) { PHB_ITEM pButtons = hb_arrayGetItemPtr( pConfig, TDC_TASKDIALOG_RADIOBUTTON ); HB_SIZE arrsize; arrsize = hb_arrayLen( pButtons ); if ( ( arrsize > 0 ) && checkButton( pButtons, arrsize ) ) { HB_SIZE i; radiobuttons = ( TASKDIALOG_BUTTON * ) hb_xgrab( sizeof( TASKDIALOG_BUTTON ) * arrsize ); memset( radiobuttons, 0, sizeof( TASKDIALOG_BUTTON ) * arrsize ); hRadioButton = ( void ** ) hb_xgrab( sizeof( void * ) * ( arrsize ) ); for ( i = 0; i < arrsize; ++i ) { PHB_ITEM button = hb_arrayGetItemPtr( pButtons, i + 1 ); radiobuttons.nButtonID = hb_arrayGetNI( button, 1 ); if ( ( hb_arrayGetType( button, 2 ) & HB_IT_STRING ) != 0 ) { radiobuttons.pszButtonText = HB_ARRAYGETSTR( button, 2, &hRadioButton[ iRadioButton++ ], NULL ); } else { radiobuttons.pszButtonText = MAKEINTRESOURCE( hb_arrayGetNI( button, 2 ) ); } } config.cRadioButtons = HB_MIN( config.cRadioButtons, arrsize ); config.pRadioButtons = radiobuttons; } } // 15 int nDefaultRadioButton config.nDefaultRadioButton = ( hb_arrayGetType( pConfig, TDC_DEFAULTRADIOBUTTON ) & HB_IT_NUMERIC ) ? hb_arrayGetNI( pConfig, TDC_DEFAULTRADIOBUTTON ) : 0; // 16 PCWSTR pszVerificationText typ = hb_arrayGetType( pConfig, TDC_VERIFICATIONTEXT ); if ( typ & HB_IT_STRING ) { config.pszVerificationText = HB_PARASTRDEF( 1, TDC_VERIFICATIONTEXT, &hText[iText++], NULL ); } else if (typ & HB_IT_NUMERIC ) { config.pszVerificationText = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_VERIFICATIONTEXT ) ); } else { config.pszVerificationText = NULL; } // 17 PCWSTR pszExpandedInformation typ = hb_arrayGetType( pConfig, TDC_EXPANDEDINFORMATION ); if ( typ & HB_IT_STRING ) { config.pszExpandedInformation = HB_PARASTRDEF( 1, TDC_EXPANDEDINFORMATION, &hText[iText++], NULL ); } else if (typ & HB_IT_NUMERIC ) { config.pszExpandedInformation = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_EXPANDEDINFORMATION ) ); } // 18 PCWSTR pszExpandedControlText typ = hb_arrayGetType( pConfig, TDC_EXPANDEDCONTROLTEXT ); if ( typ & HB_IT_STRING ) { config.pszExpandedControlText = HB_PARASTRDEF( 1, TDC_EXPANDEDCONTROLTEXT, &hText[iText++], NULL ); } else if (typ & HB_IT_NUMERIC ) { config.pszExpandedControlText = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_EXPANDEDCONTROLTEXT ) ); } // 19 PCWSTR pszCollapsedControlText typ = hb_arrayGetType( pConfig, TDC_COLLAPSEDCONTROLTEXT ); if ( typ & HB_IT_STRING ) { config.pszCollapsedControlText = HB_PARASTRDEF( 1, TDC_COLLAPSEDCONTROLTEXT, &hText[iText++], NULL ); } else if (typ & HB_IT_NUMERIC ) { config.pszCollapsedControlText = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_COLLAPSEDCONTROLTEXT ) ); } // 20 union { HICON hFooterIcon; PCWSTR pszFooterIcon; } if ( hb_arrayGetType( pConfig, TDC_FOOTERICON ) & HB_IT_NUMERIC ) { config.pszFooterIcon = ( PCWSTR ) hb_arrayGetNL( pConfig, TDC_FOOTERICON ); } else { config.pszFooterIcon = NULL; } // 21 PCWSTR pszFooter; typ = hb_arrayGetType( pConfig, TDC_FOOTER ); if ( typ & HB_IT_STRING ) { config.pszFooter = HB_PARASTRDEF( 1, TDC_FOOTER, &hText[iText++], NULL ); } else if (typ & HB_IT_NUMERIC ) { config.pszFooter = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_FOOTER ) ); } // 22 PFTASKDIALOGCALLBACK pfCallback; // 23 LONG_PTR lpCallbackData; if ( hb_arrayGetType( pConfig, TDC_CALLBACK ) & HB_IT_EVALITEM ) { pCallbackData = hb_itemNew( hb_arrayGetItemPtr( pConfig, TDC_CALLBACK ) ); hb_gcUnlock( pCallbackData ); config.lpCallbackData = ( LONG_PTR ) pCallbackData; config.pfCallback = TDCallbackProc; } // 24 UINT cxWidth; config.cxWidth = ( hb_arrayGetType( pConfig, TDC_WIDTH ) & HB_IT_NUMERIC ) ? hb_arrayGetNI( pConfig, TDC_WIDTH ) : 0; hResult = TaskDialogIndirect( &config, &nButton, &nRadioButton, &fVerificationFlagChecked ); while( --iText >= 0 ) hb_strfree( hText[ iText ] ); hb_xfree( hText ); while( --iButton >= 0 ) hb_strfree( hButton[ iButton ] ); if ( hButton ) hb_xfree( hButton ); while( --iRadioButton >= 0 ) hb_strfree( hRadioButton[ iRadioButton ] ); if ( hRadioButton ) hb_xfree( hRadioButton ); if ( hb_arrayGetType( pConfig, TDC_CALLBACK ) & HB_IT_EVALITEM ) { hb_itemRelease( ( PHB_ITEM ) config.lpCallbackData ); } if ( hResult == S_OK ) { if ( nButton ) { hb_storni( nButton, 2 ); } else { hb_stor( 2 ); } if ( nRadioButton ) { hb_storni( nRadioButton, 3 ); } else { hb_stor( 3 ); } hb_storl( fVerificationFlagChecked, 4 ); } else { hb_stor( 2 ); hb_stor( 3 ); hb_stor( 4 ); } hb_retnint( hResult ); } else { hb_errRT_BASE_SubstR( EG_ARG, 0, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); } } static HB_BOOL checkButton( const PHB_ITEM arrayOfButtons, HB_SIZE arraysize ) { PHB_ITEM button; HB_SIZE i; for ( i = 1; i <= arraysize; ++i ) { button = hb_arrayGetItemPtr( arrayOfButtons, i ); if( HB_IS_ARRAY( button ) && hb_arrayLen( button ) > 1 ) { if ( ! ( ( ( hb_arrayGetType( button, 1 ) & HB_IT_NUMERIC ) != 0 ) && ( ( hb_arrayGetType( button, 2 ) & ( HB_IT_STRING | HB_IT_NUMERIC ) ) !=0 ) ) ) { return HB_FALSE; } } else { return HB_FALSE; } } return HB_TRUE; } HRESULT CALLBACK TDCallbackProc( HWND hWnd, UINT uNotification, WPARAM wParam, LPARAM lParam, LONG_PTR dwRefData ) { HRESULT hRes; PHB_ITEM pCallback = ( PHB_ITEM ) dwRefData; if( pCallback && hb_vmRequestReenter() ) { hb_vmPushEvalSym(); hb_vmPush( pCallback ); hb_vmPushNumInt( ( HB_MAXINT ) ( HB_PTRUINT ) hWnd ); hb_vmPushNumInt( ( HB_MAXINT ) uNotification ); hb_vmPushNumInt( wParam ); hb_vmPushNumInt( lParam ); hb_vmSend( 4 ); hRes = ( ( hb_parl( -1 ) == HB_TRUE ) ? S_OK : S_FALSE ); hb_vmRequestRestore(); return hRes; } return S_OK; } #pragma ENDDUMP
| Возникли следующие вопросы: 1) как сделать в этом диалоге вывод картинок из внешнего файла (использовать MAKEINTRESOURCE ); 2) как правильно сделать неявный вызов функции TaskDialogIndirect() из comctl32.dll (с использованием LoadLibrary() / GetProcAddress()) Это требуется для вызова этой функции под BCC 5.5: цитата: | #if ( defined( __BORLANDC__ ) && __BORLANDC__ <= 1410 ) #include "tdi.h" // <-- здесь определения для структур TaskDialogIndirect #endif |
| P.S. Благодарю за реализацию на Си функции TaskDialog() - пригодится
| |
|
Петр
|
| постоянный участник
|
Пост N: 1244
Зарегистрирован: 09.10.06
|
|
Отправлено: 10.08.16 21:26. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Добавил поддержку вывода стандартных иконок в диалоге (см.ниже) |
|
gfilatov2002 пишет: цитата: | // 7 union { HICON hMainIcon; PCWSTR pszMainIcon; }; if ( hb_arrayGetType( pConfig, TDC_MAINICON ) & HB_IT_NUMERIC ) { config.pszMainIcon = ( PCWSTR ) hb_arrayGetNL( pConfig, TDC_MAINICON ); } else { config.pszMainIcon = NULL; } |
| Что-то здесь не так. при присвоении значения MainIcon мы можем использовать строку - имя ресурса, ID - числовой идентификатор ресурса, хендл HICON при этом в первых двух случаях используется pszMainIcon, а в последнем hMainIcon. typ = hb_arrayGetType( pConfig, TDC_MAINICON ); if ( typ & HB_IT_STRING ) { config.pszMainIcon = HB_PARASTRDEF( 1, TDC_MAINICON, &hText[iText++], NULL ) } else if (typ & HB_IT_NUMERIC ) { config.pszMainIcon = MAKEINTRESOURCE( hb_arrayGetNI( pConfig, TDC_MAINICON ) ); } else if (typ & HB_IT_POINTER ) { config.hMainIcon = (HICON) ( hb_arrayGetPtr( pConfig, TDC_MAINICON ) ); } else { config.pszMainIcon = NULL; } Поскольку в Minigui есть своя, скажем так, специфика в интерпретации указателей, я осознанно (не только из-за лени ) упустил присвоение значения нескольким членам структуры TASKDIALOGCONFIG.
| |
|
|
gfilatov2002
|
| moderator
|
Пост N: 986
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.08.16 21:37. Заголовок: Петр пишет: при при..
Петр пишет: цитата: | при присвоении значения MainIcon мы можем использовать |
| Благодарю за помощь - работает
| |
|
Петр
|
| постоянный участник
|
Пост N: 1245
Зарегистрирован: 09.10.06
|
|
Отправлено: 10.08.16 21:40. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | как сделать в этом диалоге вывод картинок из внешнего файла |
| Что значит внешний файл. TaskDialogIndirect ориентирован в первую очередь на использование ресурсов (строк и иконок). При этом ресурсы могут находиться как в собственно исполняемом файле config.hInstance = NULL или GetModuleHandle(NULL), так и в других файлах (например динамической библиотеке dll или другом исполняемом файле exe). О hMainIcon уже писал, т.е иконку можно загрузить из файла, сгенерировать на лету или сконвертировать из другого формата с помощью gdi+ или других библиотек для обработки изображений.
| |
|
Петр
|
| постоянный участник
|
Пост N: 1246
Зарегистрирован: 09.10.06
|
|
Отправлено: 10.08.16 21:43. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Благодарю за помощь - работает |
| Все это, я думаю вы уже поняли, относится и к FooterIcon.
| |
|
gfilatov2002
|
| moderator
|
Пост N: 987
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.08.16 21:44. Заголовок: Петр пишет: в друг..
Петр пишет: цитата: | в других файлах (например динамической библиотеке dll |
| Имел в ввиду этот случай - конкретно, системные dll
| |
|
gfilatov2002
|
| moderator
|
Пост N: 988
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.08.16 21:47. Заголовок: Петр пишет: Все это..
Петр пишет: цитата: | Все это, я думаю вы уже поняли, относится и к FooterIcon |
| Да, понял Благодарю за разъяснение Увы, но работа этих диалоговых функций под bcc 5.5 приводит к вылету программы (не судьба, видимо, использовать со старым компилятором )
| |
|
gfilatov2002
|
| moderator
|
Пост N: 989
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.08.16 11:11. Заголовок: Петр , Обратил внима..
Петр, Обратил внимание, что параметр lParam в callback-функции при использовании флажка TDF_ENABLE_HYPERLINKS должен быть строкового типа (и содержать адрес URL), а не число, как сейчас Возможно ли это поправить
| |
|
Петр
|
| постоянный участник
|
Пост N: 1247
Зарегистрирован: 09.10.06
|
|
Отправлено: 11.08.16 11:44. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Возможно ли это поправить |
| Попробуйте это (нет возможности проверить самому) цитата: | HRESULT CALLBACK TDCallbackProc( HWND hWnd, UINT uNotification, WPARAM wParam, LPARAM lParam, LONG_PTR dwRefData ) { HRESULT hRes; PHB_ITEM pCallback = ( PHB_ITEM ) dwRefData; if( pCallback && hb_vmRequestReenter() ) { PHB_ITEM itm = hb_itemNew( NULL ); hb_vmPushEvalSym(); hb_vmPush( pCallback ); hb_vmPushNumInt( ( HB_MAXINT ) ( HB_PTRUINT ) hWnd ); hb_vmPushNumInt( ( HB_MAXINT ) uNotification ); hb_vmPushNumInt( wParam ); if ( uNotification == TDN_HYPERLINK_CLICKED) { HB_ITEMPUTSTR( itm, (HB_WCHAR *) lParam ); hb_vmPushItemRef( itm ); } else { hb_vmPushNumInt( lParam ); } hb_vmSend( 4 ); hRes = ( ( hb_parl( -1 ) == HB_TRUE ) ? S_OK : S_FALSE ); hb_itemRelease( itm ); hb_vmRequestRestore(); return hRes; } return S_OK; } |
|
| |
|
gfilatov2002
|
| moderator
|
Пост N: 990
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.08.16 12:56. Заголовок: Петр пишет: Попробу..
Петр пишет: Проверю сегодня вечером ... Судя по коду - должно работать Благодарю за помощь
| |
|
Softlog86
|
| |
Пост N: 318
Зарегистрирован: 03.12.08
|
|
Отправлено: 11.08.16 15:51. Заголовок: Вопрос вроде как уже..
Вопрос вроде как уже поднимался ..... не нашел в темах . Извините если что Имеем - стандартное окно . В нем организовано еще одно типа PANEL с VIRTUAL HEIGHT - оно со скроллингом разумеется . в это окно (назовем его VIRTUAL_W ) - имеется некоторое количество контролов , лабелов и т д . 1 проблема >> после заполнения всех контролов - пока не сдвинешь в этом окне (стрелками или скролбаром) - некоторые элементы отображаются неверно Например LABEL - задан один цвет - а при первичной прорисовке он вовсе не такой . Нужно это окно сдвинуть вверх-вниз . тогда цвет уже такой как задавал Пытаюсь передать в это окно команду PageUp - чтоб имитировать нажатие форма всё-равно не прорисовывается правильно ....: hwnd:=ASCAN(_HMG_aFormNames,'HC_VIRT') IF hwnd >0 SendMessage ( hwnd, WM_VSCROLL, SB_PAGEUP, 0 ) ENDIF 2 Проблема - в окне есть элемент DRAW GRADIENT или DRAW LINE при каких то изменениях в этом окне - например передвижение или изменение LABEL VALUE и т д , этот самый DRAW LINE /GRADIENT не перерисовывается . Причем не всегда - то нормально - то с запаздыванием от от пары секунд до десятка . Иногда вообще не перерисовывается . прилагаю скрин
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|