Página 1 de 1

Como fechar caixa de diálogo apenas clicando no OK

Enviado: 03 Mai 2018 19:51
por porter
Olá pessoal,
Tenho aqui uma rotina para caixa de diálogo, ao clicar fora da caixa, a caixa fecha voltando para rotina anterior,
nessa rotina, foi criado um botão OK, como faço para essa caixa ser fechada, apenas se clicar nesse botão OK ?
Harbour 3.2.0dev - GTWVG
Obrigado.

Código: Selecionar todos

FUNCTION DynWinDialog()
   LOCAL hDlg, aDlg, nStyle, cDlgIcon, cDlgProc, lOnTop, hMenu
    aDlg := Wvt_MakeDlgTemplate( 1, 16, 18, 40, { 4, 5, 5, 4 },  VERSION() + " " + hb_gtInfo( HB_GTI_VERSION ) + HB_EOL() )
   
    nStyle := WS_CHILD + WS_VISIBLE + WS_TABSTOP + ES_AUTOVSCROLL + ES_MULTILINE + ES_WANTRETURN + WS_BORDER  + WS_VSCROLL
   
   aDlg   := Wvt_AddDlgItem( aDlg,  1, 2, 15, 35, {}, ID_MLE       , "EDIT"   , nStyle, /* cText, nHelpId, nExStyle */ )
   
   nStyle := WS_CHILD + WS_VISIBLE + SS_ICON //+ SS_CENTERIMAGE
   aDlg   := Wvt_AddDlgItem( aDlg, 18, 2, 2, 6, {}, ID_ICO_VOUCH  , "STATIC" , nStyle, "" )
  
// BOTAO OK
   nStyle :=            WS_VISIBLE + WS_TABSTOP + BS_PUSHBUTTON           
   aDlg   := Wvt_AddDlgItem( aDlg, 17, 20, 1,  8, { 2, 1, 1 , 0 }, ID_BTN_OK, "BUTTON" , nStyle, "OK" )   
   cDlgProc    := "DynDlgProc"

// Modeless Dialog
    hDlg := Wvt_CreateDialog( aDlg, lOnTop, cDlgProc, cDlgIcon, /*nTimerTicks*/, hMenu )
   
FUNCTION DynDlgProc( hDlg, nMsg, wParam, lParam )
   SWITCH nMsg
   // COR DA FONTE
   CASE WM_CTLCOLOREDIT
      IF Wvg_GetDlgItem( hDlg, ID_MLE ) == lParam
         Wvg_SetTextColor( wParam, RGB(0    ,0  , 0   ) )  // COR DA FONTE
         Wvg_SetBkColor  ( wParam, RGB( 255 ,178, 102 ) )  // COR DE FUNDO
         RETURN 1
      ENDIF
   CASE WM_INITDIALOG
      Wvg_SetDlgItemText( hDlg, ID_MLE, GetEditText() )

   CASE WM_DESTROY
      Wvg_GetDlgItemText( hDlg, ID_MLE )
   ENDSWITCH

Como fechar caixa de diálogo apenas clicando no OK

Enviado: 03 Mai 2018 23:09
por Claudio Soto
Nunca usé las gtxxx pero seria algo asi:

Wvg_DestroyWindow (hDlg)

Caso no este implementada la función DestroyWindow del api de Windows es muy fácil implementarlo desde C.

Como fechar caixa de diálogo apenas clicando no OK

Enviado: 04 Mai 2018 01:01
por JoséQuintas
porter escreveu:nessa rotina, foi criado um botão OK, como faço para essa caixa ser fechada, apenas se clicar nesse botão OK ?Harbour 3.2.0dev - GTWVG
Segundo exemplo:

Código: Selecionar todos

   IF nInfo == 2
      // Modal Dialog
      hDlg := wvt_DialogBox( aDlg, @DynDlgProc(), hb_gtInfo( HB_GTI_WINHANDLE ) )
   ELSE
      // Modeless Dialog
      hDlg := wvt_CreateDialog( aDlg, lOnTop, @DynDlgProc(), cDlgIcon, nTimerTicks, hMenu )
   ENDIF

Como fechar caixa de diálogo apenas clicando no OK

Enviado: 04 Mai 2018 11:23
por porter
Obrigado Claudio Soto e JoseQuintas, agora deu certo.

Como fechar caixa de diálogo apenas clicando no OK

Enviado: 04 Mai 2018 14:09
por porter
Quando executo a caixa de diálogo e fecho, em outras partes do sistema, quando teclo a letra "S" por exemplo em um Tbrowse,
está retornando 287, quando fechar, tenho que desabilitar algo ?

Código: Selecionar todos

IF LASTKEY() = 83  // Letra "S", está retornando 287
    .........
ENDIF