Como fechar caixa de diálogo apenas clicando no OK

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Como fechar caixa de diálogo apenas clicando no OK

Mensagem 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
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Como fechar caixa de diálogo apenas clicando no OK

Mensagem 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.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Como fechar caixa de diálogo apenas clicando no OK

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Como fechar caixa de diálogo apenas clicando no OK

Mensagem por porter »

Obrigado Claudio Soto e JoseQuintas, agora deu certo.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Como fechar caixa de diálogo apenas clicando no OK

Mensagem 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
Responder